From a4fb6e0c4118eb3c8b96b09586b19a23a2e73a14 Mon Sep 17 00:00:00 2001 From: Tao Tao Date: Thu, 23 May 2024 16:08:13 -0700 Subject: [PATCH 1/5] Initialize verifier repo. --- .github/workflows/basic.yml | 13 + .licenseignore | 13 + Dockerfile | 61 + LICENSE | 177 + README.md | 138 +- SECURITY.md | 4 + bin/setup | 12 + docker-compose.yml | 79 + docker-delete-containers.sh | 22 + docker-dependencies.sh | 58 + docker-export-logs.sh | 26 + docker-start-containers.sh | 93 + docker-stop.sh | 20 + docker/usr/local/verifier/migrate.sh | 40 + docker/usr/local/verifier/prepare_db.sh | 36 + docker/usr/local/verifier/start.sh | 29 + docker/usr/local/verifier/test.sh | 27 + docs/API.md | 320 + docs/integrating_with_centre.md | 200 + package-lock.json | 61922 ++++++++++++++++ package.json | 29 + packages/ethereum-dapp/.eslintrc.json | 3 + packages/ethereum-dapp/.gitignore | 37 + packages/ethereum-dapp/LICENSE | 202 + packages/ethereum-dapp/README.md | 39 + packages/ethereum-dapp/lib/TestRegistry.json | 752 + packages/ethereum-dapp/lib/did.ts | 92 + packages/ethereum-dapp/next-env.d.ts | 23 + packages/ethereum-dapp/next.config.js | 22 + packages/ethereum-dapp/package.json | 44 + packages/ethereum-dapp/pages/index.tsx | 530 + packages/ethereum-dapp/public/favicon.ico | Bin 0 -> 25931 bytes packages/ethereum-dapp/public/vercel.svg | 4 + packages/ethereum-dapp/styles/Home.module.css | 140 + packages/ethereum-dapp/styles/globals.css | 34 + packages/ethereum-dapp/tsconfig.json | 20 + packages/ethereum/.eslintignore | 22 + packages/ethereum/.eslintrc.js | 69 + packages/ethereum/.gitignore | 6 + packages/ethereum/.nvmrc | 1 + packages/ethereum/.prettierrc.json | 4 + packages/ethereum/README.md | 72 + packages/ethereum/babel.config.js | 24 + packages/ethereum/bin/setup | 13 + .../contracts/IVerificationRegistry.sol | 161 + packages/ethereum/contracts/TestRegistry.sol | 17 + .../contracts/VerificationRegistry.sol | 370 + packages/ethereum/hardhat.config.ts | 82 + packages/ethereum/package.json | 36 + .../ethereum/test/ethereum-solidity.test.ts | 87 + packages/ethereum/tsconfig.json | 108 + packages/examples/.eslintignore | 17 + packages/examples/.eslintrc.js | 31 + packages/examples/.gitignore | 5 + packages/examples/README.md | 274 + packages/examples/package.json | 32 + .../src/did-documents/issuer-did.json | 57 + .../src/did-documents/subject-did.json | 80 + packages/examples/src/example-issuer.ts | 39 + packages/examples/src/example-verification.ts | 39 + packages/examples/src/index.ts | 20 + packages/examples/src/issuer.ts | 172 + packages/examples/src/verification.ts | 168 + packages/examples/tsconfig.json | 102 + packages/solana-dapp/.gitignore | 23 + packages/solana-dapp/README.md | 33 + packages/solana-dapp/config-overrides.js | 52 + packages/solana-dapp/package.json | 55 + packages/solana-dapp/public/favicon.ico | Bin 0 -> 3870 bytes packages/solana-dapp/public/index.html | 61 + packages/solana-dapp/public/logo192.png | Bin 0 -> 5347 bytes packages/solana-dapp/public/logo512.png | Bin 0 -> 9664 bytes packages/solana-dapp/public/manifest.json | 25 + packages/solana-dapp/public/robots.txt | 3 + packages/solana-dapp/src/App.css | 30 + packages/solana-dapp/src/App.tsx | 599 + packages/solana-dapp/src/did.ts | 92 + packages/solana-dapp/src/idl.json | 117 + packages/solana-dapp/src/index.css | 32 + packages/solana-dapp/src/index.tsx | 35 + packages/solana-dapp/src/react-app-env.d.ts | 19 + packages/solana-dapp/src/reportWebVitals.ts | 33 + packages/solana-dapp/src/setupTests.ts | 23 + packages/solana-dapp/tsconfig.json | 20 + packages/solana/.gitignore | 6 + packages/solana/Anchor.toml | 12 + packages/solana/Cargo.lock | 1315 + packages/solana/Cargo.toml | 4 + packages/solana/README.md | 77 + packages/solana/babel.config.js | 24 + packages/solana/migrations/deploy.ts | 30 + packages/solana/package.json | 18 + packages/solana/programs/verity/Cargo.toml | 20 + packages/solana/programs/verity/Xargo.toml | 2 + packages/solana/programs/verity/src/lib.rs | 131 + packages/solana/tests/verity.test.ts | 186 + packages/solana/tsconfig.json | 10 + packages/verifier/.env | 51 + packages/verifier/.eslintignore | 17 + packages/verifier/.eslintrc.js | 27 + packages/verifier/.gitignore | 8 + packages/verifier/README.md | 201 + packages/verifier/build-web.sh | 25 + packages/verifier/jest.config.ts | 224 + packages/verifier/package.json | 102 + packages/verifier/prisma/create-db.js | 129 + .../migration.sql | 38 + .../20220201144934_grant_access/migration.sql | 17 + .../migration.sql | 19 + .../migration.sql | 21 + .../migration.sql | 19 + .../migration.sql | 61 + .../migration.sql | 29 + .../migration.sql | 49 + .../migration.sql | 53 + .../migration.sql | 31 + .../migration.sql | 31 + .../prisma/migrations/migration_lock.toml | 3 + packages/verifier/prisma/schema.prisma | 62 + .../src/api/apiClients/createApiClient.ts | 58 + .../verifier/src/api/apiClients/getClients.ts | 45 + .../verifier/src/api/apiClients/revoke.ts | 68 + packages/verifier/src/api/ping.ts | 28 + packages/verifier/src/api/users/createUser.ts | 66 + packages/verifier/src/api/users/getUser.ts | 40 + .../verifier/src/api/verifications/create.ts | 220 + .../verifier/src/api/verifications/show.ts | 56 + .../verifier/src/api/verifications/status.ts | 52 + .../verifier/src/api/verifications/submit.ts | 124 + packages/verifier/src/app.ts | 90 + packages/verifier/src/index.ts | 23 + packages/verifier/src/lib/apiAuth.ts | 58 + packages/verifier/src/lib/coder.ts | 142 + .../verifier/src/lib/database/apiClient.ts | 98 + packages/verifier/src/lib/database/prisma.ts | 42 + packages/verifier/src/lib/database/user.ts | 51 + .../src/lib/database/verifications.ts | 142 + packages/verifier/src/lib/did/index.ts | 41 + packages/verifier/src/lib/did/key.ts | 52 + packages/verifier/src/lib/did/pkh.ts | 31 + packages/verifier/src/lib/did/web.ts | 26 + packages/verifier/src/lib/env.ts | 35 + packages/verifier/src/lib/errors.ts | 147 + packages/verifier/src/lib/ethers.ts | 33 + .../verifier/src/lib/monitoring/config.ts | 35 + packages/verifier/src/lib/monitoring/index.ts | 20 + .../verifier/src/lib/monitoring/statsd.ts | 80 + .../src/lib/presentation-definition.ts | 277 + packages/verifier/src/lib/results/defaults.ts | 23 + packages/verifier/src/lib/results/ethereum.ts | 158 + packages/verifier/src/lib/results/index.ts | 20 + packages/verifier/src/lib/results/solana.ts | 174 + packages/verifier/src/lib/routes.ts | 90 + .../lib/schemas/EntityAccInvAttestation.ts | 41 + .../src/lib/schemas/KYBPAMLAttestation.ts | 41 + .../src/lib/schemas/KYCAMLAttestation.ts | 41 + packages/verifier/src/lib/solana.ts | 66 + packages/verifier/src/lib/tracing/index.ts | 91 + packages/verifier/src/lib/url-fns.ts | 33 + .../verifier/src/lib/utils/api-clients.ts | 112 + packages/verifier/src/lib/utils/async-fns.ts | 34 + packages/verifier/src/lib/utils/auth.ts | 62 + packages/verifier/src/lib/utils/catch-err.ts | 53 + .../src/lib/utils/key-management-client.ts | 33 + packages/verifier/src/lib/utils/ssm-client.ts | 55 + packages/verifier/src/lib/utils/user.ts | 63 + .../src/lib/validations/credential.ts | 332 + .../lib/validations/didToAddressConverter.ts | 130 + .../verifier/src/lib/validations/expiry.ts | 35 + .../src/lib/validations/revocation.ts | 208 + .../verifier/src/lib/validations/subject.ts | 71 + packages/verifier/src/lib/verifier.ts | 153 + packages/verifier/src/logger/index.ts | 104 + packages/verifier/src/server.ts | 48 + packages/verifier/src/types/credentials.ts | 47 + packages/verifier/src/types/presentation.ts | 57 + .../verifier/src/types/verification-result.ts | 27 + packages/verifier/src/views/css/style.css | 193 + .../verifier/src/views/img/circle-icon.jpg | Bin 0 -> 35670 bytes .../verifier/src/views/img/verite-banner.jpg | Bin 0 -> 459536 bytes packages/verifier/src/views/js/index.js | 323 + packages/verifier/src/views/pages/index.ejs | 28 + packages/verifier/src/views/partials/head.ejs | 35 + .../src/views/partials/legal-terms.ejs | 263 + .../verifier/src/views/partials/new-token.ejs | 12 + .../src/views/partials/revoke-token.ejs | 27 + .../verifier/src/views/partials/signup.ejs | 16 + packages/verifier/test/.eslintrc.js | 39 + .../api/apiClients/createApiClient.test.ts | 64 + .../test/api/apiClients/revoke.test.ts | 165 + packages/verifier/test/api/ping.test.ts | 28 + .../test/api/users/createUser.test.ts | 86 + .../verifier/test/api/users/getUser.test.ts | 50 + .../test/api/verifications/create.test.ts | 170 + .../test/api/verifications/show.test.ts | 44 + .../test/api/verifications/status.test.ts | 83 + .../test/api/verifications/submit.test.ts | 279 + packages/verifier/test/factories/did.ts | 100 + packages/verifier/test/factories/jwt.ts | 47 + .../test/factories/presentation-definition.ts | 123 + .../verifier/test/factories/revocationList.ts | 87 + .../test/factories/verifiable-credential.ts | 111 + .../test/factories/verifiable-presentation.ts | 123 + .../verifier/test/factories/verification.ts | 49 + packages/verifier/test/lib/coder.test.ts | 75 + .../test/lib/database/apiClients.test.ts | 132 + .../verifier/test/lib/database/user.test.ts | 63 + .../test/lib/database/verifications.test.ts | 96 + packages/verifier/test/lib/did/index.test.ts | 156 + packages/verifier/test/lib/env.test.ts | 37 + packages/verifier/test/lib/errors.test.ts | 92 + .../test/lib/presentation-definition.test.ts | 53 + .../test/lib/results/ethereum.test.ts | 197 + .../verifier/test/lib/results/solana.test.ts | 400 + packages/verifier/test/lib/url-fns.test.ts | 27 + .../test/lib/validations/expiry.test.ts | 48 + .../test/lib/validations/revocation.test.ts | 157 + .../test/lib/validations/subject.test.ts | 112 + packages/verifier/test/lib/verifier.test.ts | 549 + packages/verifier/test/logger/index.test.ts | 56 + packages/verifier/test/setup.ts | 34 + packages/verifier/tsconfig.build.json | 5 + packages/verifier/tsconfig.json | 103 + pr_test.sh | 36 + rebuild-db.sh | 32 + run-verifier-test.sh | 60 + test/fixtures/did-eddsa-base58.json | 55 + test/fixtures/did-eddsa-hex.json | 55 + test/fixtures/did-eddsa-jwk.json | 80 + test/fixtures/did-eddsa-multibase.json | 55 + test/fixtures/did-es256k-base58.json | 41 + test/fixtures/did-es256k-jwk.json | 57 + test/fixtures/did-es256k-multibase.json | 41 + test/fixtures/ed-es256k-hex.json | 41 + 234 files changed, 81744 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/basic.yml create mode 100644 .licenseignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 SECURITY.md create mode 100755 bin/setup create mode 100644 docker-compose.yml create mode 100755 docker-delete-containers.sh create mode 100755 docker-dependencies.sh create mode 100755 docker-export-logs.sh create mode 100755 docker-start-containers.sh create mode 100755 docker-stop.sh create mode 100755 docker/usr/local/verifier/migrate.sh create mode 100755 docker/usr/local/verifier/prepare_db.sh create mode 100755 docker/usr/local/verifier/start.sh create mode 100755 docker/usr/local/verifier/test.sh create mode 100644 docs/API.md create mode 100644 docs/integrating_with_centre.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 packages/ethereum-dapp/.eslintrc.json create mode 100644 packages/ethereum-dapp/.gitignore create mode 100644 packages/ethereum-dapp/LICENSE create mode 100644 packages/ethereum-dapp/README.md create mode 100644 packages/ethereum-dapp/lib/TestRegistry.json create mode 100644 packages/ethereum-dapp/lib/did.ts create mode 100644 packages/ethereum-dapp/next-env.d.ts create mode 100644 packages/ethereum-dapp/next.config.js create mode 100644 packages/ethereum-dapp/package.json create mode 100644 packages/ethereum-dapp/pages/index.tsx create mode 100644 packages/ethereum-dapp/public/favicon.ico create mode 100644 packages/ethereum-dapp/public/vercel.svg create mode 100644 packages/ethereum-dapp/styles/Home.module.css create mode 100644 packages/ethereum-dapp/styles/globals.css create mode 100644 packages/ethereum-dapp/tsconfig.json create mode 100644 packages/ethereum/.eslintignore create mode 100644 packages/ethereum/.eslintrc.js create mode 100644 packages/ethereum/.gitignore create mode 100644 packages/ethereum/.nvmrc create mode 100644 packages/ethereum/.prettierrc.json create mode 100644 packages/ethereum/README.md create mode 100644 packages/ethereum/babel.config.js create mode 100755 packages/ethereum/bin/setup create mode 100644 packages/ethereum/contracts/IVerificationRegistry.sol create mode 100644 packages/ethereum/contracts/TestRegistry.sol create mode 100644 packages/ethereum/contracts/VerificationRegistry.sol create mode 100644 packages/ethereum/hardhat.config.ts create mode 100644 packages/ethereum/package.json create mode 100644 packages/ethereum/test/ethereum-solidity.test.ts create mode 100644 packages/ethereum/tsconfig.json create mode 100644 packages/examples/.eslintignore create mode 100644 packages/examples/.eslintrc.js create mode 100644 packages/examples/.gitignore create mode 100644 packages/examples/README.md create mode 100644 packages/examples/package.json create mode 100644 packages/examples/src/did-documents/issuer-did.json create mode 100644 packages/examples/src/did-documents/subject-did.json create mode 100644 packages/examples/src/example-issuer.ts create mode 100644 packages/examples/src/example-verification.ts create mode 100644 packages/examples/src/index.ts create mode 100644 packages/examples/src/issuer.ts create mode 100644 packages/examples/src/verification.ts create mode 100644 packages/examples/tsconfig.json create mode 100644 packages/solana-dapp/.gitignore create mode 100644 packages/solana-dapp/README.md create mode 100644 packages/solana-dapp/config-overrides.js create mode 100644 packages/solana-dapp/package.json create mode 100644 packages/solana-dapp/public/favicon.ico create mode 100644 packages/solana-dapp/public/index.html create mode 100644 packages/solana-dapp/public/logo192.png create mode 100644 packages/solana-dapp/public/logo512.png create mode 100644 packages/solana-dapp/public/manifest.json create mode 100644 packages/solana-dapp/public/robots.txt create mode 100644 packages/solana-dapp/src/App.css create mode 100644 packages/solana-dapp/src/App.tsx create mode 100644 packages/solana-dapp/src/did.ts create mode 100644 packages/solana-dapp/src/idl.json create mode 100644 packages/solana-dapp/src/index.css create mode 100644 packages/solana-dapp/src/index.tsx create mode 100644 packages/solana-dapp/src/react-app-env.d.ts create mode 100644 packages/solana-dapp/src/reportWebVitals.ts create mode 100644 packages/solana-dapp/src/setupTests.ts create mode 100644 packages/solana-dapp/tsconfig.json create mode 100644 packages/solana/.gitignore create mode 100644 packages/solana/Anchor.toml create mode 100644 packages/solana/Cargo.lock create mode 100644 packages/solana/Cargo.toml create mode 100644 packages/solana/README.md create mode 100644 packages/solana/babel.config.js create mode 100644 packages/solana/migrations/deploy.ts create mode 100644 packages/solana/package.json create mode 100644 packages/solana/programs/verity/Cargo.toml create mode 100644 packages/solana/programs/verity/Xargo.toml create mode 100644 packages/solana/programs/verity/src/lib.rs create mode 100644 packages/solana/tests/verity.test.ts create mode 100644 packages/solana/tsconfig.json create mode 100644 packages/verifier/.env create mode 100644 packages/verifier/.eslintignore create mode 100644 packages/verifier/.eslintrc.js create mode 100644 packages/verifier/.gitignore create mode 100644 packages/verifier/README.md create mode 100755 packages/verifier/build-web.sh create mode 100644 packages/verifier/jest.config.ts create mode 100644 packages/verifier/package.json create mode 100644 packages/verifier/prisma/create-db.js create mode 100644 packages/verifier/prisma/migrations/20211209212712_create_schema/migration.sql create mode 100644 packages/verifier/prisma/migrations/20220201144934_grant_access/migration.sql create mode 100644 packages/verifier/prisma/migrations/20220224170112_add_name_and_version_to_verifications/migration.sql create mode 100644 packages/verifier/prisma/migrations/20220224192853_make_name_and_version_optional/migration.sql create mode 100644 packages/verifier/prisma/migrations/20220224194132_make_chainid_optional/migration.sql create mode 100644 packages/verifier/prisma/migrations/20220923172241_datadog_permissions/migration.sql create mode 100644 packages/verifier/prisma/migrations/20221014212934_grant_access_pi_ro_user/migration.sql create mode 100644 packages/verifier/prisma/migrations/20221027163943_added_api_clients_table/migration.sql create mode 100644 packages/verifier/prisma/migrations/20221114055711_create_users_table/migration.sql create mode 100644 packages/verifier/prisma/migrations/20231030081328_grant_access_protractor/migration.sql create mode 100644 packages/verifier/prisma/migrations/20231109105816_fix_grant_access_protractor/migration.sql create mode 100644 packages/verifier/prisma/migrations/migration_lock.toml create mode 100644 packages/verifier/prisma/schema.prisma create mode 100644 packages/verifier/src/api/apiClients/createApiClient.ts create mode 100644 packages/verifier/src/api/apiClients/getClients.ts create mode 100644 packages/verifier/src/api/apiClients/revoke.ts create mode 100644 packages/verifier/src/api/ping.ts create mode 100644 packages/verifier/src/api/users/createUser.ts create mode 100644 packages/verifier/src/api/users/getUser.ts create mode 100644 packages/verifier/src/api/verifications/create.ts create mode 100644 packages/verifier/src/api/verifications/show.ts create mode 100644 packages/verifier/src/api/verifications/status.ts create mode 100644 packages/verifier/src/api/verifications/submit.ts create mode 100644 packages/verifier/src/app.ts create mode 100644 packages/verifier/src/index.ts create mode 100644 packages/verifier/src/lib/apiAuth.ts create mode 100644 packages/verifier/src/lib/coder.ts create mode 100644 packages/verifier/src/lib/database/apiClient.ts create mode 100644 packages/verifier/src/lib/database/prisma.ts create mode 100644 packages/verifier/src/lib/database/user.ts create mode 100644 packages/verifier/src/lib/database/verifications.ts create mode 100644 packages/verifier/src/lib/did/index.ts create mode 100644 packages/verifier/src/lib/did/key.ts create mode 100644 packages/verifier/src/lib/did/pkh.ts create mode 100644 packages/verifier/src/lib/did/web.ts create mode 100644 packages/verifier/src/lib/env.ts create mode 100644 packages/verifier/src/lib/errors.ts create mode 100644 packages/verifier/src/lib/ethers.ts create mode 100644 packages/verifier/src/lib/monitoring/config.ts create mode 100644 packages/verifier/src/lib/monitoring/index.ts create mode 100644 packages/verifier/src/lib/monitoring/statsd.ts create mode 100644 packages/verifier/src/lib/presentation-definition.ts create mode 100644 packages/verifier/src/lib/results/defaults.ts create mode 100644 packages/verifier/src/lib/results/ethereum.ts create mode 100644 packages/verifier/src/lib/results/index.ts create mode 100644 packages/verifier/src/lib/results/solana.ts create mode 100644 packages/verifier/src/lib/routes.ts create mode 100644 packages/verifier/src/lib/schemas/EntityAccInvAttestation.ts create mode 100644 packages/verifier/src/lib/schemas/KYBPAMLAttestation.ts create mode 100644 packages/verifier/src/lib/schemas/KYCAMLAttestation.ts create mode 100644 packages/verifier/src/lib/solana.ts create mode 100644 packages/verifier/src/lib/tracing/index.ts create mode 100644 packages/verifier/src/lib/url-fns.ts create mode 100644 packages/verifier/src/lib/utils/api-clients.ts create mode 100644 packages/verifier/src/lib/utils/async-fns.ts create mode 100644 packages/verifier/src/lib/utils/auth.ts create mode 100644 packages/verifier/src/lib/utils/catch-err.ts create mode 100644 packages/verifier/src/lib/utils/key-management-client.ts create mode 100644 packages/verifier/src/lib/utils/ssm-client.ts create mode 100644 packages/verifier/src/lib/utils/user.ts create mode 100644 packages/verifier/src/lib/validations/credential.ts create mode 100644 packages/verifier/src/lib/validations/didToAddressConverter.ts create mode 100644 packages/verifier/src/lib/validations/expiry.ts create mode 100644 packages/verifier/src/lib/validations/revocation.ts create mode 100644 packages/verifier/src/lib/validations/subject.ts create mode 100644 packages/verifier/src/lib/verifier.ts create mode 100644 packages/verifier/src/logger/index.ts create mode 100644 packages/verifier/src/server.ts create mode 100644 packages/verifier/src/types/credentials.ts create mode 100644 packages/verifier/src/types/presentation.ts create mode 100644 packages/verifier/src/types/verification-result.ts create mode 100644 packages/verifier/src/views/css/style.css create mode 100644 packages/verifier/src/views/img/circle-icon.jpg create mode 100644 packages/verifier/src/views/img/verite-banner.jpg create mode 100644 packages/verifier/src/views/js/index.js create mode 100644 packages/verifier/src/views/pages/index.ejs create mode 100644 packages/verifier/src/views/partials/head.ejs create mode 100644 packages/verifier/src/views/partials/legal-terms.ejs create mode 100644 packages/verifier/src/views/partials/new-token.ejs create mode 100644 packages/verifier/src/views/partials/revoke-token.ejs create mode 100644 packages/verifier/src/views/partials/signup.ejs create mode 100644 packages/verifier/test/.eslintrc.js create mode 100644 packages/verifier/test/api/apiClients/createApiClient.test.ts create mode 100644 packages/verifier/test/api/apiClients/revoke.test.ts create mode 100644 packages/verifier/test/api/ping.test.ts create mode 100644 packages/verifier/test/api/users/createUser.test.ts create mode 100644 packages/verifier/test/api/users/getUser.test.ts create mode 100644 packages/verifier/test/api/verifications/create.test.ts create mode 100644 packages/verifier/test/api/verifications/show.test.ts create mode 100644 packages/verifier/test/api/verifications/status.test.ts create mode 100644 packages/verifier/test/api/verifications/submit.test.ts create mode 100644 packages/verifier/test/factories/did.ts create mode 100644 packages/verifier/test/factories/jwt.ts create mode 100644 packages/verifier/test/factories/presentation-definition.ts create mode 100644 packages/verifier/test/factories/revocationList.ts create mode 100644 packages/verifier/test/factories/verifiable-credential.ts create mode 100644 packages/verifier/test/factories/verifiable-presentation.ts create mode 100644 packages/verifier/test/factories/verification.ts create mode 100644 packages/verifier/test/lib/coder.test.ts create mode 100644 packages/verifier/test/lib/database/apiClients.test.ts create mode 100644 packages/verifier/test/lib/database/user.test.ts create mode 100644 packages/verifier/test/lib/database/verifications.test.ts create mode 100644 packages/verifier/test/lib/did/index.test.ts create mode 100644 packages/verifier/test/lib/env.test.ts create mode 100644 packages/verifier/test/lib/errors.test.ts create mode 100644 packages/verifier/test/lib/presentation-definition.test.ts create mode 100644 packages/verifier/test/lib/results/ethereum.test.ts create mode 100644 packages/verifier/test/lib/results/solana.test.ts create mode 100644 packages/verifier/test/lib/url-fns.test.ts create mode 100644 packages/verifier/test/lib/validations/expiry.test.ts create mode 100644 packages/verifier/test/lib/validations/revocation.test.ts create mode 100644 packages/verifier/test/lib/validations/subject.test.ts create mode 100644 packages/verifier/test/lib/verifier.test.ts create mode 100644 packages/verifier/test/logger/index.test.ts create mode 100644 packages/verifier/test/setup.ts create mode 100644 packages/verifier/tsconfig.build.json create mode 100644 packages/verifier/tsconfig.json create mode 100755 pr_test.sh create mode 100755 rebuild-db.sh create mode 100755 run-verifier-test.sh create mode 100644 test/fixtures/did-eddsa-base58.json create mode 100644 test/fixtures/did-eddsa-hex.json create mode 100644 test/fixtures/did-eddsa-jwk.json create mode 100644 test/fixtures/did-eddsa-multibase.json create mode 100644 test/fixtures/did-es256k-base58.json create mode 100644 test/fixtures/did-es256k-jwk.json create mode 100644 test/fixtures/did-es256k-multibase.json create mode 100644 test/fixtures/ed-es256k-hex.json diff --git a/.github/workflows/basic.yml b/.github/workflows/basic.yml new file mode 100644 index 000000000..f762688e6 --- /dev/null +++ b/.github/workflows/basic.yml @@ -0,0 +1,13 @@ +name: Basic workflows +on: + pull_request: + push: + branches: [master] +jobs: + scan: + if: github.event_name == 'pull_request' + uses: circlefin/circle-public-github-workflows/.github/workflows/pr-scan.yaml@v1 + + release-sbom: + if: github.event_name == 'push' + uses: circlefin/circle-public-github-workflows/.github/workflows/attach-release-assets.yaml@v1 diff --git a/.licenseignore b/.licenseignore new file mode 100644 index 000000000..475022c37 --- /dev/null +++ b/.licenseignore @@ -0,0 +1,13 @@ +pkg:npm/borsh +@bcoe/v8-coverage +did-jwt-vc +language-subtag-registry +multiformats +pako +sha.js +sprintf-js +ethereum-dapp +solana-dapp +ethereum +iniparser +hardhat diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..3709de2cd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,61 @@ +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +ARG BASE_IMAGE=node:22.3.0-alpine + +# Build +FROM ${BASE_IMAGE} AS build +ARG IS_DEV +ARG CHAIN_ID +ARG REGISTRY_ADDRESS +ARG VERIFIER_PRIVATE_KEY + +WORKDIR /verifier + +# clean install npm before copying code +COPY ./package-lock.json ./ +COPY ./package.json ./ +RUN npm ci + +# copy everything +COPY ./docker / +COPY . . + +RUN npm run build -w verifier + +# Production Image +FROM ${BASE_IMAGE} + +WORKDIR /verifier + +RUN addgroup -g 9999 circle \ + && adduser circle circle + +COPY --from=build /usr/local/verifier /usr/local/verifier +COPY --from=build /verifier/node_modules ./node_modules +COPY --from=build /verifier/package.json ./package.json +COPY --from=build /verifier/packages/verifier/dist ./packages/verifier/dist +COPY --from=build /verifier/packages/verifier/prisma ./packages/verifier/prisma +COPY --from=build /verifier/packages/verifier/package.json ./packages/verifier/package.json +COPY --from=build /verifier/packages/verifier/node_modules ./packages/verifier/node_modules + +USER circle + +# Disable npm registry for environments with restricted internet access. +# npm fails to run if it can't contact its configured registry +RUN echo "registry=http://none" > /home/circle/.npmrc + +CMD [ "/usr/local/verifier/start.sh" ] diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..f433b1a53 --- /dev/null +++ b/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/README.md b/README.md index 374097d34..987c95680 100644 --- a/README.md +++ b/README.md @@ -1 +1,137 @@ -# verifier \ No newline at end of file +# Verification Service + +Verification API service in accordance with the Verite Smart Contract Patterns as designed by Centre (now Circle). + +## Install Dependencies + +Install Node through nvm. We should use the node version that matches the docker container in production boxes. + +```bash +brew install nvm; +nvm install v14.20.0; +nvm use v14.20.0 +```` + +Upgrade `npm`: + +`npm install -g npm --force` + +Start the dependencies including the database: + +`./docker-dependencies.sh` + +Migrate the database: + +`./rebuild-db.sh` + +## Server local setup + +This repository is organized as a mono-repo, using [npm workspaces](https://docs.npmjs.com/cli/v7/using-npm/workspaces) (which requires npm v7 or greater). +As such, the dependencies for all included packages are installed from the root level using npm install. Do not run npm install from a package's directory. + +### For running verifier server only +This will only run the verifier server. + +##### Install dependencies +From the root of the monorepo, run: +```sh +npm install -w verifier +``` + +If there is database schema changes, the following command is also needed in order to let Prisma to generate codes: +```sh +npm run build -w verifier +``` + +##### Local Development +Start the server through `nodemon` which will auto-compile + rerun upon changes: +```sh +npm run dev -w verifier +``` + +##### Production +Compile the Javascript files and start the server from the Javascript files: +```sh +npm run build -w verifier +npm start -w verifier +``` + +##### Testing +```sh +npm test -w verifier +``` + +## For running the full stack +This will run all the services under the `packages` folder including starting local blockchain. + +##### Setup and install dependencies +From the root of the monorepo, run: +```sh +npm run setup +``` + +This `setup` command only needs to be run once when the project is first being set up. + +##### Local Development + +```sh +npm run dev +``` + +##### Production + +```sh +npm run build +npm start +``` + +##### Testing + +```sh +npm test +``` + +## E2E Examples + + +The Verite Verifier is simply a verifier. At minimum, demos should demonstrate verification of an already issued credential and finally demonstrate that it could be used on chain with a minimal contract. Consequently, this project does not include an issuer or identity wallet. Instead, e2e demos create and present credentials as needed. Additionally, contracts are designed to demonstrate the verification behavior, without any particular utility. + +There are automated tests demonstrating the behaviors of the service end-to-end across both [Ethereum](https://github.com/circlefin/verifier/tree/master/packages/ethereum) and [Solana](https://github.com/circlefin/verifier/tree/master/packages/solana) blockchains. These projects' test cases include VerificationResults and signatures generated from the verifier to demonstrate end-to-end success. + +Additionally, we have provided several additional examples of end-to-end behavior. These include 1) an [end-to-end example of issuance and verification using generic JWT libraries](https://github.com/circlefin/verifier/tree/master/packages/examples), which can be used to port these behvaiors to other languages such as Java or Python, 2) documentation for how to [replace the Verite reference project's verifier with Circle's](https://github.com/circlefin/verifier/blob/master/docs/integrating_with_centre.md), and and finally 3) a [sample ethereum dapp](https://github.com/circlefin/verifier/tree/master/packages/ethereum-dapp) and [sample Solana dapp](https://github.com/circlefin/verifier/tree/master/packages/solana-dapp) that demonstrates E2E the behavior across both blockchains. + +## E2E Examples using standard JWTs + +The Verite project uses [did-jwt-vc](https://github.com/decentralized-identity/did-jwt-vc) to create VCs and VPs as JWTs. While this library is very useful, other implementations might not be written in javascript or may wish to implement their own solution. + +We have provided end-to-end examples using standard JWT libaries so teams can easily recreate the expected behaviors. An end-to-end example, which simulates an Issuer and performs verification, is located in [./packages/examples](https://github.com/circlefin/verifier/tree/master/packages/examples). + +## E2E Examples + +The project includes several end-to-end examples. First, there are two end-to-end examples featuring a Dapp that interacts with the verifier, one for Ethereum and another for Solana. These demos feature the verifier and a minimal implementation of the verification registry using a mocked out issuer and wallet. Additionally, the project includes instructions for how to integrate the verifier with the demos found in the [Verite project](https://github.com/centrehq/verite). Integration with the verite project demonstrates full end-to-end behavior of the Circle Verifier in combination with an issuer, mobile wallet, dapp, and a smart contract. Finally, end-to-end behavior of the Circle Verifier is demonstrated using node. The node scripts specifically demonstrate how both an issuer and verifier can encode Verifiable Credentials and Verifiable Presentations to conform to the Verite spec without using specialized libraries such as did-jwt-vc. This example should be sufficient documentation if attempting to implement these demos in another language or framework, such as Java. + +1. Example [Ethereum Dapp](https://github.com/circlefin/verifier/tree/master/packages/ethereum-dapp) that uses a locally deployed [Ethereum contract](https://github.com/circlefin/verifier/tree/master/packages/ethereum) to demonstrate e2e acceptance of the project on the Ethereum blockchain. +1. Example [Solana Dapp](https://github.com/circlefin/verifier/tree/master/packages/solana-dapp) that uses a locally deployed [Solana contract](https://github.com/circlefin/verifier/tree/master/packages/solana) to demonstrate e2e acceptance of the project on the Solana blockchain. +1. [Integrating with Centre (now Circle)'s Open Source Verite Project](https://github.com/circlefin/verifier/blob/master/docs/integrating_with_centre.md) documentation demonstrates how the Circle Verifier can be easily replaced within a complete ecosystem. Using Verite's issuer, wallet, dapp, and contract -- we demonstrate that the verifier can be easily substituted for the Circle implementation. This demonstrates e2e acceptance of the project on the Ethereum blockchain. +1. [Node Examples](https://github.com/circlefin/verifier/tree/master/packages/examples) that exercise the Circle Verifier while also demonstrating how to encode a Verifiable Credential and Verifiable Presentation JWTs without using a specialized library. + +## Packages + +This library is organized into several packages, located in the `packages` directory. + +| package | description | +| ------------------------------------------------------------------------------------------------ | -------------------------------------------------- | +| [verifier](https://github.com/circlefin/verifier/tree/master/packages/verifier) | Verification Service API | +| [ethereum](https://github.com/circlefin/verifier/tree/master/packages/ethereum) | Ethereum Contract | +| [ethereum-dapp](https://github.com/circlefin/verifier/tree/master/packages/ethereum-dapp) | Ethereum E2E Demo | +| [solana](https://github.com/circlefin/verifier/tree/master/packages/solana) | Solana Program | +| [solana-dapp](https://github.com/circlefin/verifier/tree/master/packages/solana-dapp) | Solana E2E Demo | +| [examples](https://github.com/circlefin/verifier/tree/master/packages/examples) | Example code for interacting with the Verifier API | + +## API Documentation + +See [docs/API.md](https://github.com/circlefin/verifier/tree/master/docs/API.md) + +## Integrating with Centre (now Circle) Verite open-source + +See [docs/integrating_with_centre.md](https://github.com/circlefin/verifier/tree/master/docs/integrating_with_centre.md) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..b161cc8f4 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,4 @@ +# Security Policy + +## Reporting a Vulnerability +Please do not file public issues on Github for security vulnerabilities. All security vulnerabilities should be reported to Circle privately, through Circle's [Vulnerability Disclosure Program](https://hackerone.com/circle). Please read through the program policy before submitting a report. diff --git a/bin/setup b/bin/setup new file mode 100755 index 000000000..4d261c6db --- /dev/null +++ b/bin/setup @@ -0,0 +1,12 @@ +#!/usr/bin/env sh + +# This script sets up the local environment for development. It is safe to +# run this script multiple times. This should be run when you first check +# out the project. + +# Install dependencies +echo "Installing dependencies..." +npm install + +# Run setup on all workspaces +npm run setup --workspaces --if-present \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..5ee57118e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,79 @@ +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +version: "2.3" + +services: + verifier-build: + image: verifier-build + build: + context: . + target: build + verifier: + image: verifier + build: + context: . + environment: + DB_HOST: postgres + PORT: "3000" + HOST: "http://localhost:3000" + NODE_ENV: "development" + env_file: + - ./packages/verifier/.env + ports: + - 3000:3000 + command: "/usr/local/verifier/start.sh" + depends_on: + postgres: + condition: service_healthy + migrations: + image: verifier-build + environment: + DB_HOST: postgres + MIGRATE_DB_USER: &miguser dba + MIGRATE_DB_PASSWORD: &migpass "TestPassWord!!" + env_file: + - ./packages/verifier/.env + command: "/usr/local/verifier/migrate.sh" + depends_on: + postgres: + condition: service_healthy + test: + image: verifier-build + environment: + DB_HOST: postgres + env_file: + - ./packages/verifier/.env + command: "/usr/local/verifier/test.sh" + depends_on: + migrations: + condition: service_started + postgres: + condition: service_healthy + postgres: + image: "postgres:14" + environment: + POSTGRES_PASSWORD: *migpass + POSTGRES_USER: *miguser + POSTGRES_DB: postgres + PGDATA: "/tmp/postgres/data" + ports: + - "5432:5432" + healthcheck: + test: ["CMD-SHELL", "pg_isready"] + interval: 30s + timeout: 30s + retries: 5 diff --git a/docker-delete-containers.sh b/docker-delete-containers.sh new file mode 100755 index 000000000..fc400512d --- /dev/null +++ b/docker-delete-containers.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +# configuration for the stop script +DOCROOT="$( cd "$( dirname "$0" )" && pwd )" + +docker-compose -f ${DOCROOT}/docker-compose.yml down diff --git a/docker-dependencies.sh b/docker-dependencies.sh new file mode 100755 index 000000000..4f65bf496 --- /dev/null +++ b/docker-dependencies.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +DOC_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +export APP_ENV=${APP_ENV:-dev} +# set suffix to username if it does not exist +USER_ID=$(id -u -n | sed 's/\./_/g') +export SUFFIX=${SUFFIX:-"_${USER_ID}"} + +echo "APP_ENV is set to: ${APP_ENV} SUFFIX is: ${SUFFIX}" + +# Start dependencies +docker-compose -f "${DOC_ROOT}/docker-compose.yml" up -d postgres + +# healthcheck +COUNT=20 +check_health() { + CONTAINER=$(docker-compose ps -q "$1") + for ((i = 1; i <= COUNT; i++)); do + + RESULT=$(docker ps -q --filter health=healthy --filter id="${CONTAINER}" | wc -l) + if [[ ${RESULT} -eq 1 ]]; then + echo -e "${1} healthy!!!\n" + break + else + echo "${1} not healthy. Attempt $i of ${COUNT}. Retrying in 10 seconds." + if [[ "${i}" != "${COUNT}" ]]; then + sleep 10 + fi + fi + + if [[ "$i" == "${COUNT}" ]]; then + echo -e "ERROR: $1 not healthy after ${COUNT} attempts. Aborting" + docker-compose logs "$1" + exit 1 + fi + done +} + +check_health postgres + +echo "Successfully started dependency docker containers!" diff --git a/docker-export-logs.sh b/docker-export-logs.sh new file mode 100755 index 000000000..4776da06a --- /dev/null +++ b/docker-export-logs.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + + +OUTPUT_DIR="logs" +mkdir -p ${OUTPUT_DIR} +CONTAINERS=$(docker ps -a --format '{{.Names}}') +for CONTAINER in ${CONTAINERS}; do + docker logs ${CONTAINER} >& ${OUTPUT_DIR}/${CONTAINER}.log +done + +echo "Successfully exported logs in ${OUTPUT_DIR} directory." diff --git a/docker-start-containers.sh b/docker-start-containers.sh new file mode 100755 index 000000000..10c552598 --- /dev/null +++ b/docker-start-containers.sh @@ -0,0 +1,93 @@ +#!/usr/bin/env bash + +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +DOCROOT="$( cd "$( dirname "$0" )" && pwd )" + +export APP_ENV=${APP_ENV:-dev} +# set suffix to username if it does not exist +USER_ID=$(id -u -n | sed 's/\./_/g') +export SUFFIX=${SUFFIX:-"_${USER_ID}"} + +echo "APP_ENV is set to: ${APP_ENV} SUFFIX is: ${SUFFIX}" + +while getopts ":u:p:ir" OPTION +do + case ${OPTION} in + r) + RESTART=true + ;; + i) + PULL_IMAGES=true + RESTART=true + ;; + ?) + usage + exit + ;; + esac +done + + +# Make sure we are starting with a clean slate; +# stop and remove any running containers. +if [[ "${RESTART}" = true ]] ; then + echo 'Stopping and removing any running containers.' + docker-compose -f ${DOCROOT}/docker-compose.yml down +fi + + +# Pull latest container images. +if [[ "${PULL_IMAGES}" = true ]] ; then + echo 'Pulling latest container images from ECR.' + docker-compose -f ${DOCROOT}/docker-compose.yml pull +fi + + +# Start the dbs first. +docker-compose -f ${DOCROOT}/docker-compose.yml up -d postgres + +# Give them breathing room. +sleep 5 + +COUNT=10 +check_health(){ + CONTAINER=$(docker-compose ps -q $1) + for (( i=1 ; i <= COUNT; i++ )); do + + RESULT=$(docker ps -q --filter health=healthy --filter id=${CONTAINER} | wc -l) + if [[ ${RESULT} -eq 1 ]]; then + echo -e "${1} healthy!!!\n" + break + else + echo "${1} not healthy. Attempt $i of ${COUNT}. Retrying in 10 seconds." + if [[ "${i}" != "${COUNT}" ]]; then + sleep 10 + fi + fi + + if [[ "$i" == "${COUNT}" ]]; then + echo -e "ERROR: $1 not healthy after ${COUNT} attempts. Aborting" + docker-compose logs "$1" + exit 1 + fi + done +} + +check_health postgres + +echo "Successfully started docker containers!" diff --git a/docker-stop.sh b/docker-stop.sh new file mode 100755 index 000000000..c8f6e5bec --- /dev/null +++ b/docker-stop.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +DOC_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +docker-compose -f "${DOC_ROOT}/docker-compose.yml" down diff --git a/docker/usr/local/verifier/migrate.sh b/docker/usr/local/verifier/migrate.sh new file mode 100755 index 000000000..603ba9a62 --- /dev/null +++ b/docker/usr/local/verifier/migrate.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +set -xe + + +# Use the migration user to connect the DB and create the schema and database of "verifier" +source "$(dirname "${BASH_SOURCE[0]}")/prepare_db.sh" +if [ -z "${MIGRATE_DB_USER}" ] || [ -z "${MIGRATE_DB_PASSWORD}" ]; then + echo "Missing migration user and password variable(s)" + exit 1 +else + echo "Using MIGRATE_DB_USER=${MIGRATE_DB_USER} to create DB." +fi +echo "Creating DB.." +npm run createdb -w verifier + +# Use the migrate user to run prisma migrate +set +x +export DB_USER=${MIGRATE_DB_USER} +export DB_PASSWORD=${MIGRATE_DB_PASSWORD} +source "$(dirname "${BASH_SOURCE[0]}")/prepare_db.sh" +set -x + +echo "Migrating DB.." +npm run prisma:migrate:deploy -w verifier diff --git a/docker/usr/local/verifier/prepare_db.sh b/docker/usr/local/verifier/prepare_db.sh new file mode 100755 index 000000000..ccd81c427 --- /dev/null +++ b/docker/usr/local/verifier/prepare_db.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + + +set +x + +# Validate and prepare the DB for connection + +if [ -z "${DB_PORT}" ]; then + echo "Use default value for DB_PORT" + export DB_PORT=5432 +fi + +if [ -z "${DB_HOST}" ]; then echo "Missing environment variable DB_HOST"; exit 1; fi +if [ -z "${DB_USER}" ]; then echo "Missing environment variable DB_USER"; exit 1; fi +if [ -z "${DB_PASSWORD}" ]; then echo "Missing environment variable DB_PASSWORD"; exit 1; fi +if [ -z "${DB_DATABASE}" ]; then echo "Missing environment variable DB_DATABASE"; exit 1; fi +if [ -z "${DB_SCHEMA}" ]; then echo "Missing environment variable DB_SCHEMA"; exit 1; fi + +export DATABASE_URL="postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_DATABASE}?schema=${DB_SCHEMA}" +DATABASE_URL_PRINT="postgresql://${DB_USER}:@${DB_HOST}:${DB_PORT}/${DB_DATABASE}?schema=${DB_SCHEMA}" +echo "DB_url=${DATABASE_URL_PRINT}" diff --git a/docker/usr/local/verifier/start.sh b/docker/usr/local/verifier/start.sh new file mode 100755 index 000000000..0481ebf9f --- /dev/null +++ b/docker/usr/local/verifier/start.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +set -e + +source "$(dirname "${BASH_SOURCE[0]}")"/prepare_db.sh + +set -x + +if [ "${ENV}" = "testing" ]; then + echo "Starting Verifier server with inspect" + exec npm run start:tracing:inspect +else + exec npm run start:tracing +fi diff --git a/docker/usr/local/verifier/test.sh b/docker/usr/local/verifier/test.sh new file mode 100755 index 000000000..3c07225af --- /dev/null +++ b/docker/usr/local/verifier/test.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +source "$(dirname "${BASH_SOURCE[0]}")"/prepare_db.sh + +set -xe + +echo "Running lint..." +npm run lint -w verifier +npm run type-check -w verifier + +echo "Running tests..." +npm run test -w verifier diff --git a/docs/API.md b/docs/API.md new file mode 100644 index 000000000..bfa4870ad --- /dev/null +++ b/docs/API.md @@ -0,0 +1,320 @@ +# API Routes + +The API routes are defined in [`packages/verifier/src/lib/routes.ts`](https://github.com/circlefin/verifier/blob/master/packages/verifier/src/lib/routes.ts). + +## General + +Unless otherwise stated, all API endpoints accept and respond with JSON. + +All endpoints include security-focused headers provided by [helmet](https://helmetjs.github.io/). Specifically, helmet adds the following response headers: + +| Header | Value | +| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Content-Security-Policy | `default-src 'self';base-uri 'self';block-all-mixed-content;font-src 'self' https: data:;frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests` | +| X-DNS-Prefetch-Control | `off` | +| Expect-CT | `max-age=0` | +| X-Frame-Options | `SAMEORIGIN` | +| Strict-Transport-Security | `max-age=15552000; includeSubDomains` | +| X-Download-Options | `noopen` | +| X-Content-Type-Options | `nosniff` | +| X-Permitted-Cross-Domain-Policies | `none` | +| Referrer-Policy | `no-referrer` | +| X-XSS-Protection | `0` | + +## Error Formats + +All error responses are in the following format, which supports multiple errors per response: + +```json +{ + "status": "400", + "errors": [ + { + "message": "A human readable error message", + "details": "Optional human readable explanation of the error" + } + ] +} +``` + +## Endpoints + +- [GET /ping](https://github.com/circlefin/verifier/blob/master/docs/API.md#get-ping) +- [POST /verifications](https://github.com/circlefin/verifier/blob/master/docs/API.md#post-verifications) +- [GET /verifications/:id](https://github.com/circlefin/verifier/blob/master/docs/API.md#get-verificationsid) +- [POST /verifications/:id](https://github.com/circlefin/verifier/blob/master/docs/API.md#post-verificationsid) +- [GET /verifications/:id/status](https://github.com/circlefin/verifier/blob/master/docs/API.md#get-verificationsidstatus) + +--- + +### `GET /ping` + +**Description:** Health Check. This endpoint provides a general health-check, responding with “ok” when the service is running. + +**Sample route:** `https://verifier.circle.com/ping` + +#### Response + +- Content-Type: `application/json` +- Sample Response Body: + +```json +{ "status": "ok" } +``` + +--- + +### `POST /verifications` + +**Description:** Create a new verification offer. This is the first step in the [verification flow](https://verite.id/docs/patterns/verification-flow#verification-flow). This endpoint is called by a 3rd party service (for example, a dApp) and returns a `challengeTokenUrl` , which will be presented to the end-user (for example, as a QR code). The `challengeTokenUrl` will contain the verification offer for the end-user to access. The response also contains `statusUrl` which the dApp can poll to check the status of the verification. + +There are four optional parameters: chainId, name, version, and registryAddress. These correspond to the [EIP-712 domain separator](https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator). While these parameters are optional, their necessity is dependent on the specific implementation of the smart contract you intend to interact with. To provide the most support, the Verifier API allows you to set them as needed. However, if using the sample Verite smart contracts, e.g. as is the [TestRegistry](https://github.com/circlefin/verifier/blob/master/packages/ethereum/contracts/TestRegistry.sol), all the parameters will be required. + +This endpoint requires the dApp to know the end-user’s address, so it will likely be called after the end-user’s wallet is connected. + +**Sample route:** `https://verifier.circle.com/verifications` + +#### Request + +- Content-Type: `application/json` +- Parameters: + | Parameter | Required? | Description | + |-------------------|-----------|--------------------------------------------------------------| + | `network` | Yes | The network where the verification result will be used. Can be either `ethereum` or `solana`. | + | `subject` | Yes | The end-user’s address on the `network`, either an Ethereum address or a Solana address. | + | `chainId` | No | For ethereum, the chainId used in the contract's EIP-712 domain separator, e.g. `1` for mainnet. If using localhost, you will use `1337` with hardhat. See [a list of chain IDs](https://docs.metamask.io/guide/ethereum-provider.html#chain-ids). For solana, this value can be `mainnet-beta`, `devnet`, `testnet`, or `localnet`. | + | `name` | No | The name used in the contract's EIP-712 domain separator. Defaults to "VerificationRegistry" as found in the Verite reference contracts. + | `version` | No | The version used in the contract's EIP-712 domain separator. Defaults to "1.0" as found in the Verite reference contracts. + | `registryAddress` | No | The verifyingContract used in the contractor's EIP-712 domain separator. This is the address of the deployed registry. Only used for `ethereum` | +- Sample Ethereum Body using [TestRegistry](https://github.com/circlefin/verifier/blob/master/packages/ethereum/contracts/TestRegistry.sol): + +```json +{ + "network": "ethereum", + "subject": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "chainId": 1337, + "name": "VerificationRegistry", + "version": "1.0", + "registryAddress": "0x5FbDB2315678afecb367f032d93F642f64180aa3" +} +``` + +- Sample Solana Body using [verite program](https://github.com/circlefin/verifier/blob/master/packages/solana/programs/verity/src/lib.rs): + +```json +{ + "network": "solana", + "subject": "37Jon9vY6V9iXavKqTubjXY1iaUVo6xJJyG95SEHvvAV", + "chainId": "localnet", + "name": "VerificationRegistry", + "version": "1.0" +} +``` + +#### Response + +- Content-Type: `application/json` +- Response Body: + | Parameter | Description | + |---------------------|--------------------------------------------------------------| + | `challengeTokenUrl` | The endpoint containing the Verification Offer for the end-user’s wallet. A dApp will provide this URL to an end-user, for example as part of a QR Code. | + | `statusUrl` | An endpoint to check the status of the Verification, since the Verification is asynchronous from the dApp. This URL can be used by the dApp to check the status of the Verification and to update the UI accordingly. | +- Sample Body: + +```json +{ + "challengeTokenUrl": "https://verifier.circle.com/verifications/a678bf0f-7f72-424d-b920-0af3f040b620", + "statusUrl": "https://verifier.circle.com/verifications/a678bf0f-7f72-424d-b920-0af3f040b620/status" +} +``` + +--- + +### `GET /verifications/:id` + +**Description:** This endpoint presents the Verification Offer to the end-user. The Verification Offer describes to an end-user’s Wallet which type of Verifiable Credential is required. This is not intended for human consumption. + +**Sample route:** `https://verifier.circle.com/verifications/a678bf0f-7f72-424d-b920-0af3f040b620` + +#### Request + +| Parameter | Required? | Description | +| --------- | --------- | --------------------------- | +| `id` | Yes | The id of the Verification. | + +#### Response + +- Content-Type: `application/json` +- Sample Body: + +```json +{ + "id": "74c9e731-bbe6-42a9-9760-51da72b79c32", + "type": "https://circle.com/types/VerificationRequest", + "from": "did:web:circle.com", + "created_time": "2022-02-16T15:21:10.520Z", + "expires_time": "2022-03-18T15:21:10.520Z", + "reply_url": "http://localhost:3000/verifications/74c9e731-bbe6-42a9-9760-51da72b79c32", + "body": { + "status_url": "http://localhost:3000/verifications/74c9e731-bbe6-42a9-9760-51da72b79c32/status", + "challenge": "16da1ec8-4817-4cf0-bf2d-66300d425400", + "presentation_definition": { + "id": "74c9e731-bbe6-42a9-9760-51da72b79c32", + "format": { + "jwt": { + "alg": ["EdDSA", "ES256K"] + }, + "jwt_vc": { + "alg": ["EdDSA", "ES256K"] + }, + "jwt_vp": { + "alg": ["EdDSA", "ES256K"] + } + }, + "input_descriptors": [ + { + "id": "kycaml_input", + "name": "Proof of KYC", + "schema": [ + { + "uri": "https://circle.com/schemas/identity/1.0.0/KYCAMLAttestation", + "required": true + } + ], + "purpose": "Please provide a valid credential from a KYC/AML issuer", + "constraints": { + "fields": [ + { + "path": ["$.issuer.id", "$.issuer", "$.vc.issuer", "$.iss"], + "filter": { + "type": "string", + "pattern": "^did:web:circle.com$" + }, + "purpose": "The issuer of the credential must be trusted", + "predicate": "required" + }, + { + "path": [ + "$.credentialSubject.KYCAMLAttestation.process", + "$.vc.credentialSubject.KYCAMLAttestation.process", + "$.KYCAMLAttestation.process" + ], + "filter": { + "type": "string" + }, + "purpose": "The process used for KYC/AML.", + "predicate": "required" + }, + { + "path": [ + "$.credentialSubject.KYCAMLAttestation.approvalDate", + "$.vc.credentialSubject.KYCAMLAttestation.approvalDate", + "$.KYCAMLAttestation.approvalDate" + ], + "filter": { + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$" + }, + "purpose": "The date upon which this KYC/AML Attestation was issued.", + "predicate": "required" + } + ], + "statuses": { + "active": { + "directive": "required" + }, + "revoked": { + "directive": "disallowed" + } + }, + "is_holder": [ + { + "field_id": ["subjectId"], + "directive": "required" + } + ] + } + } + ] + } + } +} +``` + +--- + +### POST /verifications/:id + +**Description:** This endpoint is where an end-user will submit their Verifiable Credentials. These credentials are submitted as a signed JWT string. The decoded version of this adheres to the [Presentation Submission](https://verite.id/docs/appendix/messages#presentation-submission) definition. + +**Sample route:** `https://verifier.circle.com/verifications/a678bf0f-7f72-424d-b920-0af3f040b620` + +#### Request + +- Content-Type: `text/plain` +- URL parameters: + | Parameter | Required? | Description | + |-----------|-----------|-----------------------------| + | `id` | Yes | The id of the Verification. | + +- Request Body: A JWT-encoded payload containing a response to the Verification Offer. This JWT is a Verifiable Presentation containing the requested Verifiable Credential(s). + +- Sample Body: + +```text +eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ.eyJ2cCI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIlZlcmlmaWFibGVQcmVzZW50YXRpb24iLCJDcmVkZW50aWFsRnVsZmlsbG1lbnQiXSwiaG9sZGVyIjoiZGlkOmtleTp6UTNzaHZaTlBCUm44blZ2Z3plSzlSb2V4ZTdTM2JqRDU1dnMyTWVSWWVEMnhTOGdWIiwidmVyaWZpYWJsZUNyZWRlbnRpYWwiOlsiZXlKaGJHY2lPaUpGWkVSVFFTSXNJblI1Y0NJNklrcFhWQ0o5LmV5SjJZeUk2ZXlKQVkyOXVkR1Y0ZENJNld5Sm9kSFJ3Y3pvdkwzZDNkeTUzTXk1dmNtY3ZNakF4T0M5amNtVmtaVzUwYVdGc2N5OTJNU0lzSW1oMGRIQnpPaTh2ZG1WeWFYUmxMbWxrTDJsa1pXNTBhWFI1SWwwc0luUjVjR1VpT2xzaVZtVnlhV1pwWVdKc1pVTnlaV1JsYm5ScFlXd2lMQ0pMV1VOQlRVeEJkSFJsYzNSaGRHbHZiaUpkTENKamNtVmtaVzUwYVdGc1UzVmlhbVZqZENJNmV5SkxXVU5CVFV4QmRIUmxjM1JoZEdsdmJpSTZleUpBZEhsd1pTSTZJa3RaUTBGTlRFRjBkR1Z6ZEdGMGFXOXVJaXdpY0hKdlkyVnpjeUk2SW1oMGRIQnpPaTh2WTJseVkyeGxMbU52YlM5elkyaGxiV0Z6TDJSbFptbHVhWFJwYjI1ekx6RXVNQzR3TDJ0NVkyRnRiQzkxYzJFaUxDSmhjSEJ5YjNaaGJFUmhkR1VpT2lJeU1ESXlMVEF5TFRFMlZERTJPakF5T2pJeUxqYzBOMW9pZlgxOUxDSnpkV0lpT2lKa2FXUTZhMlY1T25wUk0zTm9kbHBPVUVKU2JqaHVWblpuZW1WTE9WSnZaWGhsTjFNelltcEVOVFYyY3pKTlpWSlpaVVF5ZUZNNFoxWWlMQ0p1WW1ZaU9qRTJORFV3TWpjek5ESXNJbWx6Y3lJNkltUnBaRHByWlhrNmVqWk5hMmt6VGsxbGMzTnlUSFJMUjJab2VsY3pORnAyU2xjeFJETlViVlkyVEZsWU9WQk5Xbk5TUTBOYVYzRTFJbjAuc1cxaUdUYUlzZFEyVWlMSElmbTVEOFZZN09TNWRCOUxWdVFqai1rZF9OclR5X3RkYXdUeWQtTThPUGt4R25NWkY3ckRaaWxna3IxN01pZVlTNlBqQlEiXX0sInN1YiI6ImRpZDprZXk6elEzc2h2Wk5QQlJuOG5Wdmd6ZUs5Um9leGU3UzNiakQ1NXZzMk1lUlllRDJ4UzhnViIsInByZXNlbnRhdGlvbl9zdWJtaXNzaW9uIjp7ImlkIjoiZjA1NzViZDgtMzE2Mi00YzYyLWE0OWUtN2QyZDJlMWVjNjBkIiwiZGVmaW5pdGlvbl9pZCI6IktZQ0FNTEF0dGVzdGF0aW9uLTJkM2IxYTM1LWZjMmMtNDRhMy04YzE0LTcwMGUxMjI1MGNlYiIsImRlc2NyaXB0b3JfbWFwIjpbeyJmb3JtYXQiOiJqd3RfdmMiLCJpZCI6Imt5Y2FtbF9pbnB1dCIsInBhdGgiOiIkLnZlcmlmaWFibGVDcmVkZW50aWFsWzBdIn1dfSwibm9uY2UiOiJiNDdiNTI1My03OTkwLTQyMjUtODhkOC0wMTg0YjQ2ZDQ0M2QiLCJpc3MiOiJkaWQ6a2V5OnpRM3NodlpOUEJSbjhuVnZnemVLOVJvZXhlN1MzYmpENTV2czJNZVJZZUQyeFM4Z1YifQ.yi0lbvHdtDxGqDFQQv7OTIgkwOEnL0PJDlKuo5Nhyhbvj58yNFNtPvrQqv9MYGFrgUKSN9PxJ1WWLaqaEO5XqA +``` + +#### Response + +- Content-Type: `application/json` +- Sample Body: + +```json +{ + "status": "approved", + "verificationResult": { + "schema": "", + "subject": "0xB5de987Ccce0BD596c22939B6f1e2a124e62B232", + "expiration": 1645113992 + }, + "signature": "0x5a23eb407135554c7cfd649ab9b6121370190183bc0c9b3c377c7fa192d098282cc7df3f13fe9d2eec4ed7013658bff8452a90af1bcfc358e734ac366bee7ec81b" +} +``` + +--- + +### `GET /verifications/:id/status` + +**Description:** This endpoint provides the status of a verification. Once the verification is complete, the response will contain the verificationResult as well as the signature. Upon verification failure, the endpoint will contain a reason for failure. + +**Sample route:** `https://verifier.circle.com/verifications/a678bf0f-7f72-424d-b920-0af3f040b620/status` + +#### Request + +| Parameter | Required? | Description | +| --------- | --------- | --------------------------- | +| `id` | Yes | The id of the Verification. | + +#### Response + +- Content-Type: `application/json` +- Sample Bodies: + +```json +{ + "status": "created" +} +``` + +```json +{ + "status": "approved", + "verificationResult": { + "schema": "", + "subject": "0xB5de987Ccce0BD596c22939B6f1e2a124e62B232", + "expiration": 1645113992 + }, + "signature": "0x5a23eb407135554c7cfd649ab9b6121370190183bc0c9b3c377c7fa192d098282cc7df3f13fe9d2eec4ed7013658bff8452a90af1bcfc358e734ac366bee7ec81b" +} +``` diff --git a/docs/integrating_with_centre.md b/docs/integrating_with_centre.md new file mode 100644 index 000000000..dc3a91298 --- /dev/null +++ b/docs/integrating_with_centre.md @@ -0,0 +1,200 @@ +# Integrating with Centre (now Circle)'s Open Source Verite Project + +## 0. Getting Started + +First, find your local IP address. For example `192.168.7.31`. You will use +this in a few places. + +## 1. Clone and set up Centre (now Circle)'s Verite project + +```sh +git clone git@github.com:centrehq/verite.git +cd verite +npm run setup +``` + +## 1. Start the Circle Verifier on port 3001, with an updated Trusted Issuer list + +Locate the `ISSUER_DID` environment variable in `packages/e2e-demo/.env.development.local`, +for example: `did:key:z6MkjFvoMQC6m5mx9ec5dTtdV84oVTxLhHALEvpXtNfzsuvz`. You will use that as the Trusted issuer below: + +```sh +HOST=http://192.168.7.131:3001 \ +PORT=3001 \ +TRUSTED_ISSUERS="^did:key:z6MkjFvoMQC6m5mx9ec5dTtdV84oVTxLhHALEvpXtNfzsuvz$" \ +npm run dev +``` + +NOTE: Be sure to swap in your own local IP address to the HOST parameter. + +## 3. Swap the Verifier to point to Circle's Verifier + +In `packages/e2e-demo/lib/verification-request.ts` + +Change the body of `createVerificationOffer` to match: + +```ts +export async function createVerificationOffer( + type: string, + subjectAddress?: string, + contractAddress?: string, + verifierSubmit?: boolean, + registryAddress?: string +): Promise { + const id = uuidv4() + + const verificationRequest = await fetch( + "http://192.168.7.131:3001/verifications", // NOTE: Be sure to swap in your local IP here. + { + method: "POST", + headers: { + accept: "application/json", + "content-type": "application/json" + }, + body: JSON.stringify({ + network: "ethereum", + chainId: 1337, + registryAddress: registryAddress || contractAddress, + subject: subjectAddress || "0x0000000000000000000000000000000000000000" + }) + } + ) + + const { challengeTokenUrl } = await verificationRequest.json() + + return { + id, + challenge: {}, + qrCodeData: challengeTokenUrlWrapper(challengeTokenUrl) + } +} +``` + +In `packages/e2e-demo/components/demos/dapp/Dapp.tsx`, change the method `createVerification` to match: + +```ts +const createVerification = async () => { + try { + // Create a Verification Request + const resp = await fetch(`http://192.168.7.131:3001/verifications`, { + // NOTE: Be sure to swap in your local IP here. + method: "POST", + headers: { + "content-type": "application/json" + }, + body: JSON.stringify({ + network: "ethereum", + chainId: 1337, + registryAddress: contractAddress, + subject: account + }) + }) + const { challengeTokenUrl, statusUrl } = await resp.json() + setVerification({ + id: account, + qrCodeData: { + challengeTokenUrl + }, + challenge: { statusUrl } + }) + setIsVerifying(true) + } catch (e) { + setVerification(undefined) + setIsVerifying(false) + setStatusMessage("API call to Verifier failed. Are you running demos?") + } +} +``` + +Change the `fetchVerificationStatus` method to match: + +```ts +const fetchVerificationStatus = async (id: string) => { + try { + const resp = await fetch(verification.challenge.statusUrl as string) + const { status, verificationResult, signature } = await resp.json() + + if (status === "approved") { + setVerification(undefined) + setVerificationInfoSet({ verificationResult, signature }) + setIsVerifying(false) + setStatusMessage( + "Verification complete. You can now transfer 10 or more THUSDC" + ) + } else if (status === "rejected") { + setVerification(undefined) + setVerificationInfoSet(undefined) + setIsVerifying(false) + setStatusMessage("Verification failed.") + } + } catch (e) { + setVerification(undefined) + setVerificationInfoSet(undefined) + setIsVerifying(false) + + setStatusMessage( + "API call to Verifier failed. Are you running the demo server?" + ) + } +} +``` + +And finally, in `packages/e2e-demo/pagges/demos/verifier/[type].tsx`, change the following: + +```diff +- const { data } = useSWR( +- () => fullURL(`/api/demos/verifier/${verification.id}/status`), +- jsonFetch, +- { +- refreshInterval: 1000 +- } +- ) ++ const { data } = useSWR(() => challenge.statusUrl, jsonFetch, { ++ refreshInterval: 1000 ++ }) +``` + +## 4. Now the demos should work while using the Circle Verifier + +Start Centre (now Circle) demos: + +### 1. Start an ethereum node + +```sh +npm run hardhat:node +``` + +### 2. In a new tab, deploy the contract + +```sh +npm run hardhat:deploy +``` + +### 3. Once the contract is deployed, you can start the demo server + +```sh +npm run dev +``` + +This will launch the demos on `http://192.168.7:131:3000` (Replace with your local IP). + +### 4. You will also need the wallet running + +```sh +npm run wallet +``` + +Scan the QR code with the Expo Go app. + +### 5. You can run through the demos + +First, go through the "Issuer" demo to receive a Verifiable Credential. + +Next, you can use the "Verification" demo to prove the verification worked. + +NOTE: The Verite refence mobile wallet may show the credentials greyed out, but you can still tap to submit them. + +You can also use the "DApp Requiring KYC" demo to show how this would work +using a real Ethereum contract. + +NOTE: The "Lending" demo will not work, as this requires Verifier-submitted credentials, which is out of scope for this project. diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..8c5ac637f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,61922 @@ +{ + "name": "verite-verifier", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "verite-verifier", + "workspaces": [ + "./packages/*" + ], + "devDependencies": { + "@types/secp256k1": "^4.0.6" + }, + "engines": { + "node": "16.x", + "npm": ">=7.0.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@apideck/better-ajv-errors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.2.tgz", + "integrity": "sha512-JdEazx7qiVqTBzzBl5rolRwl5cmhihjfIcpqRzIZjtT6b18liVmDn/VlWpqW4C/qP2hrFFMLRV1wlex8ZVBPTg==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/client-ssm": { + "version": "3.603.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.603.0.tgz", + "integrity": "sha512-KyHp8mxIFUDeAkjSiPzfDTFcrP3WSjQeNUYBTG76cowkmYZgc0QqVfgQwjOt3rQvmkG8R7M/vmDIwLTh1xx/7A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/client-ssm/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz", + "integrity": "sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz", + "integrity": "sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/client-sso/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz", + "integrity": "sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/core": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.598.0.tgz", + "integrity": "sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.2.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/signature-v4": "^3.1.0", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz", + "integrity": "sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz", + "integrity": "sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/util-stream": "^3.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz", + "integrity": "sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.598.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz", + "integrity": "sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-ini": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz", + "integrity": "sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz", + "integrity": "sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.598.0", + "@aws-sdk/token-providers": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz", + "integrity": "sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.598.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz", + "integrity": "sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz", + "integrity": "sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz", + "integrity": "sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz", + "integrity": "sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz", + "integrity": "sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz", + "integrity": "sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.598.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/types": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.598.0.tgz", + "integrity": "sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/types/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz", + "integrity": "sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", + "@smithy/util-endpoints": "^2.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz", + "integrity": "sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz", + "integrity": "sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/eslint-parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz", + "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==", + "dev": true, + "dependencies": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", + "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", + "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.1", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.0", + "charcodes": "^0.2.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", + "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", + "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz", + "integrity": "sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", + "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz", + "integrity": "sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-flow": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.16.7.tgz", + "integrity": "sha512-lF+cfsyTgwWkcw715J88JhMYJ5GpysYNLhLP1PkvkhTRN7B3e74R/1KsDxFxhRpSn0UUD3IWM4GvdBR2PEbbQQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", + "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", + "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-typescript": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", + "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.2.tgz", + "integrity": "sha512-NcKtr2epxfIrNM4VOmPKO46TvDMCBhgi2CrSHaEarrz+Plk2K5r9QemmOFTGpZaoKnWoGH5MO+CzeRsih/Fcgg==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@bitauth/libauth": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@bitauth/libauth/-/libauth-1.19.1.tgz", + "integrity": "sha512-R524tD5VwOt3QRHr7N518nqTVR/HKgfWL4LypekcGuNQN8R4PWScvuRcRzrY39A28kLztMv+TJdiKuMNbkU1ug==", + "license": "MIT", + "engines": { + "node": ">=8.9" + } + }, + "node_modules/@blocto/sdk": { + "version": "0.2.21", + "resolved": "https://registry.npmjs.org/@blocto/sdk/-/sdk-0.2.21.tgz", + "integrity": "sha512-yolSah+bYEZGzbBYr0GuQ2Pca1h95aF/btDJvcEyranosyR27kokvRKiPTX4Sost+giAD+Z6vrD8/hM6E+LnUw==", + "dependencies": { + "@solana/web3.js": "^1.30.2", + "bs58": "^4.0.1", + "buffer": "^6.0.3", + "eip1193-provider": "^1.0.1", + "js-sha3": "^0.8.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@csstools/normalize.css": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", + "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", + "dev": true + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz", + "integrity": "sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.0.tgz", + "integrity": "sha512-VSTd7hGjmde4rTj1rR30sokY3ONJph1reCBTUXqeW1fKwETPy1x4t/XIeaaqbMbC5Xg4SM/lyXZ2S8NELT2TaA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.0.tgz", + "integrity": "sha512-WnfZlyuh/CW4oS530HBbrKq0G8BKl/bsNr5NMFoubBFzJfvFRGJhplCgIJYWUidLuL3WJ/zhMtDIyNFTqhx63Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz", + "integrity": "sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@did-core/data-model": { + "version": "0.1.1-unstable.15", + "resolved": "https://registry.npmjs.org/@did-core/data-model/-/data-model-0.1.1-unstable.15.tgz", + "integrity": "sha512-l7gxLxegcXW7389G+j6o+S24lS8uasmJx5txWpW3QadNvOawKwvWn8bV59SdHSK806xNzIZaCLKmXKxebs8yAQ==", + "license": "Apache-2.0", + "dependencies": { + "factory.ts": "^0.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@did-core/did-ld-json": { + "version": "0.1.1-unstable.15", + "resolved": "https://registry.npmjs.org/@did-core/did-ld-json/-/did-ld-json-0.1.1-unstable.15.tgz", + "integrity": "sha512-p2jKRxSU+eJJqd+ewCklYp/XZ6ysISk8VU2/kANCoB/WwUy/kVgw2rUNScRDXw2utr9Qj36P8EZTYi4aj7vRCQ==", + "license": "Apache-2.0", + "dependencies": { + "@transmute/did-context": "^0.6.1-unstable.25", + "jsonld-checker": "^0.1.6" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@digitalbazaar/http-client": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-1.2.0.tgz", + "integrity": "sha512-W9KQQ5pUJcaR0I4c2HPJC0a7kRbZApIorZgPnEDwMBgj16iQzutGLrCXYaZOmxqVLVNqqlQ4aUJh+HBQZy4W6Q==", + "license": "BSD-3-Clause", + "dependencies": { + "esm": "^3.2.22", + "ky": "^0.25.1", + "ky-universal": "^0.8.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@ethereumjs/block": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.1.tgz", + "integrity": "sha512-o5d/zpGl4SdVfdTfrsq9ZgYMXddc0ucKMiFW5OphBCX+ep4xzYnSjboFcZXT2V/tcSBr84VrKWWp21CGVb3DGw==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "^2.6.1", + "@ethereumjs/tx": "^3.5.0", + "ethereumjs-util": "^7.1.4", + "merkle-patricia-tree": "^4.2.3" + } + }, + "node_modules/@ethereumjs/blockchain": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.1.tgz", + "integrity": "sha512-JS2jeKxl3tlaa5oXrZ8mGoVBCz6YqsGG350XVNtHAtNZXKk7pU3rH4xzF2ru42fksMMqzFLzKh9l4EQzmNWDqA==", + "dev": true, + "dependencies": { + "@ethereumjs/block": "^3.6.0", + "@ethereumjs/common": "^2.6.0", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^2.2.0", + "ethereumjs-util": "^7.1.3", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" + } + }, + "node_modules/@ethereumjs/blockchain/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@ethereumjs/blockchain/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/@ethereumjs/common": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.2.tgz", + "integrity": "sha512-vDwye5v0SVeuDky4MtKsu+ogkH2oFUV8pBKzH/eNBzT8oI91pKa8WyzDuYuxOQsgNgv5R34LfFDh2aaw3H4HbQ==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.4" + } + }, + "node_modules/@ethereumjs/ethash": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "dev": true, + "dependencies": { + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.0.tgz", + "integrity": "sha512-/+ZNbnJhQhXC83Xuvy6I9k4jT5sXiV0tMR9C+AzSSpcCV64+NB8dTE1m3x98RYMqb8+TLYWA+HML4F5lfXTlJw==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "^2.6.1", + "ethereumjs-util": "^7.1.4" + } + }, + "node_modules/@ethereumjs/vm": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.7.1.tgz", + "integrity": "sha512-NiFm5FMaeDGZ9ojBL+Y9Y/xhW6S4Fgez+zPBM402T5kLsfeAR9mrRVckYhvkGVJ6FMwsY820CLjYP5OVwMjLTg==", + "dev": true, + "dependencies": { + "@ethereumjs/block": "^3.6.1", + "@ethereumjs/blockchain": "^5.5.1", + "@ethereumjs/common": "^2.6.2", + "@ethereumjs/tx": "^3.5.0", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.4", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.3", + "rustbn.js": "~0.2.0" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", + "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz", + "integrity": "sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/networks": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/web": "^5.5.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz", + "integrity": "sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz", + "integrity": "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/rlp": "^5.5.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.5.0.tgz", + "integrity": "sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.5.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz", + "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/properties": "^5.5.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz", + "integrity": "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "bn.js": "^4.11.9" + } + }, + "node_modules/@ethersproject/bignumber/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/@ethersproject/bytes": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz", + "integrity": "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.5.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.5.0.tgz", + "integrity": "sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.5.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz", + "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "^5.5.0", + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/transactions": "^5.5.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz", + "integrity": "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz", + "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/basex": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/pbkdf2": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/wordlists": "^5.5.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz", + "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hdnode": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/pbkdf2": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz", + "integrity": "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.5.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz", + "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.2.tgz", + "integrity": "sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.5.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz", + "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/sha2": "^5.5.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz", + "integrity": "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.5.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.3.tgz", + "integrity": "sha512-ZHXxXXXWHuwCQKrgdpIkbzMNJMvs+9YWemanwp1fA7XZEv7QlilseysPvQe0D7Q7DlkJX/w/bGA1MdgK2TbGvA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/basex": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/networks": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/rlp": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/web": "^5.5.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/random": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.1.tgz", + "integrity": "sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.5.0.tgz", + "integrity": "sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz", + "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.5.0.tgz", + "integrity": "sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/@ethersproject/solidity": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz", + "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz", + "integrity": "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.5.0.tgz", + "integrity": "sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/rlp": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz", + "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz", + "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/hdnode": "^5.5.0", + "@ethersproject/json-wallets": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/wordlists": "^5.5.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.1.tgz", + "integrity": "sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz", + "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.10.10", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.10.tgz", + "integrity": "sha512-HPa/K5NX6ahMoeBv15njAc/sfF4/jmiXLar9UlC2UfHFKZzsCVLc3wbe7+7qua7w9VPh2/L6EBxyAV7/E8Wftg==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/proto-loader/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@grpc/proto-loader/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@hapi/accept": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.2.tgz", + "integrity": "sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw==", + "dev": true, + "peer": true, + "dependencies": { + "@hapi/boom": "9.x.x", + "@hapi/hoek": "9.x.x" + } + }, + "node_modules/@hapi/boom": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", + "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", + "dev": true, + "peer": true, + "dependencies": { + "@hapi/hoek": "9.x.x" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", + "dev": true, + "peer": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/expect/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/expect/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/expect/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/expect/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@jest/expect/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@jest/expect/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/expect/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/expect/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/expect/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/expect/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@json-rpc-tools/provider": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@json-rpc-tools/provider/-/provider-1.7.6.tgz", + "integrity": "sha512-z7D3xvJ33UfCGv77n40lbzOYjZKVM3k2+5cV7xS8G6SCvKTzMkhkUYuD/qzQUNT4cG/lv0e9mRToweEEVLVVmA==", + "dependencies": { + "@json-rpc-tools/utils": "^1.7.6", + "axios": "^0.21.0", + "safe-json-utils": "^1.1.1", + "ws": "^7.4.0" + } + }, + "node_modules/@json-rpc-tools/types": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@json-rpc-tools/types/-/types-1.7.6.tgz", + "integrity": "sha512-nDSqmyRNEqEK9TZHtM15uNnDljczhCUdBmRhpNZ95bIPKEDQ+nTDmGMFd2lLin3upc5h2VVVd9tkTDdbXUhDIQ==", + "dependencies": { + "keyvaluestorage-interface": "^1.0.0" + } + }, + "node_modules/@json-rpc-tools/utils": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@json-rpc-tools/utils/-/utils-1.7.6.tgz", + "integrity": "sha512-HjA8x/U/Q78HRRe19yh8HVKoZ+Iaoo3YZjakJYxR+rw52NHo6jM+VE9b8+7ygkCFXl/EHID5wh/MkXaE/jGyYw==", + "dependencies": { + "@json-rpc-tools/types": "^1.7.6", + "@pedrouid/environment": "^1.0.1" + } + }, + "node_modules/@ledgerhq/devices": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-6.24.1.tgz", + "integrity": "sha512-6SNXWXxojUF6WKXMVIbRs15Mveg+9k0RKJK/PKlwZh929Lnr/NcbONWdwPjWKZAp1g82eEPT4jIkG6qc4QXlcA==", + "dependencies": { + "@ledgerhq/errors": "^6.10.0", + "@ledgerhq/logs": "^6.10.0", + "rxjs": "6", + "semver": "^7.3.5" + } + }, + "node_modules/@ledgerhq/devices/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@ledgerhq/devices/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@ledgerhq/devices/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@ledgerhq/errors": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.10.0.tgz", + "integrity": "sha512-fQFnl2VIXh9Yd41lGjReCeK+Q2hwxQJvLZfqHnKqWapTz68NHOv5QcI0OHuZVNEbv0xhgdLhi5b65kgYeQSUVg==" + }, + "node_modules/@ledgerhq/hw-transport": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.24.1.tgz", + "integrity": "sha512-cOhxkQJrN7DvPFLLXAS2nqAZ7NIDaFqnbgu9ugTccgbJm2/z7ClRZX/uQoI4FscswZ47MuJQdXqz4nK48phteQ==", + "dependencies": { + "@ledgerhq/devices": "^6.24.1", + "@ledgerhq/errors": "^6.10.0", + "events": "^3.3.0" + } + }, + "node_modules/@ledgerhq/hw-transport-webhid": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.24.1.tgz", + "integrity": "sha512-jeOB4oSQyytJD99FU+xNUkEflgSB6hWUbzhEqnz7fExnGJhMrRT39035dEmSdwshsOFBhzR/IwTUzlwNZzhNxQ==", + "dependencies": { + "@ledgerhq/devices": "^6.24.1", + "@ledgerhq/errors": "^6.10.0", + "@ledgerhq/hw-transport": "^6.24.1", + "@ledgerhq/logs": "^6.10.0" + } + }, + "node_modules/@ledgerhq/logs": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.10.0.tgz", + "integrity": "sha512-lLseUPEhSFUXYTKj6q7s2O3s2vW2ebgA11vMAlKodXGf5AFw4zUoEbTz9CoFOC9jS6xY4Qr8BmRnxP/odT4Uuw==" + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mattrglobal/bbs-signatures": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mattrglobal/bbs-signatures/-/bbs-signatures-1.3.1.tgz", + "integrity": "sha512-syZGkapPpktD2el4lPTCQRw/LSia6/NwBS83hzCKu4dTlaJRO636qo5NCiiQb+iBYWyZQQEzN0jdRik8N9EUGA==", + "license": "Apache-2.0", + "dependencies": { + "@stablelib/random": "1.0.0" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "@mattrglobal/node-bbs-signatures": "0.18.1" + } + }, + "node_modules/@mattrglobal/bbs-signatures/node_modules/@stablelib/random": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.0.tgz", + "integrity": "sha512-G9vwwKrNCGMI/uHL6XeWe2Nk4BuxkYyWZagGaDU9wrsuV+9hUwNI1lok2WVo8uJDa2zx7ahNwN7Ij983hOUFEw==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.0", + "@stablelib/wipe": "^1.0.0" + } + }, + "node_modules/@mattrglobal/bls12381-key-pair": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@mattrglobal/bls12381-key-pair/-/bls12381-key-pair-1.2.1.tgz", + "integrity": "sha512-Xh63NP1iSGBLW10N5uRpDyoPo2LtNHHh/TRGVJEHRgo+07yxgl8tS06Q2zO9gN9+b+GU5COKvR3lACwrvn+MYw==", + "license": "Apache-2.0", + "dependencies": { + "@mattrglobal/bbs-signatures": "1.3.1", + "bs58": "4.0.1", + "rfc4648": "1.5.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@mattrglobal/node-bbs-signatures": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@mattrglobal/node-bbs-signatures/-/node-bbs-signatures-0.18.1.tgz", + "integrity": "sha512-s9ccL/1TTvCP1N//4QR84j/d5D/stx/AI1kPcRgiE4O3KrxyF7ZdL9ca8fmFuN6yh9LAbn/OiGRnOXgvn38Dgg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "1.0.11", + "neon-cli": "0.10.1" + }, + "engines": { + "node": ">=14", + "yarn": "1.x" + } + }, + "node_modules/@multiformats/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", + "license": "MIT" + }, + "node_modules/@napi-rs/triples": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz", + "integrity": "sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA==", + "dev": true, + "peer": true + }, + "node_modules/@next/env": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.7.tgz", + "integrity": "sha512-TNDqBV37wd95SiNdZsSUq8gnnrTwr+aN9wqy4Zxrxw4bC/jCHNsbK94DxjkG99VL30VCRXXDBTA1/Wa2jIpF9Q==", + "dev": true, + "peer": true + }, + "node_modules/@next/eslint-plugin-next": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.0.tgz", + "integrity": "sha512-WFiyvSM2G5cQmh32t/SiQuJ+I2O+FHVlK/RFw5b1565O2kEM/36EXncjt88Pa+X5oSc+1SS+tWxowWJd1lqI+g==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@next/polyfill-module": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-12.0.7.tgz", + "integrity": "sha512-sA8LAMMlmcspIZw/jeQuJTyA3uGrqOhTBaQE+G9u6DPohqrBFRkaz7RzzJeqXkUXw600occsIBknSjyVd1R67A==", + "dev": true, + "peer": true + }, + "node_modules/@next/react-dev-overlay": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-12.0.7.tgz", + "integrity": "sha512-dSQLgpZ5uzyittFtIHlJCLAbc0LlMFbRBSYuGsIlrtGyjYN+WMcnz8lK48VLxNPFGuB/hEzkWV4TW5Zu75+Fzg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "anser": "1.4.9", + "chalk": "4.0.0", + "classnames": "2.2.6", + "css.escape": "1.5.1", + "data-uri-to-buffer": "3.0.1", + "platform": "1.3.6", + "shell-quote": "1.7.3", + "source-map": "0.8.0-beta.0", + "stacktrace-parser": "0.1.10", + "strip-ansi": "6.0.1" + }, + "peerDependencies": { + "react": "^17.0.2", + "react-dom": "^17.0.2", + "webpack": "^4 || ^5" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/@next/react-dev-overlay/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@next/react-dev-overlay/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@next/react-dev-overlay/node_modules/chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@next/react-dev-overlay/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@next/react-dev-overlay/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@next/react-dev-overlay/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@next/react-dev-overlay/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "peer": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@next/react-dev-overlay/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@next/react-dev-overlay/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/@next/react-dev-overlay/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true, + "peer": true + }, + "node_modules/@next/react-dev-overlay/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "peer": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.7.tgz", + "integrity": "sha512-yViT7EEc7JqxncRT+ZTeTsrAYXLlcefo0Y0eAfYmmalGD2605L4FWAVrJi4WnrSLji7l+veczw1WBmNeHICKKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.7.tgz", + "integrity": "sha512-vhAyW2rDEUcQesRVaj0z1hSoz7QhDzzGd0V1/5/5i9YJOfOtyrPsVJ82tlf7BfXl6/Ep+eKNfWVIb5/Jv89EKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.7.tgz", + "integrity": "sha512-km+6Rx6TvbraoQ1f0MXa69ol/x0RxzucFGa2OgZaYJERas0spy0iwW8hpASsGcf597D8VRW1x+R2C7ZdjVBSTw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.7.tgz", + "integrity": "sha512-d0zWr877YqZ2cf/DQy6obouaR39r0FPebcXj2nws9AC99m68CO2xVpWv9jT7mFvpY+T40HJisLH80jSZ2iQ9sA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.7.tgz", + "integrity": "sha512-fdobh5u6gG13Gd5LkHhJ+W8tF9hbaFolRW99FhzArMe5/nMKlLdBymOxvitE3K4gSFQxbXJA6TbU0Vv0e59Kww==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.7.tgz", + "integrity": "sha512-vx0c5Q3oIScFNT/4jI9rCe0yPzKuCqWOkiO/OOV0ixSI2gLhbrwDIcdkm79fKVn3i8JOJunxE4zDoFeR/g8xqQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.7.tgz", + "integrity": "sha512-9ITyp6s6uGVKNx3C/GP7GrYycbcwTADG7TdIXzXUxOOZORrdB1GNg3w/EL3Am4VMPPEpO6v1RfKo2IKZpVKfTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.7.tgz", + "integrity": "sha512-C+k+cygbIZXYfc+Hx2fNPUBEg7jzio+mniP5ywZevuTXW14zodIfQ3ZMoMJR8EpOVvYpjWFk2uAjiwqgx8vo/g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.7.tgz", + "integrity": "sha512-7jTRjOKkDVnb5s7VoHT7eX+eyT/5BQJ/ljP2G56riAgKGqPL63/V7FXemLhhLT67D+OjoP8DRA2E2ne6IPHk4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.7.tgz", + "integrity": "sha512-2u5pGDsk7H6gGxob2ATIojzlwKzgYsrijo7RRpXOiPePVqwPWg6/pmhaJzLdpfjaBgRg1NFmwSp/7Ump9X8Ijg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.7.tgz", + "integrity": "sha512-frEWtbf+q8Oz4e2UqKJrNssk6DZ6/NLCQXn5/ORWE9dPAfe9XS6aK5FRZ6DuEPmmKd5gOoRkKJFFz5nYd+TeyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@noble/ciphers": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.5.3.tgz", + "integrity": "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", + "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomiclabs/hardhat-ethers": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.4.tgz", + "integrity": "sha512-7LMR344TkdCYkMVF9LuC9VU2NBIi84akQiwqm7OufpWaDgHbWhuanY53rk3SVAW0E4HBk5xn5wl5+bN5f+Mq5w==", + "dev": true, + "peerDependencies": { + "ethers": "^5.0.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", + "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", + "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", + "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", + "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", + "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.38.0.tgz", + "integrity": "sha512-6i1sZl2B329NoOeCFm0R6H/u0DLex7L3NVLEQGSujfM6ztNxEZGmrFhV57eFkzwIHVHUqq9pfmpAAYVkGgrO1w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-lambda": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.42.0.tgz", + "integrity": "sha512-GhV3s62W8gWXDuCdPkWj60W3giHGadHoGBPGW5Wud2fUK9lY6FiYxv6AmCokzugTaiRfB2RjsaJWd9xTtYttVA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagator-aws-xray": "^1.3.1", + "@opentelemetry/resources": "^1.8.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/aws-lambda": "8.10.122" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-sdk": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.42.0.tgz", + "integrity": "sha512-6b4LQAeBSKU5RhKEP9rH+wMcKswlllIT9J65uREmnWQQJo5zogD6cWa2sJ814o9K25/aDi+zheVHDFDuA7iVCQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagation-utils": "^0.30.10", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-bunyan": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.39.0.tgz", + "integrity": "sha512-AQ845Wh5Yhd7S0argkCd1vrThNo4q/p6LJePC4OlFifPa9i5O2MzfLNh4mo8YWa0rYvcc+jbhodkGNa+1YJk/A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@types/bunyan": "1.8.9" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cassandra-driver": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.39.0.tgz", + "integrity": "sha512-D1p7zNNHQYI6/d0ulAFXe+71oDAgzxctfB0EICT8GpBhOCRlCW0U4rxRWrnZW6T5sJaBJqSsY4QF5CPqvCc00w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.37.0.tgz", + "integrity": "sha512-SeQktDIH5rNzjiEiazWiJAIXkmnLOnNV7wwHpahrqE0Ph+Z3heqMfxRtoMtbdJSIYLfcNZYO51AjxZ00IXufdw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/connect": "3.4.36" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cucumber": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.7.0.tgz", + "integrity": "sha512-bF9gpkUsDbg5Ii47PrhOzgCJKKrT0Tn0wfowOOgcW8PruqfuXgnQ9q1B6GGdSqtIaFnX3xFxGCyWcmf5emt64w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.10.0.tgz", + "integrity": "sha512-yoAHGsgXx0YNFJ5XgCAgPo2Wr7Hy4IQX7YTcCulnKuxdfFXybsM9Yz7wiF9X2X2eB6HRLRJRufXT0sujbHaq1g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dns": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.37.0.tgz", + "integrity": "sha512-vhIOqqUGq1qwSKS6mF9tpXP7GmVQpQK4zm7bn2UYModpm+YYQzghtf/D8JH6lxXyUMP40zA37xUd2HO6uze/dw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dns/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.40.1.tgz", + "integrity": "sha512-+RKMvVe2zw3kIXRup9c1jFu3T4d0fs5aKy015TpiMyoCKX1UMu3Z0lfgYtuyiSTANvg5hZnDbWmQmqSPj9VTvg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fastify": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.37.0.tgz", + "integrity": "sha512-WRjwzNZgupSzbEYvo9s+QuHJRqZJjVdNxSEpGBwWK8RKLlHGwGVAu0gcc2gPamJWUJsGqPGvahAPWM18ZkWj6A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.13.0.tgz", + "integrity": "sha512-sZxofhMkul95/Rb4R/Q1eP8mIpgWX8dXNCAOk1jMzl/I8xPJ5tnPgT+PIInPSiDh3kgZDTxK5Up1zMnUh0XqSg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.37.0.tgz", + "integrity": "sha512-l3VivYfu+FRw0/hHu2jlFLz4mfxZrOg4r96usDF5dJgDRQrRUmjtq6xssYGuFKn1FXAfN8Rcn1Tdk/c40PNYEA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.41.0.tgz", + "integrity": "sha512-R/gXeljgIhaRDKquVkKYT5QHPnFouM8ooyePZEP0kqyaVAedtR1V7NfAUJbxfTG5fBQa5wdmLjvu63+tzRXZCA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.52.1.tgz", + "integrity": "sha512-EdSDiDSAO+XRXk/ZN128qQpBo1I51+Uay/LUPcPQhSRGf7fBPIEUBeOLQiItguGsug5MGOYjql2w/1wCQF3fdQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.39.0.tgz", + "integrity": "sha512-ik2nA9Yj2s2ay+aNY+tJsKCsEx6Tsc2g/MK0iWBW5tibwrWKTy1pdVt5sB3kd5Gkimqj23UV5+FH2JFcQLeKug==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz", + "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.41.0.tgz", + "integrity": "sha512-rxiLloU8VyeJGm5j2fZS8ShVdB82n7VNP8wTwfUQqDwRfHCnkzGr+buKoxuhGD91gtwJ91RHkjHA1Eg6RqsUTg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.37.0.tgz", + "integrity": "sha512-NyXHezcUYiWnzhiY4gJE/ZMABnaC7ZQUCyx7zNB4J9Snmc4YCsRbLpTkJmCLft3ey/8Qg1Un+6efZcpgthQqbg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.41.0.tgz", + "integrity": "sha512-mbPnDt7ELvpM2S0vixYUsde7122lgegLOJQxx8iJQbB8YHal/xnTh9v7IfArSVzIDo+E+080hxZyUZD4boOWkw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/koa": "2.14.0", + "@types/koa__router": "12.0.3" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.38.0.tgz", + "integrity": "sha512-x41JPoCbltEeOXlHHVxHU6Xcd/91UkaXHNIqj8ejfp9nVQe0lFHBJ8wkUaVJlasu60oEPmiz6VksU3Wa42BrGw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-memcached": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.37.0.tgz", + "integrity": "sha512-30mEfl+JdeuA6m7GRRwO6XYkk7dj4dp0YB70vMQ4MS2qBMVQvkEu3Gb+WFhSHukTYv753zyBeohDkeXw7DEsvw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0", + "@types/memcached": "^2.2.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.45.0.tgz", + "integrity": "sha512-xnZP9+ayeB1JJyNE9cIiwhOJTzNEsRhXVdLgfzmrs48Chhhk026mQdM5CITfyXSCfN73FGAIB8d91+pflJEfWQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/sdk-metrics": "^1.9.1", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.39.0.tgz", + "integrity": "sha512-J1r66A7zJklPPhMtrFOO7/Ud2p0Pv5u8+r23Cd1JUH6fYPmftNJVsLp2urAt6PHK4jVqpP/YegN8wzjJ2mZNPQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.39.0.tgz", + "integrity": "sha512-8snHPh83rhrDf31v9Kq0Nf+ts8hdr7NguuszRqZomZBHgE0+UyXZSkXHAAFZoBPPRMGyM68uaFE5hVtFl+wOcA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/mysql": "2.15.22" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.39.0.tgz", + "integrity": "sha512-Iypuq2z6TCfriAXCIZjRq8GTFCKhQv5SpXbmI+e60rYdXw8NHtMH4NXcGF0eKTuoCsC59IYSTUvDQYDKReaszA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-nestjs-core": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.38.0.tgz", + "integrity": "sha512-M381Df1dM8aqihZz2yK+ugvMFK5vlHG/835dc67Sx2hH4pQEQYDA2PpFPTgc9AYYOydQaj7ClFQunESimjXDgg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-net": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.37.0.tgz", + "integrity": "sha512-kLTnWs4R/FtNDvJC7clS7/tBzK7I8DH5IV1I8abog4/1fHh/CFiwWeTRlPlREwcGfVJyL95pDX2Utjviybr5Dg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.42.0.tgz", + "integrity": "sha512-sjgcM8CswYy8zxHgXv4RAZ09DlYhQ+9TdlourUs63Df/ek5RrB1ZbjznqW7PB6c3TyJJmX6AVtPTjAsROovEjA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.4" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pino": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.40.0.tgz", + "integrity": "sha512-29B7mpabiB5m9YeVuUpWNceKv2E2semh44Y0EngFn7Z/Dwg13j+jsD3h6RaLPLUmUynWKSa160jZm0XrWbx40w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.40.0.tgz", + "integrity": "sha512-vf2EwBrb979ztLMbf8ew+65ECP3yMxeFwpMLu9KjX6+hFf1Ng776jlM2H9GeP1YePbvoBB5Jbo0MBU6Y0HEgzA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.40.0.tgz", + "integrity": "sha512-0ieQYJb6yl35kXA75LQUPhHtGjtQU9L85KlWa7d4ohBbk/iQKZ3X3CFl5jC5vNMq/GGPB3+w3IxNvALlHtrp7A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-restify": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.39.0.tgz", + "integrity": "sha512-+KDpaGvJLW28LYoT3AZAEVnywzy8dGS+wTWirXU6edKXu4w5mwdxui3UB3Vy/+FV7gbMWidzedaihTDlQvZXRA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-router": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.38.0.tgz", + "integrity": "sha512-HMeeBva/rqIqg/KHzmKcvutK4JS90Sk59i4qCnLhHW57CMVruj18aXEpBT+QMVJRjmzrvhkJnIpNcPu5vglmRg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-socket.io": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.40.0.tgz", + "integrity": "sha512-BJFMytiHnvKM7n6n67pT9eTBGpZetY+LHic8UKrIQ313uBp+MBbRyqiJY6dT4bcN1B6sl47JzCyKmVprSuSnBA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.11.0.tgz", + "integrity": "sha512-Dh93CyaR7vldKf0oXwtYlSEdqvMGUTv270N0YGBQtODPKtgIMr9816vIA7cJPCZ4SbbREgLNQJfbh0qeadAM4Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/tedious": "^4.0.10" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.3.0.tgz", + "integrity": "sha512-LMbOE4ofjpQyZ3266Ah6XL9JIBaShebLN0aaZPvqXozKPu41rHmggO3qk0H+Unv8wbiUnHgYZDvq8yxXyKAadg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" + } + }, + "node_modules/@opentelemetry/instrumentation-winston": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.38.0.tgz", + "integrity": "sha512-rBAoVkv5HGyKFIpM3Xy5raPNJ/Le1JsAFPbxwbfOZUxpLT2YBB99h/jJYsHm+eNueJ7EBwz2ftqY8rEpVlk3XA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", + "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", + "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", + "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagation-utils": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.10.tgz", + "integrity": "sha512-hhTW8pFp9PSyosYzzuUL9rdm7HF97w3OCyElufFHyUnYnKkCBbu8ne2LyF/KSdI/xZ81ubxWZs78hX4S7pLq5g==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/propagator-aws-xray": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-1.25.1.tgz", + "integrity": "sha512-soZQdO9EAROMwa9bL2C0VLadbrfRjSA9t7g6X8sL0X1B8V59pzOayYMyTW9qTECn9uuJV98A7qOnJm6KH6yk8w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-b3": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", + "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", + "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resource-detector-alibaba-cloud": { + "version": "0.28.10", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.28.10.tgz", + "integrity": "sha512-TZv/1Y2QCL6sJ+X9SsPPBXe4786bc/Qsw0hQXFsNTbJzDTGGUmOAlSZ2qPiuqAd4ZheUYfD+QA20IvAjUz9Hhg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-aws": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.5.1.tgz", + "integrity": "sha512-+IUh4gAwJf49vOJM6PIjmgOapRH5zr21ZpFnNU0QZmxRi52AXVhZN7A89pKW6GAQheWnVQLD7iUN87ieYt70tw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-azure": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.2.9.tgz", + "integrity": "sha512-16Z6kyrmszoa7J1uj1kbSAgZuk11K07yEDj6fa3I9XBf8Debi8y4K8ex94kpxbCfEraWagXji3bCWvaq3k4dRg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/resources": "^1.10.1", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-container": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.3.11.tgz", + "integrity": "sha512-22ndMDakxX+nuhAYwqsciexV8/w26JozRUV0FN9kJiqSWtA1b5dCVtlp3J6JivG5t8kDN9UF5efatNnVbqRT9Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-gcp": { + "version": "0.29.10", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.29.10.tgz", + "integrity": "sha512-rm2HKJ9lsdoVvrbmkr9dkOzg3Uk0FksXNxvNBgrCprM1XhMoJwThI5i0h/5sJypISUAJlEeJS6gn6nROj/NpkQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "gcp-metadata": "^6.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", + "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "0.52.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", + "@opentelemetry/exporter-zipkin": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/sdk-trace-node": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", + "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/context-async-hooks": "1.25.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/propagator-b3": "1.25.1", + "@opentelemetry/propagator-jaeger": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" + } + }, + "node_modules/@opentelemetry/tracing": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/tracing/-/tracing-0.24.0.tgz", + "integrity": "sha512-sTLEs1SIon3xV8vLe53PzfbU0FahoxL9NPY/CYvA1mwGbMu4zHkHAjqy1Tc8JmqRrfa+XrHkmzeSM4hrvloBaA==", + "deprecated": "Package renamed to @opentelemetry/sdk-trace-base", + "dependencies": { + "@opentelemetry/core": "0.24.0", + "@opentelemetry/resources": "0.24.0", + "@opentelemetry/semantic-conventions": "0.24.0", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.1" + } + }, + "node_modules/@opentelemetry/tracing/node_modules/@opentelemetry/core": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-0.24.0.tgz", + "integrity": "sha512-KpsfxBbFTZT9zaB4Es/fFLbvSzVl9Io/8UUu/TYl4/HgqkmyVInNlWTgRiKyz9nsHzFpGP1kdZJj+YIut0IFsw==", + "dependencies": { + "@opentelemetry/semantic-conventions": "0.24.0", + "semver": "^7.1.3" + }, + "engines": { + "node": ">=8.5.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.1" + } + }, + "node_modules/@opentelemetry/tracing/node_modules/@opentelemetry/resources": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-0.24.0.tgz", + "integrity": "sha512-uEr2m13IRkjQAjX6fsYqJ21aONCspRvuQunaCl8LbH1NS1Gj82TuRUHF6TM82ulBPK8pU+nrrqXKuky2cMcIzw==", + "dependencies": { + "@opentelemetry/core": "0.24.0", + "@opentelemetry/semantic-conventions": "0.24.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.1" + } + }, + "node_modules/@opentelemetry/tracing/node_modules/@opentelemetry/semantic-conventions": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-0.24.0.tgz", + "integrity": "sha512-a/szuMQV0Quy0/M7kKdglcbRSoorleyyOwbTNNJ32O+RBN766wbQlMTvdimImTmwYWGr+NJOni1EcC242WlRcA==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/tracing/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/tracing/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/tracing/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@openzeppelin/contracts": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.4.2.tgz", + "integrity": "sha512-NyJV7sJgoGYqbtNUWgzzOGW4T6rR19FmX1IJgXGdapGPWsuMelGJn9h03nos0iqfforCbCB0iYIR0MtIuIFLLw==", + "dev": true + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", + "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", + "license": "MIT", + "dependencies": { + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" + } + }, + "node_modules/@peculiar/asn1-schema/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", + "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.8.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@peculiar/webcrypto/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@pedrouid/environment": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pedrouid/environment/-/environment-1.0.1.tgz", + "integrity": "sha512-HaW78NszGzRZd9SeoI3JD11JqY+lubnaOx7Pewj5pfjqWXOEATpeKIFb9Z4t2WBUK2iryiXX3lzWwmYWgUL0Ug==" + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.4.tgz", + "integrity": "sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw==", + "dev": true, + "dependencies": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.8.1", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <3.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@prisma/client": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.16.1.tgz", + "integrity": "sha512-wM9SKQjF0qLxdnOZIVAIMKiz6Hu7vDt4FFAih85K1dk/Rr2mdahy6d3QP41K62N9O0DJJA//gUDA3Mp49xsKIg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.16.1.tgz", + "integrity": "sha512-JsNgZAg6BD9RInLSrg7ZYzo11N7cVvYArq3fHGSD89HSgtN0VDdjV6bib7YddbcO6snzjchTiLfjeTqBjtArVQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.16.1.tgz", + "integrity": "sha512-KkyF3eIUtBIyp5A/rJHCtwQO18OjpGgx18PzjyGcJDY/+vNgaVyuVd+TgwBgeq6NLdd1XMwRCI+58vinHsAdfA==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.16.1", + "@prisma/engines-version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "@prisma/fetch-engine": "5.16.1", + "@prisma/get-platform": "5.16.1" + } + }, + "node_modules/@prisma/engines-version": { + "version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303.tgz", + "integrity": "sha512-HkT2WbfmFZ9WUPyuJHhkiADxazHg8Y4gByrTSVeb3OikP6tjQ7txtSUGu9OBOBH0C13dPKN2qqH12xKtHu/Hiw==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.16.1.tgz", + "integrity": "sha512-oOkjaPU1lhcA/Rvr4GVfd1NLJBwExgNBE36Ueq7dr71kTMwy++a3U3oLd2ZwrV9dj9xoP6LjCcky799D9nEt4w==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.16.1", + "@prisma/engines-version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "@prisma/get-platform": "5.16.1" + } + }, + "node_modules/@prisma/get-platform": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.16.1.tgz", + "integrity": "sha512-R4IKnWnMkR2nUAbU5gjrPehdQYUUd7RENFD2/D+xXTNhcqczp0N+WEGQ3ViyI3+6mtVcjjNIMdnUTNyu3GxIgA==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.16.1" + } + }, + "node_modules/@prisma/instrumentation": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.16.1.tgz", + "integrity": "sha512-4m5gRFWnQb8s/yTyGbMZkL7A5uJgqOWcWJxapwcAD0T0kh5sGPEVSQl/zTQvE9aduXhFAxOtC3gO+R8Hb5xO1Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.8", + "@opentelemetry/instrumentation": "^0.49 || ^0.50 || ^0.51 || ^0.52.0", + "@opentelemetry/sdk-trace-base": "^1.22" + } + }, + "node_modules/@project-serum/anchor": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.20.1.tgz", + "integrity": "sha512-2TuBmGUn9qeYz6sJINJlElrBuPsaUAtYyUsJ3XplEBf1pczrANAgs5ceJUFzdiqGEWLn+84ObSdBeChT/AXYFA==", + "dependencies": { + "@project-serum/borsh": "^0.2.2", + "@solana/web3.js": "^1.17.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^5.3.1", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "find": "^0.3.0", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" + } + }, + "node_modules/@project-serum/borsh": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.5.tgz", + "integrity": "sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.2.0" + } + }, + "node_modules/@project-serum/sol-wallet-adapter": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.6.tgz", + "integrity": "sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g==", + "dependencies": { + "bs58": "^4.0.1", + "eventemitter3": "^4.0.7" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.5.0" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@putout/minify": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@putout/minify/-/minify-4.3.1.tgz", + "integrity": "sha512-XIkJx93TDReV+zYaCB+CnfASHm26vAOEpBmAKzcW/56/8LxU8TRoetUBelkACUab8GPGHjElp0n6a2cLI+ccnw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", + "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", + "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==", + "dev": true + }, + "node_modules/@scure/base": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz", + "integrity": "sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.0.tgz", + "integrity": "sha512-XOm4LkuC0PsK1sf2bBJLIlskn5ghmVxiEBVlo/jg0R8hxASBKYYgOoJEhKWgOr4vWGkN+5rC+oyBAqHYtxjnwQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/abort-controller/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/config-resolver": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.3.tgz", + "integrity": "sha512-4wHqCMkdfVDP4qmr4fVPYOFOH+vKhOv3X4e6KEU9wIC8xXUQ24tnF4CW+sddGDX1zU86GGyQ7A+rg2xmUD6jpQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.2", + "@smithy/types": "^3.2.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/config-resolver/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/core": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.3.tgz", + "integrity": "sha512-SpyLOL2vgE6sUYM6nQfu82OirCPkCDKctyG3aMgjMlDPTJpUlmlNH0ttu9ZWwzEjrzzr8uABmPjJTRI7gk1HFQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-endpoint": "^3.0.3", + "@smithy/middleware-retry": "^3.0.6", + "@smithy/middleware-serde": "^3.0.2", + "@smithy/protocol-http": "^4.0.2", + "@smithy/smithy-client": "^3.1.4", + "@smithy/types": "^3.2.0", + "@smithy/util-middleware": "^3.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.2.tgz", + "integrity": "sha512-gqVmUaNoeqyrOAjgZg+rTmFLsphh/vS59LCMdFfVpthVS0jbfBzvBmEPktBd+y9ME4DYMGHFAMSYJDK8q0noOQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.2", + "@smithy/property-provider": "^3.1.2", + "@smithy/types": "^3.2.0", + "@smithy/url-parser": "^3.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.1.0.tgz", + "integrity": "sha512-s7oQjEOUH9TYjctpITtWF4qxOdg7pBrP9eigEQ8SBsxF3dRFV0S28pGMllC83DUr7ECmErhO/BUwnULfoNhKgQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.0.2", + "@smithy/querystring-builder": "^3.0.2", + "@smithy/types": "^3.2.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/fetch-http-handler/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/hash-node": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.2.tgz", + "integrity": "sha512-43uGA6o6QJQdXwAogybdTDHDd3SCdKyoiHIHb8PpdE2rKmVicjG9b1UgVwdgO8QPytmVqHFaUw27M3LZKwu8Yg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-node/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/invalid-dependency": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.2.tgz", + "integrity": "sha512-+BAY3fMhomtq470tswXyrdVBSUhiLuhBVT+rOmpbz5e04YX+s1dX4NxTLzZGwBjCpeWZNtTxP8zbIvvFk81gUg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/invalid-dependency/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/is-array-buffer/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-content-length": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.2.tgz", + "integrity": "sha512-/Havz3PkYIEmwpqkyRTR21yJsWnFbD1ec4H1pUL+TkDnE7RCQkAVUQepLL/UeCaZeCBXvfdoKbOjSbV01xIinQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.0.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.3.tgz", + "integrity": "sha512-ARAXHodhj4tttKa9y75zvENdSoHq6VGsSi7XS3+yLutrnxttJs6N10UMInCC1yi3/bopT8xug3iOP/y9R6sKJQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^3.0.2", + "@smithy/node-config-provider": "^3.1.2", + "@smithy/shared-ini-file-loader": "^3.1.2", + "@smithy/types": "^3.2.0", + "@smithy/url-parser": "^3.0.2", + "@smithy/util-middleware": "^3.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-retry": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.6.tgz", + "integrity": "sha512-ICsFKp8eAyIMmxN5UT3IU37S6886L879TKtgxPsn/VD/laYNwqTLmJaCAn5//+2fRIrV0dnHp6LFlMwdXlWoUQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.2", + "@smithy/protocol-http": "^4.0.2", + "@smithy/service-error-classification": "^3.0.2", + "@smithy/smithy-client": "^3.1.4", + "@smithy/types": "^3.2.0", + "@smithy/util-middleware": "^3.0.2", + "@smithy/util-retry": "^3.0.2", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-retry/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.2.tgz", + "integrity": "sha512-oT2abV5zLhBucJe1LIIFEcRgIBDbZpziuMPswTMbBQNcaEUycLFvX63zsFmqfwG+/ZQKsNx+BSE8W51CMuK7Yw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-serde/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-stack": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.2.tgz", + "integrity": "sha512-6fRcxomlNKBPIy/YjcnC7YHpMAjRvGUYlYVJAfELqZjkW0vQegNcImjY7T1HgYA6u3pAcCxKVBLYnkTw8z/l0A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-stack/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/node-config-provider": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.2.tgz", + "integrity": "sha512-388fEAa7+6ORj/BDC70peg3fyFBTTXJyXfXJ0Bwd6FYsRltePr2oGzIcm5AuC1WUSLtZ/dF+hYOnfTMs04rLvA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.2", + "@smithy/shared-ini-file-loader": "^3.1.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-config-provider/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/node-http-handler": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.0.tgz", + "integrity": "sha512-pOpgB6B+VLXLwAyyvRz+ZAVXABlbAsJ2xvn3WZvrppAPImxwQOPFbeSUzWYMhpC8Tr7yQ3R8fG990QDhskkf1Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^3.1.0", + "@smithy/protocol-http": "^4.0.2", + "@smithy/querystring-builder": "^3.0.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-http-handler/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/property-provider": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.2.tgz", + "integrity": "sha512-Hzp32BpeFFexBpO1z+ts8okbq/VLzJBadxanJAo/Wf2CmvXMBp6Q/TLWr7Js6IbMEcr0pDZ02V3u1XZkuQUJaA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/property-provider/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/protocol-http": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.2.tgz", + "integrity": "sha512-X/90xNWIOqSR2tLUyWxVIBdatpm35DrL44rI/xoeBWUuanE0iyCXJpTcnqlOpnEzgcu0xCKE06+g70TTu2j7RQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/protocol-http/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/querystring-builder": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.2.tgz", + "integrity": "sha512-xhv1+HacDYsOLdNt7zW+8Fe779KYAzmWvzs9bC5NlKM8QGYCwwuFwDBynhlU4D5twgi2pZ14Lm4h6RiAazCtmA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-builder/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/querystring-parser": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.2.tgz", + "integrity": "sha512-C5hyRKgrZGPNh5QqIWzXnW+LXVrPmVQO0iJKjHeb5v3C61ZkP9QhrKmbfchcTyg/VnaE0tMNf/nmLpQlWuiqpg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-parser/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/service-error-classification": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.2.tgz", + "integrity": "sha512-cu0WV2XRttItsuXlcM0kq5MKdphbMMmSd2CXF122dJ75NrFE0o7rruXFGfxAp3BKzgF/DMxX+PllIA/cj4FHMw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.2.tgz", + "integrity": "sha512-tgnXrXbLMO8vo6VeuqabMw/eTzQHlLmZx0TC0TjtjJghnD0Xl4pEnJtBjTJr6XF5fHMNrt5BcczDXHJT9yNQnA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/signature-v4": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.1.1.tgz", + "integrity": "sha512-2/vlG86Sr489XX8TA/F+VDA+P04ESef04pSz0wRtlQBExcSPjqO08rvrkcas2zLnJ51i+7ukOURCkgqixBYjSQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/types": "^3.2.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.2", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/smithy-client": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.4.tgz", + "integrity": "sha512-y6xJROGrIoitjpwXLY7P9luDHvuT9jWpAluliuSFdBymFxcl6iyQjo9U/JhYfRHFNTruqsvKOrOESVuPGEcRmQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-endpoint": "^3.0.3", + "@smithy/middleware-stack": "^3.0.2", + "@smithy/protocol-http": "^4.0.2", + "@smithy/types": "^3.2.0", + "@smithy/util-stream": "^3.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/smithy-client/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/types": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.2.0.tgz", + "integrity": "sha512-cKyeKAPazZRVqm7QPvcPD2jEIt2wqDPAL1KJKb0f/5I7uhollvsWZuZKLclmyP6a+Jwmr3OV3t+X0pZUUHS9BA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/types/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/url-parser": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.2.tgz", + "integrity": "sha512-pRiPHrgibeAr4avtXDoBHmTLtthwA4l8jKYRfZjNgp+bBPyxDMPRg2TMJaYxqbKemvrOkHu9MIBTv2RkdNfD6w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^3.0.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/url-parser/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-base64/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-body-length-browser/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-body-length-node/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-buffer-from/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-config-provider/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.6.tgz", + "integrity": "sha512-tAgoc++Eq+KL7g55+k108pn7nAob3GLWNEMbXhZIQyBcBNaE/o3+r4AEbae0A8bWvLRvArVsjeiuhMykGa04/A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.2", + "@smithy/smithy-client": "^3.1.4", + "@smithy/types": "^3.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.6.tgz", + "integrity": "sha512-UNerul6/E8aiCyFTBHk+RSIZCo7m96d/N5K3FeO/wFeZP6oy5HAicLzxqa85Wjv7MkXSxSySX29L/LwTV/QMag==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^3.0.3", + "@smithy/credential-provider-imds": "^3.1.2", + "@smithy/node-config-provider": "^3.1.2", + "@smithy/property-provider": "^3.1.2", + "@smithy/smithy-client": "^3.1.4", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-endpoints": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.3.tgz", + "integrity": "sha512-Dyi+pfLglDHSGsKSYunuUUSFM5V0tz7UDgv1Ex97yg+Xkn0Eb0rH0rcvl1n0MaJ11fac3HKDOH0DkALyQYCQag==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-endpoints/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-middleware": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.2.tgz", + "integrity": "sha512-7WW5SD0XVrpfqljBYzS5rLR+EiDzl7wCVJZ9Lo6ChNFV4VYDk37Z1QI5w/LnYtU/QKnSawYoHRd7VjSyC8QRQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-middleware/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-retry": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.2.tgz", + "integrity": "sha512-HUVOb1k8p/IH6WFUjsLa+L9H1Zi/FAAB2CDOpWuffI1b2Txi6sknau8kNfC46Xrt39P1j2KDzCE1UlLa2eW5+A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^3.0.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-retry/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-stream": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.4.tgz", + "integrity": "sha512-CcMioiaOOsEVdb09pS7ux1ij7QcQ2jE/cE1+iin1DXMeRgAEQN/47m7Xztu7KFQuQsj0A5YwB2UN45q97CqKCg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^3.1.0", + "@smithy/node-http-handler": "^3.1.0", + "@smithy/types": "^3.2.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-stream/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-uri-escape/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-utf8/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@smithy/util-waiter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.1.tgz", + "integrity": "sha512-xT+Bbpe5sSrC7cCWSElOreDdWzqovR1V+7xrp+fmwGAA+TPYBb78iasaXjO1pa+65sY6JjW5GtGeIoJwCK9B1g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^3.1.0", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-waiter/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@solana/buffer-layout": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", + "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "license": "MIT", + "dependencies": { + "buffer": "~6.0.3" + }, + "engines": { + "node": ">=5.10" + } + }, + "node_modules/@solana/wallet-adapter-base": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.3.tgz", + "integrity": "sha512-XXUZJWvFouNuuBVnTGZjEhZQFszG60Ss3qDbmV2O4j6S4IwgfabCZ/J+eMG02a86nGEjQrfKz0jmumpmYICZOQ==", + "dependencies": { + "@solana/web3.js": "^1.20.0", + "eventemitter3": "^4.0.0" + } + }, + "node_modules/@solana/wallet-adapter-bitkeep": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-bitkeep/-/wallet-adapter-bitkeep-0.3.3.tgz", + "integrity": "sha512-4oUqAANJ0smSj+ukjzZyjSf+nM6/vN6aPT9OppP8zZegUHoVp0TeHs5/AZ+s+nxs0Wiv1Es8x8GXAy1FLrSAxg==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "node_modules/@solana/wallet-adapter-bitpie": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-bitpie/-/wallet-adapter-bitpie-0.5.3.tgz", + "integrity": "sha512-hRD91Pfj47taJgIwYaqLVNZ3bJqmlL9SpvL2RVWBqKDIRZ0zwSuiv0+QyOWfcwAJUCxZh4qT1Hr4Fd9EnC1OOQ==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "node_modules/@solana/wallet-adapter-blocto": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-blocto/-/wallet-adapter-blocto-0.5.3.tgz", + "integrity": "sha512-zMz4uMdmPG0BMPx6lpu35cgnN1bVyxACboG+kWJvMnxw/f3kyHb/+5gIiBUuFMn6p0NSR1yUBEju0UB0Epbw0A==", + "dependencies": { + "@blocto/sdk": "^0.2.21", + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "node_modules/@solana/wallet-adapter-clover": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-clover/-/wallet-adapter-clover-0.4.3.tgz", + "integrity": "sha512-cLEEPkGD2arfkz3jbjYWSyIqMVIjMQqRVghoLTpXe3KKbSUiIaeW4daPXnNzuqZZKkSj4w1ULrodpgz0xSZgKA==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "node_modules/@solana/wallet-adapter-coin98": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-coin98/-/wallet-adapter-coin98-0.5.3.tgz", + "integrity": "sha512-AvZ1io9AnzdVeJAbZ7YZyOkjjDMsDgESfloH9FPGNDKFr88GgGVZuQf8UkK0UNhWjJmPapbI5CHTnfGMVwY/HA==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "bs58": "^4.0.0" + } + }, + "node_modules/@solana/wallet-adapter-coinhub": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-coinhub/-/wallet-adapter-coinhub-0.3.3.tgz", + "integrity": "sha512-6TDj2/uObM/MoPO4DS/0qsKI/JIRUVl/KKST31HYIGWvQeP+oLRWMvCXwgczCxvLvxe/xAndtwxA4PbaiwhG3g==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "node_modules/@solana/wallet-adapter-ledger": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-ledger/-/wallet-adapter-ledger-0.9.7.tgz", + "integrity": "sha512-tFjJxQkKi3IpVBqGqjDqcGZZBxYdCRZN1/vv/nG0WFLdqx96k1BB+E9q8K0fNF+aqlRPin5RnoJYKqex28LMIA==", + "dependencies": { + "@ledgerhq/hw-transport": "^6.11.2", + "@ledgerhq/hw-transport-webhid": "^6.11.2", + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "buffer": "^6.0.3" + } + }, + "node_modules/@solana/wallet-adapter-mathwallet": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-mathwallet/-/wallet-adapter-mathwallet-0.9.3.tgz", + "integrity": "sha512-V0YIzhFwITy6mezLXjQKMK6XWkHUOwtMZO2Ar7MoFGWizD/lHvMYPbcyLCL5NVzQO1f/YCV2UfG5E6sdVpyEBQ==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "node_modules/@solana/wallet-adapter-phantom": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-phantom/-/wallet-adapter-phantom-0.9.3.tgz", + "integrity": "sha512-XBDgG5BzxRolHW2OchaIccvsPeQ0PKl/Xy303x7oHS3rW+HUwjIMqaKKpmV66A6rMr1x+ytL+tp6p7t3M2oD3Q==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "node_modules/@solana/wallet-adapter-react": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-react/-/wallet-adapter-react-0.15.3.tgz", + "integrity": "sha512-Nfd8R2WQ8kf/I4x5MzmEVth4sd5tM2sroOdvk9YzHhCo2nBg2edbQCE9rMHzMBEH6+egTA7dgQrlf0FTMHPUzw==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "react": "^17.0.0" + } + }, + "node_modules/@solana/wallet-adapter-react-ui": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-react-ui/-/wallet-adapter-react-ui-0.9.5.tgz", + "integrity": "sha512-+869B9F453K9B47FyGEuoBRSziDTu1hlWGAl2KtF3KrzxnBiu97i+GMRRfT92CQQI1pYHA/FIhIfOHwOb7b6cw==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/wallet-adapter-react": "^0.15.3", + "@solana/web3.js": "^1.20.0", + "react": "^17.0.0", + "react-dom": "^17.0.0" + } + }, + "node_modules/@solana/wallet-adapter-safepal": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-safepal/-/wallet-adapter-safepal-0.5.3.tgz", + "integrity": "sha512-30EOCDYJ/bq1HqKSkBlzCHsWITa82WJml2O46/CMUl1mOhxOJ1ghFSmIhqyHlgqQPcd5Orqvp1db+uj8v/i58w==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "node_modules/@solana/wallet-adapter-slope": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-slope/-/wallet-adapter-slope-0.5.3.tgz", + "integrity": "sha512-8n6uXrrro2mFH+wIm3NJ3M/ogSn78KPJRxRj6ZSEPnAzx/gA4RAFnB6UWQh4TcOqvdRvsILNgv+C6q0NJM0kYg==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "bs58": "^4.0.0" + } + }, + "node_modules/@solana/wallet-adapter-solflare": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-solflare/-/wallet-adapter-solflare-0.6.4.tgz", + "integrity": "sha512-Tu4kBiwde9xUQTv/bHxhIKz4dnydKqdOIiMYwUdtIPR9B6ST0Dee1hW5CiPzYBFmo4X7QrJILGFrgLehOe21YA==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "@solflare-wallet/sdk": "^1.0.6" + } + }, + "node_modules/@solana/wallet-adapter-sollet": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-sollet/-/wallet-adapter-sollet-0.11.0.tgz", + "integrity": "sha512-LNryKaVyMJgsbX7CeR6lxV8P9VWnHlEqAglU2DVdr2GLYKFyT6B1PbGAWj291E/vUmjR0y4Hmi8fHYERnhGmMg==", + "dependencies": { + "@project-serum/sol-wallet-adapter": "^0.2.6", + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "node_modules/@solana/wallet-adapter-solong": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-solong/-/wallet-adapter-solong-0.9.3.tgz", + "integrity": "sha512-TFdKK7/Vsta9ajY6+cQ9NGuhmhgsEJ8PR4Y9GWb9ao9OdcLhTFIwOV+IOeD1Ats1ORyukpzjSjsW/VA2UZkTVQ==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "node_modules/@solana/wallet-adapter-tokenpocket": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-tokenpocket/-/wallet-adapter-tokenpocket-0.4.3.tgz", + "integrity": "sha512-D40nNp92bFwcDw/aQ3bKZMvoxk2s65PJiR9t3JBb4DOtlEafa9GFhwmRYkSH6SB7gRGFUKWWjBWpACRRirFjDA==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "node_modules/@solana/wallet-adapter-torus": { + "version": "0.11.9", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-torus/-/wallet-adapter-torus-0.11.9.tgz", + "integrity": "sha512-D58fGgmv6R0mFumLF4FM8laDUA23GStwY/mKRWIMqYvz1kKxkYDCNEeN8a7XaghMU2U3lqJIj9puS6M9l7yQ/g==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "@toruslabs/solana-embed": "^0.1.0", + "assert": "^2.0.0", + "process": "^0.11.10", + "stream-browserify": "^3.0.0" + } + }, + "node_modules/@solana/wallet-adapter-wallets": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-wallets/-/wallet-adapter-wallets-0.15.3.tgz", + "integrity": "sha512-hxLtTVDHlmmrjIRkBULlDReqaCd97lZI2sK4zRBW9pxE/VL1x1JTemNZPwbrqqo6Btr1cbWnlSHEnsTy/aWpOg==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/wallet-adapter-bitkeep": "^0.3.2", + "@solana/wallet-adapter-bitpie": "^0.5.2", + "@solana/wallet-adapter-blocto": "^0.5.2", + "@solana/wallet-adapter-clover": "^0.4.2", + "@solana/wallet-adapter-coin98": "^0.5.2", + "@solana/wallet-adapter-coinhub": "^0.3.2", + "@solana/wallet-adapter-ledger": "^0.9.7", + "@solana/wallet-adapter-mathwallet": "^0.9.2", + "@solana/wallet-adapter-phantom": "^0.9.2", + "@solana/wallet-adapter-safepal": "^0.5.2", + "@solana/wallet-adapter-slope": "^0.5.2", + "@solana/wallet-adapter-solflare": "^0.6.3", + "@solana/wallet-adapter-sollet": "^0.11.0", + "@solana/wallet-adapter-solong": "^0.9.2", + "@solana/wallet-adapter-tokenpocket": "^0.4.2", + "@solana/wallet-adapter-torus": "^0.11.9" + } + }, + "node_modules/@solana/web3.js": { + "version": "1.93.3", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.93.3.tgz", + "integrity": "sha512-7ASJ3QdZPnWdTMnU//fnsvviKBSAnF57D2AorZPReN7gb820UlT07Na5dAoXymjkuOYZN6Iyw8vrc/jv+2HZnQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7", + "@noble/curves": "^1.4.0", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "agentkeepalive": "^4.5.0", + "bigint-buffer": "^1.1.5", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.3", + "fast-stable-stringify": "^1.0.0", + "jayson": "^4.1.0", + "node-fetch": "^2.7.0", + "rpc-websockets": "^9.0.2", + "superstruct": "^1.0.4" + } + }, + "node_modules/@solana/web3.js/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@solana/web3.js/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/@solana/web3.js/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/@solana/web3.js/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@solflare-wallet/sdk": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@solflare-wallet/sdk/-/sdk-1.0.10.tgz", + "integrity": "sha512-ym9PbKgozXUP8VYzqM1NKJp6x/HR4aI9YY0GMPqjhezCVuQ9dctp6zZ2RSMnjdh7evcYKgPdp6XgI36yhR3w6w==", + "dependencies": { + "@project-serum/sol-wallet-adapter": "0.2.0", + "bs58": "^4.0.1", + "eventemitter3": "^4.0.7", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "@solana/web3.js": "^1.31.0" + } + }, + "node_modules/@solflare-wallet/sdk/node_modules/@project-serum/sol-wallet-adapter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.0.tgz", + "integrity": "sha512-ed7wZwlDqjF88VCq7eHVO8njHqdUkBxBL8WEVOnB47ooLO4btOJt6GBdkKpKqKX86c86LiEROJclcdW8e7kIjg==", + "dependencies": { + "bs58": "^4.0.1", + "eventemitter3": "^4.0.4" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.5.0" + } + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.0.tgz", + "integrity": "sha512-cX0JJRcmPtNUJpzD2K7FdA7qQsTOk1UZnFx2k7qAg9ZRvuaH5NBe5IEdBMXGlmf2+FmjhqbygJ26H8l2SV7aKQ==", + "dev": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@stablelib/aead": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz", + "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==" + }, + "node_modules/@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "dependencies": { + "@stablelib/int": "^1.0.1" + } + }, + "node_modules/@stablelib/bytes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", + "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==" + }, + "node_modules/@stablelib/chacha": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz", + "integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/chacha20poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz", + "integrity": "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==", + "dependencies": { + "@stablelib/aead": "^1.0.1", + "@stablelib/binary": "^1.0.1", + "@stablelib/chacha": "^1.0.1", + "@stablelib/constant-time": "^1.0.1", + "@stablelib/poly1305": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", + "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==" + }, + "node_modules/@stablelib/ed25519": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.2.tgz", + "integrity": "sha512-FtnvUwvKbp6l1dNcg4CswMAVFVu/nzLK3oC7/PRtjYyHbWsIkD8j+5cjXHmwcCpdCpRCaTGACkEhhMQ1RcdSOQ==", + "dependencies": { + "@stablelib/random": "^1.0.1", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" + }, + "node_modules/@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + }, + "node_modules/@stablelib/keyagreement": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", + "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", + "dependencies": { + "@stablelib/bytes": "^1.0.1" + } + }, + "node_modules/@stablelib/poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", + "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", + "dependencies": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.1.tgz", + "integrity": "sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/sha256": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz", + "integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" + }, + "node_modules/@stablelib/x25519": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.1.tgz", + "integrity": "sha512-nmyUI2ZArxYDh1PhdoSCPEtlTYE0DYugp2qqx8OtjrX3Hmh7boIlDsD0X71ihAxzxqJf3TyQqN/p58ToWhnp+Q==", + "dependencies": { + "@stablelib/keyagreement": "^1.0.1", + "@stablelib/random": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/xchacha20": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/xchacha20/-/xchacha20-1.0.1.tgz", + "integrity": "sha512-1YkiZnFF4veUwBVhDnDYwo6EHeKzQK4FnLiO7ezCl/zu64uG0bCCAUROJaBkaLH+5BEsO3W7BTXTguMbSLlWSw==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/chacha": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/xchacha20poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/xchacha20poly1305/-/xchacha20poly1305-1.0.1.tgz", + "integrity": "sha512-B1Abj0sMJ8h3HNmGnJ7vHBrAvxuNka6cJJoZ1ILN7iuacXp7sUYcgOVEOTLWj+rtQMpspY9tXSCRLPmN1mQNWg==", + "dependencies": { + "@stablelib/aead": "^1.0.1", + "@stablelib/chacha20poly1305": "^1.0.1", + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1", + "@stablelib/xchacha20": "^1.0.1" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dev": true, + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dev": true, + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.11.tgz", + "integrity": "sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@swc/helpers/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@testing-library/dom": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.3.tgz", + "integrity": "sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.2.tgz", + "integrity": "sha512-6ewxs1MXWwsBFZXIk4nKKskWANelkdUehchEOokHsN8X7c2eKXGw+77aRV63UU8f/DTSVUPLaGxdrj4lN7D/ug==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.3.tgz", + "integrity": "sha512-oCULRXWRrBtC9m6G/WohPo1GLcLesH7T4fuKzRAKn1CWVu9BzXtqLXDDTA6KhFNNtRwLtfSMr20HFl+Qrdrvmg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0", + "@types/react-dom": "*" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@toruslabs/base-controllers": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-1.6.1.tgz", + "integrity": "sha512-aaOmh8uELiYi/UU7HiEk48xNluv1B0x769DrLyBL9clAy0OD1mWerHFcQJLydJdN95evG98W3LzfNb39/kC5Dw==", + "dependencies": { + "@toruslabs/http-helpers": "^2.1.4", + "@toruslabs/openlogin-jrpc": "^1.3.4", + "async-mutex": "^0.3.2", + "bignumber.js": "^9.0.2", + "bowser": "^2.11.0", + "broadcast-channel": "^4.9.0", + "eth-rpc-errors": "^4.0.3", + "ethereumjs-util": "^7.1.3", + "json-rpc-random-id": "^1.0.1", + "lodash": "^4.17.21", + "loglevel": "^1.8.0" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/http-helpers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-2.2.0.tgz", + "integrity": "sha512-xkzZZuE+DmWmJBTYneCrMJY24izNQCOdoJMpsXKQx20Va/rTQvNPbdkpx9LBf/pisk8jOwETNAfFQ8YTBc/bZw==", + "dependencies": { + "lodash.merge": "^4.6.2", + "loglevel": "^1.8.0" + }, + "engines": { + "node": ">=14.17.0", + "npm": ">=6.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/openlogin-jrpc": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-1.4.0.tgz", + "integrity": "sha512-3zR5mPVKwIRtH+U+COEYQDqD8rJoBUreRu/yFCcBsYIVT3VzAk3/RO1jtuCNn1NdiwvCCDzP3NmL0NnfDPuOUw==", + "dependencies": { + "@toruslabs/openlogin-utils": "^1.4.0", + "end-of-stream": "^1.4.4", + "events": "^3.3.0", + "fast-safe-stringify": "^2.1.1", + "once": "^1.4.0", + "pump": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/openlogin-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-1.4.0.tgz", + "integrity": "sha512-4RT/bzjyXcLbvXCZ/PwFh9b43LXdZxuPZphG5CCFl6TslLxO3fqQfGEXTpPgAZB0iUkadWoIqCTciWYKlG+vYA==", + "dependencies": { + "base64url": "^3.0.1", + "keccak": "^3.0.2", + "randombytes": "^2.1.0" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/solana-embed": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/solana-embed/-/solana-embed-0.1.0.tgz", + "integrity": "sha512-jQyw7X0YJVlY2UuZVcGd+CynF1PlXvlAzFj6/gxMAAPzhU0OjkWgWQQtrbKNuZ/d7kaGcpL/h460FbZVWI7NDA==", + "dependencies": { + "@solana/web3.js": "^1.31.0", + "@toruslabs/base-controllers": "^1.4.2", + "@toruslabs/http-helpers": "^2.1.4", + "@toruslabs/openlogin-jrpc": "^1.3.3", + "eth-rpc-errors": "^4.0.3", + "fast-deep-equal": "^3.1.3", + "is-stream": "^3.0.0", + "lodash-es": "^4.17.21", + "loglevel": "^1.8.0", + "pump": "^3.0.0" + }, + "engines": { + "node": ">=14.17.0", + "npm": ">=6.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/solana-embed/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@transmute/bls12381-key-pair": { + "version": "0.7.0-unstable.81", + "resolved": "https://registry.npmjs.org/@transmute/bls12381-key-pair/-/bls12381-key-pair-0.7.0-unstable.81.tgz", + "integrity": "sha512-r0MIYw6MNr42AeYHSdbR5bJty9dpyTfuP8r7f45zZd5mvJkp/ryzDGu7JOQpeY+7VnzW/d9CVWTUmdrgq9oDqQ==", + "license": "Apache-2.0", + "dependencies": { + "@mattrglobal/bls12381-key-pair": "^1.0.0", + "@transmute/ld-key-pair": "^0.7.0-unstable.81" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@transmute/did-context": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/did-context/-/did-context-0.6.1-unstable.37.tgz", + "integrity": "sha512-p/QnG3QKS4218hjIDgdvJOFATCXsAnZKgy4egqRrJLlo3Y6OaDBg7cA73dixOwUPoEKob0K6rLIGcsCI/L1acw==", + "license": "Apache-2.0" + }, + "node_modules/@transmute/did-key-bls12381": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-bls12381/-/did-key-bls12381-0.3.0-unstable.10.tgz", + "integrity": "sha512-ExSADdvDxrYeCx8RsKXZGMjJmHrOJ9vyYtziZUaJ97K/sn1uVlvIOTp9V4xHa6j9cT1wTzSqJ325euwGFeK+WQ==", + "license": "Apache-2.0", + "dependencies": { + "@transmute/bls12381-key-pair": "^0.7.0-unstable.2", + "@transmute/did-key-common": "^0.3.0-unstable.10" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@transmute/did-key-common": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-common/-/did-key-common-0.3.0-unstable.10.tgz", + "integrity": "sha512-Iryh/HcGIvmTtWFTRaG/JEgbUsqI5OqKqkR2676yQWK4ajLMsyNattz5n0ZfFQk/4U7Ee6pJvvKRduFDAqqV0Q==", + "license": "Apache-2.0", + "dependencies": { + "@did-core/data-model": "^0.1.1-unstable.13", + "@did-core/did-ld-json": "^0.1.1-unstable.13", + "@transmute/did-context": "^0.6.1-unstable.36", + "@transmute/ld-key-pair": "^0.6.1-unstable.36", + "@transmute/security-context": "^0.6.1-unstable.36" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@transmute/did-key-common/node_modules/@transmute/ld-key-pair": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/ld-key-pair/-/ld-key-pair-0.6.1-unstable.37.tgz", + "integrity": "sha512-DcTpEruAQBfOd2laZkg3uCQ+67Y7dw2hsvo42NAQ5tItCIx5AClP7zccri7T2JUcfDUFaE32z/BLTMEKYt3XZQ==", + "license": "Apache-2.0" + }, + "node_modules/@transmute/did-key-ed25519": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-ed25519/-/did-key-ed25519-0.3.0-unstable.10.tgz", + "integrity": "sha512-9QdXl58DjwqBuOJBx6DtvaNW2bZLmVBxMSq2En4RAQcGIz1GGulyEQ1NB7PLIAgnam3LIFxiK6RiQGQTfJmmJg==", + "license": "Apache-2.0", + "dependencies": { + "@transmute/did-key-common": "^0.3.0-unstable.10", + "@transmute/ed25519-key-pair": "^0.6.1-unstable.37" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@transmute/did-key-secp256k1": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-secp256k1/-/did-key-secp256k1-0.3.0-unstable.10.tgz", + "integrity": "sha512-C/Gyu2U3NQZ9Gxu4WVwUk8h0ERbY9Z4Kjk0P49p3IQFrWK19XmVXjA+b1RiqffhYzWJ6fH5TPYIt2LW5MRQmUA==", + "license": "Apache-2.0", + "dependencies": { + "@transmute/did-key-common": "^0.3.0-unstable.10", + "@transmute/secp256k1-key-pair": "^0.7.0-unstable.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@transmute/did-key-test-vectors": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-test-vectors/-/did-key-test-vectors-0.3.0-unstable.10.tgz", + "integrity": "sha512-YVkhIJbis6j/zwIYVSKzBIPMhf0dLIcsM2CA2KcjbBOwPWOBMeRZES3uOQBIwn3tkTIRtlv+Mn+XsNHTl+J4Vg==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@transmute/did-key-web-crypto": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-web-crypto/-/did-key-web-crypto-0.3.0-unstable.10.tgz", + "integrity": "sha512-eq0AEjQi2lFFC1K3Hl/3nTXoLKy07McEjkXGI2xz/GO9tJNvxEZPbmC/VuwLYf61Q/mgB09qNdY8ApEIpWk3mQ==", + "license": "Apache-2.0", + "dependencies": { + "@transmute/did-key-common": "^0.3.0-unstable.10", + "@transmute/web-crypto-key-pair": "^0.7.0-unstable.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@transmute/did-key-x25519": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-x25519/-/did-key-x25519-0.3.0-unstable.10.tgz", + "integrity": "sha512-Jm5UxwI9EhlfVQ9D0Clj9RlMvhOi8nqAgQG30KMzjFMVGfWqIPwQNZFvmL+XsQ7g3dfTo5iQwXBY0de/f+RoMA==", + "license": "Apache-2.0", + "dependencies": { + "@transmute/did-key-common": "^0.3.0-unstable.10", + "@transmute/x25519-key-pair": "^0.7.0-unstable.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@transmute/did-key.js": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key.js/-/did-key.js-0.3.0-unstable.10.tgz", + "integrity": "sha512-qvuZ7SdmEb0ZqRYs9R/NMUgTUwZDsUysW+EhtQ/P/dQw0CvRmvfWOmtz1UWGT6yZKl/IDba0KtKn/Yz0GaClsQ==", + "license": "Apache-2.0", + "dependencies": { + "@transmute/did-key-bls12381": "^0.3.0-unstable.10", + "@transmute/did-key-ed25519": "^0.3.0-unstable.10", + "@transmute/did-key-secp256k1": "^0.3.0-unstable.10", + "@transmute/did-key-test-vectors": "^0.3.0-unstable.10", + "@transmute/did-key-web-crypto": "^0.3.0-unstable.10", + "@transmute/did-key-x25519": "^0.3.0-unstable.10", + "base64url": "^3.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@transmute/ed25519-key-pair": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/ed25519-key-pair/-/ed25519-key-pair-0.6.1-unstable.37.tgz", + "integrity": "sha512-l34yzE/QnQwmdk5xY9g2kD55e4XPp/jTZQzPu7I6J4Ar+bMaL/0RLL/pgvwyI7qUpsddxRf4WPZCCcZveqPcdA==", + "license": "Apache-2.0", + "dependencies": { + "@stablelib/ed25519": "^1.0.1", + "@transmute/ld-key-pair": "^0.6.1-unstable.37", + "@transmute/x25519-key-pair": "^0.6.1-unstable.37" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@transmute/ed25519-key-pair/node_modules/@transmute/ld-key-pair": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/ld-key-pair/-/ld-key-pair-0.6.1-unstable.37.tgz", + "integrity": "sha512-DcTpEruAQBfOd2laZkg3uCQ+67Y7dw2hsvo42NAQ5tItCIx5AClP7zccri7T2JUcfDUFaE32z/BLTMEKYt3XZQ==", + "license": "Apache-2.0" + }, + "node_modules/@transmute/ed25519-key-pair/node_modules/@transmute/x25519-key-pair": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/x25519-key-pair/-/x25519-key-pair-0.6.1-unstable.37.tgz", + "integrity": "sha512-j6zR9IoJmgVhUCVH8YVGpsgQf99SxPKZ00LGnUheBAQzgj2lULGBQ44G+GqBCdzfT0qweptTfp1RjqqHEpizeA==", + "license": "Apache-2.0", + "dependencies": { + "@stablelib/x25519": "^1.0.0", + "@transmute/ld-key-pair": "^0.6.1-unstable.37" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@transmute/ld-key-pair": { + "version": "0.7.0-unstable.82", + "resolved": "https://registry.npmjs.org/@transmute/ld-key-pair/-/ld-key-pair-0.7.0-unstable.82.tgz", + "integrity": "sha512-XWnVNCL1LeohldBLu7O12tc53rzdCYjZiaMrWvEH/sNpqnZBiNWAsdLWengXhF67LqAXWMwstfbCLNTPCD+EGg==", + "license": "Apache-2.0", + "engines": { + "node": ">=16" + } + }, + "node_modules/@transmute/secp256k1-key-pair": { + "version": "0.7.0-unstable.82", + "resolved": "https://registry.npmjs.org/@transmute/secp256k1-key-pair/-/secp256k1-key-pair-0.7.0-unstable.82.tgz", + "integrity": "sha512-X+txATKPpwodcr0B5TPvcsi2UnSrS3UFkrALa2ui0B1zNLj56pUVMJ0FdX9eHUKdP7t5tB9iE73Y7/8NWL6exA==", + "license": "Apache-2.0", + "dependencies": { + "@bitauth/libauth": "^1.18.1", + "@transmute/ld-key-pair": "^0.7.0-unstable.82", + "secp256k1": "^4.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@transmute/security-context": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/security-context/-/security-context-0.6.1-unstable.37.tgz", + "integrity": "sha512-GtLmG65qlORrz/2S4I74DT+vA4+qXsFxrMr0cNOXjUqZBd/AW1PTrFnryLF9907BfoiD58HC9qb1WVGWjSlBYw==", + "license": "Apache-2.0" + }, + "node_modules/@transmute/web-crypto-key-pair": { + "version": "0.7.0-unstable.82", + "resolved": "https://registry.npmjs.org/@transmute/web-crypto-key-pair/-/web-crypto-key-pair-0.7.0-unstable.82.tgz", + "integrity": "sha512-xhaFpW/jcYgmOZanBVkm034YX728ukVVPO0Bb53d5IcL5MiMSWjPDQfhOyX8+EZfa7rSNDOAi6zCsZMggtB9fg==", + "license": "Apache-2.0", + "dependencies": { + "@peculiar/webcrypto": "^1.1.6", + "@transmute/ld-key-pair": "^0.7.0-unstable.82", + "big-integer": "^1.6.48" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@transmute/x25519-key-pair": { + "version": "0.7.0-unstable.82", + "resolved": "https://registry.npmjs.org/@transmute/x25519-key-pair/-/x25519-key-pair-0.7.0-unstable.82.tgz", + "integrity": "sha512-y4lPzk/SY/Cy1dUCa17ES3kqvShNQwevTO16dvbuevu6YcTYBAdSCYvW9JL+ppFqPYI5NSDPUwT6kkd4wNWmsA==", + "license": "Apache-2.0", + "dependencies": { + "@stablelib/x25519": "^1.0.0", + "@transmute/ld-key-pair": "^0.7.0-unstable.82" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "node_modules/@typechain/ethers-v5": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", + "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/bytes": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^7.0.0", + "typescript": ">=4.0.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-4.0.0.tgz", + "integrity": "sha512-SeEKtiHu4Io3LHhE8VV3orJbsj7dwJZX8pzSTv7WQR38P18vOLm2M52GrykVinMpkLK0uVc88ICT58emvfn74w==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "hardhat": "^2.0.10", + "lodash": "^4.17.15", + "typechain": "^7.0.0" + } + }, + "node_modules/@types/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "dev": true + }, + "node_modules/@types/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.122", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.122.tgz", + "integrity": "sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/bs58": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/bs58/-/bs58-4.0.4.tgz", + "integrity": "sha512-0IEpMFXXQi2zXaXl9GJ3sRwQo0uEkD+yFOv+FnAU5lkPtcu6h61xb7jc2CFPEZ5BUOaiP13ThuGc9HD4R8lR5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "base-x": "^3.0.6" + } + }, + "node_modules/@types/bunyan": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.9.tgz", + "integrity": "sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/content-disposition": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz", + "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==", + "license": "MIT" + }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cookies": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.0.tgz", + "integrity": "sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/http-assert": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.5.tgz", + "integrity": "sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", + "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", + "dev": true, + "dependencies": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@types/jsonpath": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.4.tgz", + "integrity": "sha512-K3hxB8Blw0qgW6ExKgMbXQv2UPZBoE2GqLpVY+yr7nMD2Pq86lsuIzyAaiQ7eMqFL5B6di6pxSkogLJEyEHoGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keygrip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz", + "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==", + "license": "MIT" + }, + "node_modules/@types/koa": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.14.0.tgz", + "integrity": "sha512-DTDUyznHGNHAl+wd1n0z1jxNajduyTh8R53xoewuerdBzGo6Ogj6F2299BFtrexJw4NtgjsI5SMPCmV9gZwGXA==", + "license": "MIT", + "dependencies": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "node_modules/@types/koa__router": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@types/koa__router/-/koa__router-12.0.3.tgz", + "integrity": "sha512-5YUJVv6NwM1z7m6FuYpKfNLTZ932Z6EF6xy2BbtpJSyn13DKNQEkXVffFVSnJHxvwwWh2SAeumpjAYUELqgjyw==", + "license": "MIT", + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/koa-compose": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", + "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", + "license": "MIT", + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/level-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", + "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", + "dev": true + }, + "node_modules/@types/levelup": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", + "dev": true, + "dependencies": { + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", + "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "node_modules/@types/memcached": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", + "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "node_modules/@types/mocha": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", + "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/morgan": { + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.9.tgz", + "integrity": "sha512-iRYSDKVaC6FkGSpEVVIvrRGw0DfJMiQzIn3qr2G5B3C//AWkulhXgaBd7tS9/J79GWSYMTHGs7PfI5b3Y8m+RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mysql": { + "version": "2.15.22", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.22.tgz", + "integrity": "sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.16.tgz", + "integrity": "sha512-ydLaGVfQOQ6hI1xK2A5nVh8bl0OGoIfYMxPWHqqYe9bTkWCfqiVvZoh2I/QF2sNSkZzZyROBoTefIEI+PB6iIA==" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.4.tgz", + "integrity": "sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==", + "license": "MIT", + "dependencies": { + "@types/pg": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", + "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "dev": true + }, + "node_modules/@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/react": { + "version": "17.0.39", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.39.tgz", + "integrity": "sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", + "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/shimmer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.5.tgz", + "integrity": "sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww==", + "license": "MIT" + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/superagent": { + "version": "8.1.7", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.7.tgz", + "integrity": "sha512-NmIsd0Yj4DDhftfWvvAku482PZum4DBW7U51OvS8gvOkDDY0WT1jsVyDV3hK+vplrsYw8oDwi9QxOM7U68iwww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*" + } + }, + "node_modules/@types/supertest": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", + "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" + } + }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.2.tgz", + "integrity": "sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg==", + "dev": true, + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz", + "integrity": "sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/type-utils": "5.11.0", + "@typescript-eslint/utils": "5.11.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.11.0.tgz", + "integrity": "sha512-EPvC/bU2n1LKtzKWP1AjGWkp7r8tJ8giVlZHIODo6q7SAd6J+/9vjtEKHK2G/Qp+D2IGPsQge+oadDR3CZcFtQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.11.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.11.0.tgz", + "integrity": "sha512-x0DCjetHZYBRovJdr3U0zG9OOdNXUaFLJ82ehr1AlkArljJuwEsgnud+Q7umlGDFLFrs8tU8ybQDFocp/eX8mQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/typescript-estree": "5.11.0", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz", + "integrity": "sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/visitor-keys": "5.11.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz", + "integrity": "sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.11.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz", + "integrity": "sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz", + "integrity": "sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/visitor-keys": "5.11.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.11.0.tgz", + "integrity": "sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/typescript-estree": "5.11.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz", + "integrity": "sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.11.0", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@web3-react/abstract-connector": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@web3-react/abstract-connector/-/abstract-connector-6.0.7.tgz", + "integrity": "sha512-RhQasA4Ox8CxUC0OENc1AJJm8UTybu/oOCM61Zjg6y0iF7Z0sqv1Ai1VdhC33hrQpA8qSBgoXN9PaP8jKmtdqg==", + "dependencies": { + "@web3-react/types": "^6.0.7" + } + }, + "node_modules/@web3-react/core": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@web3-react/core/-/core-6.1.9.tgz", + "integrity": "sha512-P877DslsbAkWIlMANpWiK7pCvNwlz0kJC0EGckuVh0wlA23J4UnFxq6xyOaxkxaDCu14rA/tAO0NbwjcXTQgSA==", + "dependencies": { + "@ethersproject/keccak256": "^5.0.0-beta.130", + "@web3-react/abstract-connector": "^6.0.7", + "@web3-react/types": "^6.0.7", + "tiny-invariant": "^1.0.6", + "tiny-warning": "^1.0.3" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/@web3-react/injected-connector": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@web3-react/injected-connector/-/injected-connector-6.0.7.tgz", + "integrity": "sha512-Y7aJSz6pg+MWKtvdyuqyy6LWuH+4Tqtph1LWfiyVms9II9ar/9B/de4R8wh4wjg91wmHkU+D75yP09E/Soh2RA==", + "dependencies": { + "@web3-react/abstract-connector": "^6.0.7", + "@web3-react/types": "^6.0.7", + "tiny-warning": "^1.0.3" + } + }, + "node_modules/@web3-react/types": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@web3-react/types/-/types-6.0.7.tgz", + "integrity": "sha512-ofGmfDhxmNT1/P/MgVa8IKSkCStFiyvXe+U5tyZurKdrtTDFU+wJ/LxClPDtFerWpczNFPUSrKcuhfPX1sI6+A==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "devOptional": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abstract-leveldown": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/abstract-leveldown/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "devOptional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/anser": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz", + "integrity": "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==", + "dev": true, + "peer": true + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "devOptional": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "devOptional": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "license": "ISC", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/asn1js": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/asn1js/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, + "dependencies": { + "async": "^2.4.0" + } + }, + "node_modules/async-mutex": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz", + "integrity": "sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", + "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.19.1", + "caniuse-lite": "^1.0.30001297", + "fraction.js": "^4.1.2", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", + "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/babel-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/babel-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/babel-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", + "dev": true + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "node_modules/bfj": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", + "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "check-types": "^11.1.1", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/bigint-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", + "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "bindings": "^1.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bit-buffers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bit-buffers/-/bit-buffers-1.0.2.tgz", + "integrity": "sha512-yOK3e4MM2sis7NqecDlomBESCNjQooxCoEzHDhiEY/lrUCaivNzvYkiC/Lnx8TwcYe4tozXoV1AfQHrzflSIDw==", + "dependencies": { + "base64-js": "^1.5.1", + "pako": "^2.0.4" + } + }, + "node_modules/blakejs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz", + "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/borsh": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", + "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.2.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" + } + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/broadcast-channel": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-4.10.0.tgz", + "integrity": "sha512-hOUh312XyHk6JTVyX9cyXaH1UYs+2gHVtnW16oQAu9FL7ALcXGXc/YoJWqlkV8vUn14URQPMmRi4A9q4UrwVEQ==", + "dependencies": { + "@babel/runtime": "^7.16.0", + "detect-node": "^2.1.0", + "microseconds": "0.2.0", + "nano-time": "1.0.0", + "oblivious-set": "1.0.0", + "p-queue": "6.6.2", + "rimraf": "3.0.2", + "unload": "2.3.1" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-aes/node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "peer": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserify-zlib/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "peer": true + }, + "node_modules/browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/buffer-layout": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz", + "integrity": "sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==", + "engines": { + "node": ">=4.5" + } + }, + "node_modules/buffer-xor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true, + "peer": true + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "license": "MIT", + "optional": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/caip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/caip/-/caip-1.1.0.tgz", + "integrity": "sha512-yOO3Fu4ygyKYAdznuoaqschMKIZzcdgyMpBNtrIfrUhnOeaOWG+dh0c13wcOS6B/46IGGbncoyzJlio79jU7rw==" + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001638", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz", + "integrity": "sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "devOptional": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "license": "MIT", + "optional": true + }, + "node_modules/check-types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", + "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + }, + "node_modules/classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==", + "dev": true, + "peer": true + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "optional": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-commands": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/command-line-commands/-/command-line-commands-3.0.2.tgz", + "integrity": "sha512-ac6PdCtdR6q7S3HN+JiVLIWGHY30PRYIEl2qPo+FuEuzwAUk0UYyimrngrg7FvF/mCr4Jgoqv5ZnHZgads50rw==", + "license": "MIT", + "optional": true, + "dependencies": { + "array-back": "^4.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-commands/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC", + "optional": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true, + "peer": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.0.tgz", + "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", + "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", + "dev": true, + "dependencies": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-js-pure": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.0.tgz", + "integrity": "sha512-VaJUunCZLnxuDbo1rNOzwbet9E1K9joiXS5+DQMPtgxd24wfsZbJZMMfQLGYMlCUvSxLfsRUUhoOR2x28mFfeg==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/crc-32": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz", + "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", + "dev": true, + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.3.1" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/create-jest/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/create-jest/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/create-jest/node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/create-jest/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/create-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/create-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-jest/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-jest/node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/create-jest/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/create-jest/node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/create-jest/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/create-jest/node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/create-jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-jest/node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/create-jest/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/create-jest/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/create-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/create-jest/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/crypto-hash": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz", + "integrity": "sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/css-b64-images": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz", + "integrity": "sha512-TgQBEdP07adhrDfXvI5o6bHGukKBNMzp2Ngckc/6d09zpjD2gc1Hl3Ca1CKgb8FXjHi88+Phv2Uegs2kTL4zjg==", + "bin": { + "css-b64-images": "bin/css-b64-images" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", + "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", + "dev": true, + "dependencies": { + "timsort": "^0.3.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.6.0.tgz", + "integrity": "sha512-FK7H2lisOixPT406s5gZM1S3l8GrfhEBT3ZiL2UX1Ng1XWs0y2GPllz/OTyvbaHe12VgQrIXIzuEGVlbUhodqg==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.5", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dev": true, + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "dev": true, + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "dev": true + }, + "node_modules/cssdb": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.2.0.tgz", + "integrity": "sha512-OP1owHiK7IkCPSmNvWGMOEbfMcPZ8HA1TkzUXzB2SA708Y4pFGXWtLAVxds2QJI/0FA3mCNwRkEA9B4U4fW2Dw==", + "dev": true + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.17.tgz", + "integrity": "sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.1.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz", + "integrity": "sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^3.0.2", + "postcss-calc": "^8.2.0", + "postcss-colormin": "^5.2.5", + "postcss-convert-values": "^5.0.4", + "postcss-discard-comments": "^5.0.3", + "postcss-discard-duplicates": "^5.0.3", + "postcss-discard-empty": "^5.0.3", + "postcss-discard-overridden": "^5.0.4", + "postcss-merge-longhand": "^5.0.6", + "postcss-merge-rules": "^5.0.6", + "postcss-minify-font-values": "^5.0.4", + "postcss-minify-gradients": "^5.0.6", + "postcss-minify-params": "^5.0.5", + "postcss-minify-selectors": "^5.1.3", + "postcss-normalize-charset": "^5.0.3", + "postcss-normalize-display-values": "^5.0.3", + "postcss-normalize-positions": "^5.0.4", + "postcss-normalize-repeat-style": "^5.0.4", + "postcss-normalize-string": "^5.0.4", + "postcss-normalize-timing-functions": "^5.0.3", + "postcss-normalize-unicode": "^5.0.4", + "postcss-normalize-url": "^5.0.5", + "postcss-normalize-whitespace": "^5.0.4", + "postcss-ordered-values": "^5.0.5", + "postcss-reduce-initial": "^5.0.3", + "postcss-reduce-transforms": "^5.0.4", + "postcss-svgo": "^5.0.4", + "postcss-unique-selectors": "^5.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-simple": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-3.0.0.tgz", + "integrity": "sha512-vxQPeoMRqUT3c/9f0vWeVa2nKQIHFpogtoBvFdW4GQ3IvEJ6uauCP6p3Y5zQDLFcI7/+40FTgX12o7XUL0Ko+w==", + "dev": true, + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001202" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-simple": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-3.0.0.tgz", + "integrity": "sha512-oU3ueli5Dtwgh0DyeohcIEE00QVfbPR3HzyXdAl89SfnQG3y0/qcpfLVW+jPIh3/rgMZGwuW96rejZGaYE9eUg==", + "dev": true, + "peer": true, + "dependencies": { + "cssnano-preset-simple": "^3.0.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/cssnano-utils": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.2.tgz", + "integrity": "sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==", + "dev": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "dev": true, + "dependencies": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deferred-leveldown/node_modules/abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deferred-leveldown/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT", + "optional": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "dependencies": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/did-jwt": { + "version": "5.12.4", + "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-5.12.4.tgz", + "integrity": "sha512-rFY7yIlE/79zB648Drn9vLiM+F4+3IzRkFvBcHelZqQmnPy037U9VWeeP/f2PlnQKgW5qbYXVJR5KftLfo58TA==", + "dependencies": { + "@stablelib/ed25519": "^1.0.2", + "@stablelib/random": "^1.0.1", + "@stablelib/sha256": "^1.0.1", + "@stablelib/x25519": "^1.0.1", + "@stablelib/xchacha20poly1305": "^1.0.1", + "bech32": "^2.0.0", + "canonicalize": "^1.0.5", + "did-resolver": "^3.1.5", + "elliptic": "^6.5.4", + "js-sha3": "^0.8.0", + "multiformats": "^9.4.10", + "uint8arrays": "^3.0.0" + } + }, + "node_modules/did-jwt-vc": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/did-jwt-vc/-/did-jwt-vc-2.1.9.tgz", + "integrity": "sha512-FBgJBZkdJAGtF0fp8NPgtJmpglRc/ZQ2C1KNevHKmOLgjPrVIeJw5xL8pw0wFwoA2E+uCaXkrZrNtcLQXHG6IQ==", + "dependencies": { + "did-jwt": "^5.12.3", + "did-resolver": "^3.1.5" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/did-jwt/node_modules/bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + }, + "node_modules/did-resolver": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.5.tgz", + "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.11.tgz", + "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==", + "dev": true + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domain-browser": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz", + "integrity": "sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/eip1193-provider": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/eip1193-provider/-/eip1193-provider-1.0.1.tgz", + "integrity": "sha512-kSuqwQ26d7CzuS/t3yRXo2Su2cVH0QfvyKbr2H7Be7O5YDyIq4hQGCNTo5wRdP07bt+E2R/8nPCzey4ojBHf7g==", + "dependencies": { + "@json-rpc-tools/provider": "^1.5.5" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.812", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.812.tgz", + "integrity": "sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg==", + "dev": true, + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "devOptional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "dev": true, + "dependencies": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "devOptional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.1.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "license": "MIT", + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "devOptional": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.1.0.tgz", + "integrity": "sha512-tBhuUgoDITcdcM7xFvensi9I5WTI4dnvH4ETGRg1U8ZKpXrZsWQFdOKIDzR3RLP5HR3xXrLviaMM4c3zVoE/pA==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "12.1.0", + "@rushstack/eslint-patch": "^1.0.8", + "@typescript-eslint/parser": "^5.0.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-import-resolver-typescript": "^2.4.0", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.0", + "eslint-plugin-react-hooks": "^4.3.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "next": ">=10.2.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.0.tgz", + "integrity": "sha512-xyymoxtIt1EOsSaGag+/jmcywRuieQoA2JbPCjnw9HukFj9/97aGPoZVFioaotzk1K5Qt9sHO5EutZbkrAXS0g==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", + "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.1", + "glob": "^7.1.7", + "is-glob": "^4.0.1", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.9.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/eslint-plugin-react": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", + "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.0.5.tgz", + "integrity": "sha512-0j355vJpJCE/2g+aayIgJRUB6jBVqpD5ztMLGcadR1PgrgGPnPxN1HJuOAsAAwiMo27GwRnpJB8KOQzyNuNZrw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^5.10.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", + "dev": true, + "dependencies": { + "@types/eslint": "^7.28.2", + "jest-worker": "^27.3.1", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eth-rpc-errors": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", + "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } + }, + "node_modules/eth-sig-util": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.4.tgz", + "integrity": "sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A==", + "deprecated": "Deprecated in favor of '@metamask/eth-sig-util'", + "dev": true, + "dependencies": { + "ethereumjs-abi": "0.6.8", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.0" + } + }, + "node_modules/eth-sig-util/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/eth-sig-util/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereum": { + "resolved": "packages/ethereum", + "link": true + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereum-dapp": { + "resolved": "packages/ethereum-dapp", + "link": true + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz", + "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethereumjs-util/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethers": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.4.tgz", + "integrity": "sha512-N9IAXsF8iKhgHIC6pquzRgPBJEzc9auw3JoRkaKe+y4Wl/LFBtDDunNe7YmdomontECAcC5APaAgWZBiu1kirw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.5.0", + "@ethersproject/abstract-provider": "5.5.1", + "@ethersproject/abstract-signer": "5.5.0", + "@ethersproject/address": "5.5.0", + "@ethersproject/base64": "5.5.0", + "@ethersproject/basex": "5.5.0", + "@ethersproject/bignumber": "5.5.0", + "@ethersproject/bytes": "5.5.0", + "@ethersproject/constants": "5.5.0", + "@ethersproject/contracts": "5.5.0", + "@ethersproject/hash": "5.5.0", + "@ethersproject/hdnode": "5.5.0", + "@ethersproject/json-wallets": "5.5.0", + "@ethersproject/keccak256": "5.5.0", + "@ethersproject/logger": "5.5.0", + "@ethersproject/networks": "5.5.2", + "@ethersproject/pbkdf2": "5.5.0", + "@ethersproject/properties": "5.5.0", + "@ethersproject/providers": "5.5.3", + "@ethersproject/random": "5.5.1", + "@ethersproject/rlp": "5.5.0", + "@ethersproject/sha2": "5.5.0", + "@ethersproject/signing-key": "5.5.0", + "@ethersproject/solidity": "5.5.0", + "@ethersproject/strings": "5.5.0", + "@ethersproject/transactions": "5.5.0", + "@ethersproject/units": "5.5.0", + "@ethersproject/wallet": "5.5.0", + "@ethersproject/web": "5.5.1", + "@ethersproject/wordlists": "5.5.0" + } + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/examples": { + "resolved": "packages/examples", + "link": true + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-async-handler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/express-async-handler/-/express-async-handler-1.2.0.tgz", + "integrity": "sha512-rCSVtPXRmQSW8rmik/AIb2P0op6l7r1fMW538yyvTMltCO4xQEWMmobfrIxN2V1/mVrgxB8Az3reYF6yUZw37w==" + }, + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/express/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "license": "MIT", + "optional": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "engines": { + "node": "> 0.1.90" + } + }, + "node_modules/factory.ts": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/factory.ts/-/factory.ts-0.5.2.tgz", + "integrity": "sha512-I4YDKuyMW+s2PocnWh/Ekv9wSStt/MNN1ZRb1qhy0Kv056ndlzbLHDsW9KEmTAqMpLI3BtjSqEdZ7ZfdnaXn9w==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "source-map-support": "^0.5.19" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fast-stable-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", + "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==", + "license": "MIT" + }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", + "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", + "license": "MIT", + "engines": { + "node": "^10.17.0 || >=12.3.0" + }, + "peerDependenciesMeta": { + "domexception": { + "optional": true + } + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", + "integrity": "sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==", + "dependencies": { + "traverse-chain": "~0.1.0" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/follow-redirects": { + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "node_modules/fraction.js": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.3.tgz", + "integrity": "sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "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", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gaxios": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.0.tgz", + "integrity": "sha512-DSrkyMTfAnAm4ks9Go20QGOcXEyW/NmZhvTYBU2rb4afBB393WIMQPWPEDMl/k8xqiNN9HYq2zao3oWXsdl2Tg==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9", + "uuid": "^10.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gaxios/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/gaxios/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/gaxios/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/gaxios/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/gaxios/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-orientation": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz", + "integrity": "sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==", + "dev": true, + "peer": true, + "dependencies": { + "stream-parser": "^0.3.1" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/git-config": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/git-config/-/git-config-0.0.7.tgz", + "integrity": "sha512-LidZlYZXWzVjS+M3TEwhtYBaYwLeOZrXci1tBgqp/vDdZTBMl02atvwb6G35L64ibscYoPnxfbwwUS+VZAISLA==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "iniparser": "~1.0.5" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/hardhat": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.8.3.tgz", + "integrity": "sha512-VxqiVTSayRoeLHly8zKnlvtWoG8sroTP4vl8GHuj7OjfAdrHu4Blk7NBJ5+Rl8cmMEp6CuZtDaDmcHJIRTwEPA==", + "dev": true, + "dependencies": { + "@ethereumjs/block": "^3.6.0", + "@ethereumjs/blockchain": "^5.5.0", + "@ethereumjs/common": "^2.6.0", + "@ethereumjs/tx": "^3.4.0", + "@ethereumjs/vm": "^5.6.0", + "@ethersproject/abi": "^5.1.2", + "@sentry/node": "^5.18.1", + "@solidity-parser/parser": "^0.14.0", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "abort-controller": "^3.0.0", + "adm-zip": "^0.4.16", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "eth-sig-util": "^2.5.2", + "ethereum-cryptography": "^0.1.2", + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^7.1.3", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "^7.1.3", + "https-proxy-agent": "^5.0.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "lodash": "^4.17.11", + "merkle-patricia-tree": "^4.2.2", + "mnemonist": "^0.38.0", + "mocha": "^7.2.0", + "node-fetch": "^2.6.0", + "qs": "^6.7.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "slash": "^3.0.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "true-case-path": "^2.2.1", + "tsort": "0.0.1", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/cli.js" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/hardhat/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "devOptional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC", + "optional": true + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/helmet": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.1.0.tgz", + "integrity": "sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/hot-shots": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-10.0.0.tgz", + "integrity": "sha512-uy/uGpuJk7yuyiKRfZMBNkF1GAOX5O2ifO9rDCaX9jw8fu6eW9QeWC7WRPDI+O98frW1HQgV3+xwjWsZPECIzQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "unix-dgram": "2.x" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", + "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true, + "peer": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "devOptional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", + "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==", + "dev": true + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", + "dev": true, + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "node_modules/image-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", + "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", + "dev": true, + "peer": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true + }, + "node_modules/immer": { + "version": "9.0.12", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz", + "integrity": "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-in-the-middle": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.8.1.tgz", + "integrity": "sha512-yhRwoHtiLGvmSozNOALgjRPFI6uYsds60EoMqqnXyyv+JOIW/BrrLejuTGBt+bq0T5tLzOHrN0T7xYTm4Qt/ng==", + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.8.2", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/iniparser": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/iniparser/-/iniparser-1.0.5.tgz", + "integrity": "sha512-i40MWqgTU6h/70NtMsDVVDLjDYWwcIR1yIEVDPfxZIJno9z9L4s83p/V7vAu2i48Vj0gpByrkGFub7ko9XvPrw==", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "optional": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "devOptional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", + "dev": true, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jayson": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz", + "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==", + "license": "MIT", + "dependencies": { + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "JSONStream": "^1.3.5", + "uuid": "^8.3.2", + "ws": "^7.4.5" + }, + "bin": { + "jayson": "bin/jayson.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jayson/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "license": "MIT" + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.0.0.tgz", + "integrity": "sha512-jxoszalAb394WElmiJTFBMzie/RDCF+W7Q29n5LzOPtcoQoHWfdUtHFkbhgf5NwWe8uMOxvKb/g7ea7CshfkTw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^27.0.0", + "jest-watcher": "^27.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/char-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.0.tgz", + "integrity": "sha512-oGu2QekBMXgyQNWPDRQ001bjvDnZe4/zBTz37TMbiKz1NbNiyiH5hRkobe7npRN6GfbGbxMYFck/vQ1r9c1VMA==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watch-typeahead/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" + }, + "node_modules/jose": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.5.0.tgz", + "integrity": "sha512-GFcVFQwYQKbQTUOo2JlpFGXTkgBw26uzDsRMD2q1WgSKNSnpKS9Ug7bdQ8dS+p4sZHNH6iRPu6WK2jLIjspaMA==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-rpc-random-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", + "integrity": "sha1-uknZat7RRE27jaPSA3SKy7zeyMg=" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonld": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-5.2.0.tgz", + "integrity": "sha512-JymgT6Xzk5CHEmHuEyvoTNviEPxv6ihLWSPu1gFdtjSAyM6cFqNrv02yS/SIur3BBIkCf0HjizRc24d8/FfQKw==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^1.1.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsonld-checker": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/jsonld-checker/-/jsonld-checker-0.1.8.tgz", + "integrity": "sha512-jclmnPRrm5SEpaIV6IiSTJxplRAqIWHduQLsUfrYpZM41Ng48m1RN2/aUyHze/ynfO0D2UhlJBt8SdObsH5GBw==", + "license": "MIT", + "dependencies": { + "jsonld": "^5.2.0", + "node-fetch": "^2.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonld/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", + "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keyvaluestorage-interface": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz", + "integrity": "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/ky": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", + "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/ky-universal": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", + "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "node-fetch": "3.0.0-beta.9" + }, + "engines": { + "node": ">=10.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.17.0", + "web-streams-polyfill": ">=2.0.0" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } + } + }, + "node_modules/ky-universal/node_modules/node-fetch": { + "version": "3.0.0-beta.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", + "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^2.1.1" + }, + "engines": { + "node": "^10.17 || >=12.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-codec/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, + "dependencies": { + "errno": "~0.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-mem": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", + "dev": true, + "dependencies": { + "level-packager": "^5.0.3", + "memdown": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "dev": true, + "dependencies": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "dependencies": { + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-ws": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "dev": true, + "dependencies": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logform": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", + "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/loglevel": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "license": "Apache-2.0" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", + "dev": true + }, + "node_modules/lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "devOptional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/make-promises-safe": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/make-promises-safe/-/make-promises-safe-5.1.0.tgz", + "integrity": "sha512-AfdZ49rtyhQR/6cqVKGoH7y4ql7XkS5HJI1lZm0/5N6CQosy1eYbBJ/qbhkKHzo17UH7M918Bysf6XB9f3kS1g==", + "license": "MIT", + "optional": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "dev": true, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "dev": true, + "dependencies": { + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/memdown/node_modules/abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/memdown/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/memdown/node_modules/immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=", + "dev": true + }, + "node_modules/memfs": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", + "dev": true, + "dependencies": { + "fs-monkey": "1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/merkle-patricia-tree": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.3.tgz", + "integrity": "sha512-S4xevdXl5KvdBGgUxhQcxoep0onqXiIhzfwZp4M78kIuJH3Pu9o9IUgqhzSFOR2ykLO6t265026Xb6PY0q2UFQ==", + "dev": true, + "dependencies": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/microseconds": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", + "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==" + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz", + "integrity": "sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minify": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/minify/-/minify-11.2.1.tgz", + "integrity": "sha512-ltd2Q1CoZBq8rFf51GfRprDgROKNjasl4rEaWxXUU1cMjHAdnMX2fg81AR3UMJXrU0OAi91O5YSQeWv5aKxxsA==", + "license": "MIT", + "dependencies": { + "@putout/minify": "^4.0.0", + "clean-css": "^5.0.1", + "css-b64-images": "~0.2.5", + "debug": "^4.1.0", + "find-up": "^7.0.0", + "html-minifier-terser": "^7.1.0", + "readjson": "^2.2.2", + "simport": "^1.2.0", + "terser": "^5.28.1", + "try-catch": "^3.0.0", + "try-to-catch": "^3.0.0" + }, + "bin": { + "minify": "bin/minify.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/minify/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/minify/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/minify/node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "license": "MIT", + "dependencies": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minify/node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/minify/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minify/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minify/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minify/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/minify/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "devOptional": true + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "optional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.1" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/mocha/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/mocha/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/mocha/node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mocha/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/mocha/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==", + "license": "MIT" + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multibase": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", + "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", + "deprecated": "This module has been superseded by the multiformats module", + "license": "MIT", + "dependencies": { + "@multiformats/base-x": "^4.0.1" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/multiformats": { + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.3.tgz", + "integrity": "sha512-yfXKI66fL0nFzt0nJl26i4wV1qAqbAEIBvfFbkbsne9GrLz6IHvHUoRyxUtlJcdP181ssOgjama6E/VSk4pbrA==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC", + "optional": true + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, + "node_modules/nano-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", + "integrity": "sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8=", + "dependencies": { + "big-integer": "^1.6.16" + } + }, + "node_modules/nanoid": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "devOptional": true + }, + "node_modules/neon-cli": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/neon-cli/-/neon-cli-0.10.1.tgz", + "integrity": "sha512-kOd9ELaYETe1J1nBEOYD7koAZVj6xR9TGwOPccAsWmwL5amkaXXXwXHCUHkBAWujlgSZY5f2pT+pFGkzoHExYQ==", + "license": "SEE LICENSE IN LICENSE-*", + "optional": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-commands": "^3.0.1", + "command-line-usage": "^6.1.0", + "git-config": "0.0.7", + "handlebars": "^4.7.6", + "inquirer": "^7.3.3", + "make-promises-safe": "^5.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "toml": "^3.0.0", + "ts-typed-json": "^0.3.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "bin": { + "neon": "bin/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/neon-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/neon-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/neon-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/neon-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "optional": true + }, + "node_modules/neon-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/neon-cli/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/neon-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/next": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/next/-/next-12.0.7.tgz", + "integrity": "sha512-sKO8GJJYfuk9c+q+zHSNumvff+wP7ufmOlwT6BuzwiYfFJ61VTTkfTcDLSJ+95ErQJiC54uS4Yg5JEE8H6jXRA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/runtime": "7.15.4", + "@hapi/accept": "5.0.2", + "@napi-rs/triples": "1.0.3", + "@next/env": "12.0.7", + "@next/polyfill-module": "12.0.7", + "@next/react-dev-overlay": "12.0.7", + "@next/react-refresh-utils": "12.0.7", + "acorn": "8.5.0", + "assert": "2.0.0", + "browserify-zlib": "0.2.0", + "browserslist": "4.16.6", + "buffer": "5.6.0", + "caniuse-lite": "^1.0.30001228", + "chalk": "2.4.2", + "chokidar": "3.5.1", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "cssnano-simple": "3.0.0", + "domain-browser": "4.19.0", + "encoding": "0.1.13", + "etag": "1.8.1", + "events": "3.3.0", + "find-cache-dir": "3.3.1", + "get-orientation": "1.1.2", + "https-browserify": "1.0.0", + "image-size": "1.0.0", + "jest-worker": "27.0.0-next.5", + "node-fetch": "2.6.1", + "node-html-parser": "1.4.9", + "os-browserify": "0.3.0", + "p-limit": "3.1.0", + "path-browserify": "1.0.1", + "postcss": "8.2.15", + "process": "0.11.10", + "querystring-es3": "0.2.1", + "raw-body": "2.4.1", + "react-is": "17.0.2", + "react-refresh": "0.8.3", + "regenerator-runtime": "0.13.4", + "stream-browserify": "3.0.0", + "stream-http": "3.1.1", + "string_decoder": "1.3.0", + "styled-jsx": "5.0.0-beta.3", + "timers-browserify": "2.0.12", + "tty-browserify": "0.0.1", + "use-subscription": "1.5.1", + "util": "0.12.4", + "vm-browserify": "1.1.2", + "watchpack": "2.3.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=12.22.0" + }, + "optionalDependencies": { + "@next/swc-android-arm64": "12.0.7", + "@next/swc-darwin-arm64": "12.0.7", + "@next/swc-darwin-x64": "12.0.7", + "@next/swc-linux-arm-gnueabihf": "12.0.7", + "@next/swc-linux-arm64-gnu": "12.0.7", + "@next/swc-linux-arm64-musl": "12.0.7", + "@next/swc-linux-x64-gnu": "12.0.7", + "@next/swc-linux-x64-musl": "12.0.7", + "@next/swc-win32-arm64-msvc": "12.0.7", + "@next/swc-win32-ia32-msvc": "12.0.7", + "@next/swc-win32-x64-msvc": "12.0.7" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", + "react": "^17.0.2 || ^18.0.0-0", + "react-dom": "^17.0.2 || ^18.0.0-0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dev": true, + "peer": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/next/node_modules/@next/react-refresh-utils": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-12.0.7.tgz", + "integrity": "sha512-Pglj1t+7RxH0txEqVcD8ZxrJgqLDmKvQDqxKq3ZPRWxMv7LTl7FVT2Pnb36QFeBwCvMVl67jxsADKsW0idz8sA==", + "dev": true, + "peer": true, + "peerDependencies": { + "react-refresh": "0.8.3", + "webpack": "^4 || ^5" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/next/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/next/node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/next/node_modules/buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "peer": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/next/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/next/node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "peer": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/next/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "peer": true + }, + "node_modules/next/node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "peer": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/next/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/next/node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "peer": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next/node_modules/jest-worker": { + "version": "27.0.0-next.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.0-next.5.tgz", + "integrity": "sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/next/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true, + "peer": true, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/next/node_modules/node-releases": { + "version": "1.1.77", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", + "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==", + "dev": true, + "peer": true + }, + "node_modules/next/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.2.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", + "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", + "dev": true, + "peer": true, + "dependencies": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map": "^0.6.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/next/node_modules/raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "peer": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/next/node_modules/react-refresh": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", + "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/next/node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "peer": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/next/node_modules/regenerator-runtime": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz", + "integrity": "sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g==", + "dev": true, + "peer": true + }, + "node_modules/next/node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true, + "peer": true + }, + "node_modules/next/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/next/node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/next/node_modules/watchpack": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", + "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/nock": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.4.tgz", + "integrity": "sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", + "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-html-parser": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz", + "integrity": "sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==", + "dev": true, + "peer": true, + "dependencies": { + "he": "1.2.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nodemon": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", + "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.1.tgz", + "integrity": "sha512-XnkiCrrBcIZQitJPAI36mrrpEUvatbte8hLcTcQwKA1v9NkCKasSi+UAguLsLDs/out7MoRzAlmz7VXvY6ph6w==", + "dev": true + }, + "node_modules/oblivious-set": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", + "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==" + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "devOptional": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true, + "peer": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "dev": true, + "dependencies": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "peer": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/pg": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.6.4", + "pg-pool": "^3.6.2", + "pg-protocol": "^1.6.1", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", + "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", + "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", + "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkh-did-resolver": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkh-did-resolver/-/pkh-did-resolver-2.0.0.tgz", + "integrity": "sha512-OspfuI99LxLQ02/+tynJjQYEVmagSxKZIZQwv+54SNYWYQSI2dSZGOQmN2l3a2IptUj7AZ8Z7WzZPu+XY4siXQ==", + "license": "(Apache-2.0 OR MIT)", + "dependencies": { + "caip": "~1.1.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "dev": true, + "peer": true + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", + "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", + "dev": true, + "dependencies": { + "nanoid": "^3.2.0", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz", + "integrity": "sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.2" + }, + "peerDependencies": { + "postcss": "^8.0.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-3.0.0.tgz", + "integrity": "sha512-QENQMIF/Grw0qX0RzSPJjw+mAiGPIwG2AnsQDIoR/WJ5Q19zLB0NrZX8cH7CzzdDWEerTPGCdep7ItFaAdtItg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.5" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz", + "integrity": "sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.3.tgz", + "integrity": "sha512-fESawWJCrBV035DcbKRPAVmy21LpoyiXdPTuHUfWJ14ZRjY7Y7PA6P4g8z6LQGYhU1WAxkTxjIjurXzoe68Glw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", + "integrity": "sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-colormin": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.5.tgz", + "integrity": "sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz", + "integrity": "sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz", + "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.4.tgz", + "integrity": "sha512-i6AytuTCoDLJkWN/MtAIGriJz3j7UX6bV7Z5t+KgFz+dwZS15/mlTJY1S0kRizlk6ba0V8u8hN50Fz5Nm7tdZw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz", + "integrity": "sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.2" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", + "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz", + "integrity": "sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz", + "integrity": "sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz", + "integrity": "sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz", + "integrity": "sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.0.5.tgz", + "integrity": "sha512-XiZzvdxLOWZwtt/1GgHJYGoD9scog/DD/yI5dcvPrXNdNDEv7T53/6tL7ikl+EM3jcerII5/XIQzd1UHOdTi2w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.5.tgz", + "integrity": "sha512-gPUJc71ji9XKyl0WSzAalBeEA/89kU+XpffpPxSaaaZ1c48OL36r1Ep5R6+9XAPkIiDlSvVAwP4io12q/vTcvA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "dev": true, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", + "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", + "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.0.4.tgz", + "integrity": "sha512-TAEW8X/ahMYV33mvLFQARtBPAy1VVJsiR9VVx3Pcbu+zlqQj0EIyJ/Ie1/EwxwIt530CWtEDzzTXBDzfdb+qIQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", + "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.4", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz", + "integrity": "sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.0.3" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz", + "integrity": "sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.0.2", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz", + "integrity": "sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz", + "integrity": "sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz", + "integrity": "sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz", + "integrity": "sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.6" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.2.tgz", + "integrity": "sha512-dJGmgmsvpzKoVMtDMQQG/T6FSqs6kDtUDirIfl4KnjMCiY9/ETX8jdKyCd20swSRAbUYkaBKV20pxkzxoOXLqQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.8" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "dev": true, + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz", + "integrity": "sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz", + "integrity": "sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz", + "integrity": "sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz", + "integrity": "sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz", + "integrity": "sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz", + "integrity": "sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz", + "integrity": "sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz", + "integrity": "sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url/node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz", + "integrity": "sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", + "dev": true, + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^12 || ^14 || >=16" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz", + "integrity": "sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", + "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", + "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.3.1.tgz", + "integrity": "sha512-x7fNsJxfkY60P4FUNwhJUOfXBFfnObd2EcUYY97sXZ0XRLgmAE65es9EFIYHq1rAk7X3LMfbG+L9wYgkrNsq5Q==", + "dev": true, + "dependencies": { + "@csstools/postcss-font-format-keywords": "^1.0.0", + "@csstools/postcss-hwb-function": "^1.0.0", + "@csstools/postcss-is-pseudo-class": "^2.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.0", + "autoprefixer": "^10.4.2", + "browserslist": "^4.19.1", + "css-blank-pseudo": "^3.0.2", + "css-has-pseudo": "^3.0.3", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^6.1.0", + "postcss-attribute-case-insensitive": "^5.0.0", + "postcss-clamp": "^3.0.0", + "postcss-color-functional-notation": "^4.2.1", + "postcss-color-hex-alpha": "^8.0.2", + "postcss-color-rebeccapurple": "^7.0.2", + "postcss-custom-media": "^8.0.0", + "postcss-custom-properties": "^12.1.4", + "postcss-custom-selectors": "^6.0.0", + "postcss-dir-pseudo-class": "^6.0.3", + "postcss-double-position-gradients": "^3.0.4", + "postcss-env-function": "^4.0.4", + "postcss-focus-visible": "^6.0.3", + "postcss-focus-within": "^5.0.3", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.2", + "postcss-image-set-function": "^4.0.5", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.0.3", + "postcss-logical": "^5.0.3", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.1.2", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.2", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.3", + "postcss-pseudo-class-any-link": "^7.1.0", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^5.0.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.1.tgz", + "integrity": "sha512-JRoLFvPEX/1YTPxRxp1JO4WxBVXJYrSY7NHeak5LImwJ+VobFMwYDQHvfTXEpcn+7fYIeGkC29zYFhFWIZD8fg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz", + "integrity": "sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz", + "integrity": "sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "dev": true, + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", + "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.4.tgz", + "integrity": "sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz", + "integrity": "sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==", + "dev": true, + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/prisma": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.16.1.tgz", + "integrity": "sha512-Z1Uqodk44diztImxALgJJfNl2Uisl9xDRvqybMKEBYJLNKNhDfAHf+ZIJbZyYiBhLMbKU9cYGdDVG5IIXEnL2Q==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/engines": "5.16.1" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/protobufjs": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", + "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/pvtsutils": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", + "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.1" + } + }, + "node_modules/pvtsutils/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "peer": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "dev": true, + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-app-rewired": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-2.2.1.tgz", + "integrity": "sha512-uFQWTErXeLDrMzOJHKp0h8P1z0LV9HzPGsJ6adOtGlA/B9WfT6Shh4j2tLTTGlXOfiVx6w6iWpp7SOC5pvk+gA==", + "dev": true, + "dependencies": { + "semver": "^5.6.0" + }, + "bin": { + "react-app-rewired": "bin/index.js" + }, + "peerDependencies": { + "react-scripts": ">=2.1.3" + } + }, + "node_modules/react-app-rewired/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz", + "integrity": "sha512-xBQkitdxozPxt1YZ9O1097EJiVpwHr9FoAuEVURCKV0Av8NBERovJauzP7bo1ThvuhZ4shsQ1AJiu4vQpoT1AQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.10", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/react-dev-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/react-dev-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/react-dev-utils/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dev-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.10.tgz", + "integrity": "sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA==", + "dev": true + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-scripts": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz", + "integrity": "sha512-3i0L2CyIlROz7mxETEdfif6Sfhh9Lfpzi10CtcGs1emDQStmZfWjJbAIMtRD0opVUjQuFWqHZyRZ9PPzKCFxWg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.0", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.0", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/react-scripts/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-scripts/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-scripts/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/react-scripts/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-scripts/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-scripts/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/readjson/-/readjson-2.2.2.tgz", + "integrity": "sha512-PdeC9tsmLWBiL8vMhJvocq+OezQ3HhsH2HrN7YkhfYcTjQSa/iraB15A7Qvt7Xpr0Yd2rDNt6GbFwVQDg3HcAw==", + "dependencies": { + "jju": "^1.4.0", + "try-catch": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dev": true, + "dependencies": { + "minimatch": "3.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-in-the-middle": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.3.0.tgz", + "integrity": "sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "optional": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfc4648": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.2.tgz", + "integrity": "sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg==", + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/rollup": { + "version": "2.67.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.1.tgz", + "integrity": "sha512-1Sbcs4OuW+aD+hhqpIRl+RqooIpF6uQcfzU/QSI7vGkwADY6cM4iLsBGRM2CGLXDTDN5y/yShohFmnKegSPWzg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rpc-websockets": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.0.2.tgz", + "integrity": "sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==", + "license": "LGPL-3.0-only", + "dependencies": { + "@swc/helpers": "^0.5.11", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.2.2", + "buffer": "^6.0.3", + "eventemitter3": "^5.0.1", + "uuid": "^8.3.2", + "ws": "^8.5.0" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/kozjak" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/rpc-websockets/node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "license": "MIT" + }, + "node_modules/rpc-websockets/node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rpc-websockets/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/rpc-websockets/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-json-utils": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/safe-json-utils/-/safe-json-utils-1.1.1.tgz", + "integrity": "sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==" + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", + "dev": true + }, + "node_modules/sass-loader": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", + "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", + "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", + "dev": true, + "dependencies": { + "node-forge": "^1.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semaphore-async-await": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo=", + "dev": true, + "engines": { + "node": ">=4.1" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "devOptional": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "devOptional": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "node_modules/shx": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", + "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", + "dev": true, + "dependencies": { + "minimist": "^1.2.3", + "shelljs": "^0.8.5" + }, + "bin": { + "shx": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/simport/-/simport-1.2.0.tgz", + "integrity": "sha512-85Bm7pKsqiiQ8rmYCaPDdlXZjJvuW6/k/FY8MTtLFMgU7f8S00CgTHfRtWB6KwSb6ek4p9YyG2enG1+yJbl+CA==", + "dependencies": { + "readjson": "^2.2.0", + "try-to-catch": "^3.0.0" + }, + "engines": { + "node": ">=12.2" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/solana": { + "resolved": "packages/solana", + "link": true + }, + "node_modules/solana-dapp": { + "resolved": "packages/solana-dapp", + "link": true + }, + "node_modules/solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dev": true, + "dependencies": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/solc/node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + }, + "node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solc/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", + "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "devOptional": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "devOptional": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "devOptional": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "devOptional": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "dev": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-http": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", + "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", + "dev": true, + "peer": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "dev": true, + "peer": true, + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "peer": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true, + "peer": true + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "dev": true + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "devOptional": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "devOptional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "devOptional": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "dev": true, + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "license": "MIT" + }, + "node_modules/style-loader": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/styled-jsx": { + "version": "5.0.0-beta.3", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0-beta.3.tgz", + "integrity": "sha512-HtDDGSFPvmjHIqWf9n8Oo54tAoY/DTplvlyOH2+YOtD80Sp31Ap8ffSmxhgk5EkUoJ7xepdXMGT650mSffWuRA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "7.14.5", + "@babel/types": "7.15.0", + "convert-source-map": "1.7.0", + "loader-utils": "1.2.3", + "source-map": "0.7.3", + "string-hash": "1.1.3", + "stylis": "3.5.4", + "stylis-rule-sheet": "0.0.10" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || 18.x.x" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/styled-jsx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/styled-jsx/node_modules/@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/styled-jsx/node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/styled-jsx/node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/styled-jsx/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/styled-jsx/node_modules/loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "peer": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/styled-jsx/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + }, + "node_modules/styled-jsx/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stylehacks": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.3.tgz", + "integrity": "sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/stylis": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", + "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==", + "dev": true, + "peer": true + }, + "node_modules/stylis-rule-sheet": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", + "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", + "dev": true, + "peer": true, + "peerDependencies": { + "stylis": "^3.5.0" + } + }, + "node_modules/superagent": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^3.5.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/superagent/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superstruct": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", + "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/supertest": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", + "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^9.0.1" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "devOptional": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/svgo/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwindcss": { + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.19.tgz", + "integrity": "sha512-rjsdfz/qZya5xQ0OVynEMETgWq1CacmftgMYeXXh6bRM5vxsNwRSbMJsCCIjq/w67om9VP/AFMolOwiE+5VKig==", + "dev": true, + "dependencies": { + "arg": "^5.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "cosmiconfig": "^7.0.1", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "autoprefixer": "^10.0.2", + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tailwindcss/node_modules/arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "dev": true + }, + "node_modules/tailwindcss/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tailwindcss/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tailwindcss/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwindcss/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "optional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.31.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", + "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "dev": true, + "dependencies": { + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "peer": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "node_modules/tiny-invariant": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", + "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "devOptional": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/traverse-chain": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", + "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=" + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "dev": true + }, + "node_modules/try-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-catch/-/try-catch-3.0.1.tgz", + "integrity": "sha512-91yfXw1rr/P6oLpHSyHDOHm0vloVvUoo9FVdw8YwY05QjJQG9OT0LUxe2VRAzmHG+0CUOmI3nhxDUMLxDN/NEQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/try-to-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.1.tgz", + "integrity": "sha512-hOY83V84Hx/1sCzDSaJA+Xz2IIQOHRvjxzt+F0OjbQGPZ6yLPLArMA0gw/484MlfUkQbCpKYMLX3VDCAjWKfzQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-command-line-args": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.2.1.tgz", + "integrity": "sha512-mnK68QA86FYzQYTSA/rxIjT/8EpKsvQw9QkawPic8I8t0gjAOw3Oa509NIRoaY1FmH7hdrncMp7t7o+vYoceNQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-command-line-args/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-command-line-args/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-command-line-args/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-command-line-args/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-command-line-args/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-command-line-args/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ts-typed-json": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ts-typed-json/-/ts-typed-json-0.3.2.tgz", + "integrity": "sha512-Tdu3BWzaer7R5RvBIJcg9r8HrTZgpJmsX+1meXMJzYypbkj8NK2oJN0yvm4Dp/Iv6tzFa/L5jKRmEVTga6K3nA==", + "license": "MIT", + "optional": true + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "license": "0BSD" + }, + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y=", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true, + "peer": true + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "devOptional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typechain": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-7.0.0.tgz", + "integrity": "sha512-ILfvBBFJ7j9aIk0crX03+N2GmzoDN1gtk32G1+XrasjuvXS0XAw2XxwQeQMMgKwlnxViJjIkG87sTMYXPkXA9g==", + "dev": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.0", + "glob": "^7.1.6", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.1.2", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.1.0" + } + }, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/uglify-js": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uint8arrays": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "license": "MIT", + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unix-dgram": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.4.tgz", + "integrity": "sha512-7tpK6x7ls7J7pDrrAU63h93R0dVhRbPwiRRCawR10cl+2e1VOvF3bHlVJc6WI1dl/8qk5He673QU+Ogv7bPNaw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "bindings": "^1.3.0", + "nan": "^2.13.2" + }, + "engines": { + "node": ">=0.10.48" + } + }, + "node_modules/unload": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unload/-/unload-2.3.1.tgz", + "integrity": "sha512-MUZEiDqvAN9AIDRbbBnVYVvfcR6DrjCqeU2YQMmliFZl9uaBUjTkhuDQkBiyAy8ad5bx1TXVbqZ3gg7namsWjA==", + "dependencies": { + "@babel/runtime": "^7.6.2", + "detect-node": "2.1.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-subscription": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", + "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", + "dependencies": { + "object-assign": "^4.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", + "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "devOptional": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "license": "ISC", + "optional": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verifier": { + "resolved": "packages/verifier", + "link": true + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true, + "peer": true + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-did-resolver": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.27.tgz", + "integrity": "sha512-YxQlNdeYBXLhVpMW62+TPlc6sSOiWyBYq7DNvY6FXmXOD9g0zLeShpq2uCKFFQV/WlSrBi/yebK/W5lMTDxMUQ==", + "license": "Apache-2.0", + "dependencies": { + "cross-fetch": "^4.0.0", + "did-resolver": "^4.0.0" + } + }, + "node_modules/web-did-resolver/node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/web-did-resolver/node_modules/did-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", + "license": "Apache-2.0" + }, + "node_modules/web-did-resolver/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/web-did-resolver/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/web-did-resolver/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/web-did-resolver/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + }, + "node_modules/webcrypto-core": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.0.tgz", + "integrity": "sha512-kR1UQNH8MD42CYuLzvibfakG5Ew5seG85dMMoAM/1LqvckxaF6pUiidLuraIu4V+YCIFabYecUZAW0TuxAoaqw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "asn1js": "^3.0.1", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" + } + }, + "node_modules/webcrypto-core/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.68.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.68.0.tgz", + "integrity": "sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", + "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.1", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz", + "integrity": "sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/@types/ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "dev": true, + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "devOptional": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/winston": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz", + "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.7.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", + "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "license": "MIT", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston/node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT", + "optional": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.4.2.tgz", + "integrity": "sha512-P7c8uG5X2k+DMICH9xeSA9eUlCOjHHYoB42Rq+RtUpuwBxUOflAXR1zdsMWj81LopE4gjKXlTw7BFd1BDAHo7g==", + "dev": true, + "dependencies": { + "idb": "^6.1.4", + "workbox-core": "6.4.2" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.4.2.tgz", + "integrity": "sha512-qnBwQyE0+PWFFc/n4ISXINE49m44gbEreJUYt2ldGH3+CNrLmJ1egJOOyUqqu9R4Eb7QrXcmB34ClXG7S37LbA==", + "dev": true, + "dependencies": { + "workbox-core": "6.4.2" + } + }, + "node_modules/workbox-build": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.4.2.tgz", + "integrity": "sha512-WMdYLhDIsuzViOTXDH+tJ1GijkFp5khSYolnxR/11zmfhNDtuo7jof72xPGFy+KRpsz6tug39RhivCj77qqO0w==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "source-map-url": "^0.4.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.4.2", + "workbox-broadcast-update": "6.4.2", + "workbox-cacheable-response": "6.4.2", + "workbox-core": "6.4.2", + "workbox-expiration": "6.4.2", + "workbox-google-analytics": "6.4.2", + "workbox-navigation-preload": "6.4.2", + "workbox-precaching": "6.4.2", + "workbox-range-requests": "6.4.2", + "workbox-recipes": "6.4.2", + "workbox-routing": "6.4.2", + "workbox-strategies": "6.4.2", + "workbox-streams": "6.4.2", + "workbox-sw": "6.4.2", + "workbox-window": "6.4.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.4.2.tgz", + "integrity": "sha512-9FE1W/cKffk1AJzImxgEN0ceWpyz1tqNjZVtA3/LAvYL3AC5SbIkhc7ZCO82WmO9IjTfu8Vut2X/C7ViMSF7TA==", + "dev": true, + "dependencies": { + "workbox-core": "6.4.2" + } + }, + "node_modules/workbox-core": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.4.2.tgz", + "integrity": "sha512-1U6cdEYPcajRXiboSlpJx6U7TvhIKbxRRerfepAJu2hniKwJ3DHILjpU/zx3yvzSBCWcNJDoFalf7Vgd7ey/rw==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.4.2.tgz", + "integrity": "sha512-0hbpBj0tDnW+DZOUmwZqntB/8xrXOgO34i7s00Si/VlFJvvpRKg1leXdHHU8ykoSBd6+F2KDcMP3swoCi5guLw==", + "dev": true, + "dependencies": { + "idb": "^6.1.4", + "workbox-core": "6.4.2" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.4.2.tgz", + "integrity": "sha512-u+gxs3jXovPb1oul4CTBOb+T9fS1oZG+ZE6AzS7l40vnyfJV79DaLBvlpEZfXGv3CjMdV1sT/ltdOrKzo7HcGw==", + "dev": true, + "dependencies": { + "workbox-background-sync": "6.4.2", + "workbox-core": "6.4.2", + "workbox-routing": "6.4.2", + "workbox-strategies": "6.4.2" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.4.2.tgz", + "integrity": "sha512-viyejlCtlKsbJCBHwhSBbWc57MwPXvUrc8P7d+87AxBGPU+JuWkT6nvBANgVgFz6FUhCvRC8aYt+B1helo166g==", + "dev": true, + "dependencies": { + "workbox-core": "6.4.2" + } + }, + "node_modules/workbox-precaching": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.4.2.tgz", + "integrity": "sha512-CZ6uwFN/2wb4noHVlALL7UqPFbLfez/9S2GAzGAb0Sk876ul9ukRKPJJ6gtsxfE2HSTwqwuyNVa6xWyeyJ1XSA==", + "dev": true, + "dependencies": { + "workbox-core": "6.4.2", + "workbox-routing": "6.4.2", + "workbox-strategies": "6.4.2" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.4.2.tgz", + "integrity": "sha512-SowF3z69hr3Po/w7+xarWfzxJX/3Fo0uSG72Zg4g5FWWnHpq2zPvgbWerBZIa81zpJVUdYpMa3akJJsv+LaO1Q==", + "dev": true, + "dependencies": { + "workbox-core": "6.4.2" + } + }, + "node_modules/workbox-recipes": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.4.2.tgz", + "integrity": "sha512-/oVxlZFpAjFVbY+3PoGEXe8qyvtmqMrTdWhbOfbwokNFtUZ/JCtanDKgwDv9x3AebqGAoJRvQNSru0F4nG+gWA==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "6.4.2", + "workbox-core": "6.4.2", + "workbox-expiration": "6.4.2", + "workbox-precaching": "6.4.2", + "workbox-routing": "6.4.2", + "workbox-strategies": "6.4.2" + } + }, + "node_modules/workbox-routing": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.4.2.tgz", + "integrity": "sha512-0ss/n9PAcHjTy4Ad7l2puuod4WtsnRYu9BrmHcu6Dk4PgWeJo1t5VnGufPxNtcuyPGQ3OdnMdlmhMJ57sSrrSw==", + "dev": true, + "dependencies": { + "workbox-core": "6.4.2" + } + }, + "node_modules/workbox-strategies": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.4.2.tgz", + "integrity": "sha512-YXh9E9dZGEO1EiPC3jPe2CbztO5WT8Ruj8wiYZM56XqEJp5YlGTtqRjghV+JovWOqkWdR+amJpV31KPWQUvn1Q==", + "dev": true, + "dependencies": { + "workbox-core": "6.4.2" + } + }, + "node_modules/workbox-streams": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.4.2.tgz", + "integrity": "sha512-ROEGlZHGVEgpa5bOZefiJEVsi5PsFjJG9Xd+wnDbApsCO9xq9rYFopF+IRq9tChyYzhBnyk2hJxbQVWphz3sog==", + "dev": true, + "dependencies": { + "workbox-core": "6.4.2", + "workbox-routing": "6.4.2" + } + }, + "node_modules/workbox-sw": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.4.2.tgz", + "integrity": "sha512-A2qdu9TLktfIM5NE/8+yYwfWu+JgDaCkbo5ikrky2c7r9v2X6DcJ+zSLphNHHLwM/0eVk5XVf1mC5HGhYpMhhg==", + "dev": true + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.4.2.tgz", + "integrity": "sha512-CiEwM6kaJRkx1cP5xHksn13abTzUqMHiMMlp5Eh/v4wRcedgDTyv6Uo8+Hg9MurRbHDosO5suaPyF9uwVr4/CQ==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "source-map-url": "^0.4.0", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.4.2" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.4.2.tgz", + "integrity": "sha512-KVyRKmrJg7iB+uym/B/CnEUEFG9CvnTU1Bq5xpXHbtgD9l+ShDekSl1wYpqw/O0JfeeQVOFb8CiNfvnwWwqnWQ==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.4.2" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/yargs-unparser/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/yargs-unparser/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs-unparser/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/ethereum": { + "version": "1.0.0", + "devDependencies": { + "@babel/preset-typescript": "^7.16.7", + "@nomiclabs/hardhat-ethers": "^2.0.4", + "@openzeppelin/contracts": "^4.4.2", + "@typechain/ethers-v5": "^9.0.0", + "@typechain/hardhat": "^4.0.0", + "@types/jest": "^27.4.0", + "@types/node": "^17.0.16", + "dotenv": "^16.0.0", + "eslint": "^8.4.0", + "eslint-config-prettier": "^8.3.0", + "eslint-import-resolver-typescript": "^2.5.0", + "eslint-plugin-import": "^2.25.3", + "ethers": "^5.5.4", + "hardhat": "^2.8.2", + "jest": "^27.5.0", + "prettier": "^2.5.1", + "ts-node": "^10.5.0", + "typechain": "^7.0.0", + "typescript": "^4.5.5", + "verifier": "*" + } + }, + "packages/ethereum-dapp": { + "version": "0.8.2", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/providers": "^5.5.3", + "@web3-react/core": "^6.1.9", + "@web3-react/injected-connector": "^6.0.7", + "next": "12.1.0", + "react": "17.0.2", + "react-dom": "17.0.2" + }, + "devDependencies": { + "@types/node": "17.0.8", + "@types/react": "^17.0.0", + "@types/react-dom": "^17.0.0", + "eslint": "^8.6.0", + "eslint-config-next": "^12.0.7", + "shx": "^0.3.3", + "typescript": "~4.4.4" + } + }, + "packages/ethereum-dapp/node_modules/@next/env": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.1.0.tgz", + "integrity": "sha512-nrIgY6t17FQ9xxwH3jj0a6EOiQ/WDHUos35Hghtr+SWN/ntHIQ7UpuvSi0vaLzZVHQWaDupKI+liO5vANcDeTQ==" + }, + "packages/ethereum-dapp/node_modules/@next/swc-android-arm64": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.0.tgz", + "integrity": "sha512-/280MLdZe0W03stA69iL+v6I+J1ascrQ6FrXBlXGCsGzrfMaGr7fskMa0T5AhQIVQD4nA/46QQWxG//DYuFBcA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/ethereum-dapp/node_modules/@next/swc-darwin-arm64": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.0.tgz", + "integrity": "sha512-R8vcXE2/iONJ1Unf5Ptqjk6LRW3bggH+8drNkkzH4FLEQkHtELhvcmJwkXcuipyQCsIakldAXhRbZmm3YN1vXg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/ethereum-dapp/node_modules/@next/swc-darwin-x64": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.0.tgz", + "integrity": "sha512-ieAz0/J0PhmbZBB8+EA/JGdhRHBogF8BWaeqR7hwveb6SYEIJaDNQy0I+ZN8gF8hLj63bEDxJAs/cEhdnTq+ug==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/ethereum-dapp/node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.0.tgz", + "integrity": "sha512-njUd9hpl6o6A5d08dC0cKAgXKCzm5fFtgGe6i0eko8IAdtAPbtHxtpre3VeSxdZvuGFh+hb0REySQP9T1ttkog==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/ethereum-dapp/node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.0.tgz", + "integrity": "sha512-OqangJLkRxVxMhDtcb7Qn1xjzFA3s50EIxY7mljbSCLybU+sByPaWAHY4px97ieOlr2y4S0xdPKkQ3BCAwyo6Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/ethereum-dapp/node_modules/@next/swc-linux-arm64-musl": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.0.tgz", + "integrity": "sha512-hB8cLSt4GdmOpcwRe2UzI5UWn6HHO/vLkr5OTuNvCJ5xGDwpPXelVkYW/0+C3g5axbDW2Tym4S+MQCkkH9QfWA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/ethereum-dapp/node_modules/@next/swc-linux-x64-gnu": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.0.tgz", + "integrity": "sha512-OKO4R/digvrVuweSw/uBM4nSdyzsBV5EwkUeeG4KVpkIZEe64ZwRpnFB65bC6hGwxIBnTv5NMSnJ+0K/WmG78A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/ethereum-dapp/node_modules/@next/swc-linux-x64-musl": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.0.tgz", + "integrity": "sha512-JohhgAHZvOD3rQY7tlp7NlmvtvYHBYgY0x5ZCecUT6eCCcl9lv6iV3nfu82ErkxNk1H893fqH0FUpznZ/H3pSw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/ethereum-dapp/node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.0.tgz", + "integrity": "sha512-T/3gIE6QEfKIJ4dmJk75v9hhNiYZhQYAoYm4iVo1TgcsuaKLFa+zMPh4056AHiG6n9tn2UQ1CFE8EoybEsqsSw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/ethereum-dapp/node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.0.tgz", + "integrity": "sha512-iwnKgHJdqhIW19H9PRPM9j55V6RdcOo6rX+5imx832BCWzkDbyomWnlzBfr6ByUYfhohb8QuH4hSGEikpPqI0Q==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/ethereum-dapp/node_modules/@next/swc-win32-x64-msvc": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.0.tgz", + "integrity": "sha512-aBvcbMwuanDH4EMrL2TthNJy+4nP59Bimn8egqv6GHMVj0a44cU6Au4PjOhLNqEh9l+IpRGBqMTzec94UdC5xg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/ethereum-dapp/node_modules/@types/node": { + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", + "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", + "dev": true + }, + "packages/ethereum-dapp/node_modules/next": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/next/-/next-12.1.0.tgz", + "integrity": "sha512-s885kWvnIlxsUFHq9UGyIyLiuD0G3BUC/xrH0CEnH5lHEWkwQcHOORgbDF0hbrW9vr/7am4ETfX4A7M6DjrE7Q==", + "dependencies": { + "@next/env": "12.1.0", + "caniuse-lite": "^1.0.30001283", + "postcss": "8.4.5", + "styled-jsx": "5.0.0", + "use-subscription": "1.5.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=12.22.0" + }, + "optionalDependencies": { + "@next/swc-android-arm64": "12.1.0", + "@next/swc-darwin-arm64": "12.1.0", + "@next/swc-darwin-x64": "12.1.0", + "@next/swc-linux-arm-gnueabihf": "12.1.0", + "@next/swc-linux-arm64-gnu": "12.1.0", + "@next/swc-linux-arm64-musl": "12.1.0", + "@next/swc-linux-x64-gnu": "12.1.0", + "@next/swc-linux-x64-musl": "12.1.0", + "@next/swc-win32-arm64-msvc": "12.1.0", + "@next/swc-win32-ia32-msvc": "12.1.0", + "@next/swc-win32-x64-msvc": "12.1.0" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^6.0.0 || ^7.0.0", + "react": "^17.0.2 || ^18.0.0-0", + "react-dom": "^17.0.2 || ^18.0.0-0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "packages/ethereum-dapp/node_modules/postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "dependencies": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "packages/ethereum-dapp/node_modules/styled-jsx": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0.tgz", + "integrity": "sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA==", + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || 18.x.x" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "packages/ethereum-dapp/node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "packages/ethereum-dapp2": { + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "@ethersproject/providers": "*", + "@types/node": "17.0.8", + "@types/react": "^17.0.0", + "@types/react-dom": "^17.0.0", + "@web3-react/core": "*", + "@web3-react/injected-connector": "*", + "eslint": "^8.6.0", + "eslint-config-next": "^12.0.7", + "next": "12.0.7", + "react": "17.0.2", + "react-dom": "17.0.2", + "shx": "^0.3.3", + "typescript": "~4.4.4" + } + }, + "packages/examples": { + "version": "1.0.0", + "dependencies": { + "cross-fetch": "^3.1.4", + "jose": "^4.4.0", + "verifier": "*" + }, + "devDependencies": { + "@types/node": "^16.11.11", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "eslint": "^8.4.0", + "eslint-config-prettier": "^8.3.0", + "eslint-import-resolver-typescript": "^2.5.0", + "eslint-plugin-import": "^2.25.3", + "prettier": "^2.5.1", + "ts-node": "^10.4.0", + "typescript": "^4.5.2" + } + }, + "packages/examples/node_modules/@types/node": { + "version": "16.11.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", + "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==", + "dev": true + }, + "packages/solana": { + "dependencies": { + "@project-serum/anchor": "^0.20.1" + }, + "devDependencies": { + "@babel/core": "^7.17.0", + "@babel/preset-env": "^7.16.11", + "@babel/preset-typescript": "^7.16.7", + "@types/jest": "^27.4.0", + "ethers": "^5.5.4", + "jest": "^27.5.0", + "typescript": "^4.3.5" + } + }, + "packages/solana-dapp": { + "version": "0.1.0", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/wallet-adapter-react": "^0.15.3", + "@solana/wallet-adapter-react-ui": "^0.9.5", + "@solana/wallet-adapter-wallets": "^0.15.3", + "@solana/web3.js": "^1.33.0", + "crypto-browserify": "^3.12.0", + "did-jwt-vc": "^2.1.9", + "ethers": "^5.5.4", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "web-vitals": "^2.1.4" + }, + "devDependencies": { + "@testing-library/jest-dom": "^5.16.2", + "@testing-library/react": "^12.1.2", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.22", + "@types/react": "^17.0.39", + "@types/react-dom": "^17.0.11", + "process": "^0.11.10", + "react-app-rewired": "^2.1.11", + "react-scripts": "5.0.0", + "source-map-loader": "^3.0.1", + "typescript": "^4.5.5" + } + }, + "packages/solana-dapp/node_modules/@types/node": { + "version": "16.11.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", + "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==", + "dev": true + }, + "packages/verifier": { + "version": "1.0.0", + "dependencies": { + "@aws-sdk/client-ssm": "^3.603.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.47.1", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "^0.52.1", + "@opentelemetry/instrumentation": "^0.52.1", + "@opentelemetry/resources": "^1.25.1", + "@opentelemetry/sdk-node": "^0.52.1", + "@opentelemetry/semantic-conventions": "^1.25.1", + "@opentelemetry/tracing": "^0.24.0", + "@prisma/client": "^5.16.1", + "@prisma/instrumentation": "^5.16.1", + "@project-serum/borsh": "^0.2.5", + "@solana/web3.js": "^1.93.3", + "@transmute/did-key.js": "^0.3.0-unstable.10", + "@types/node-fetch": "^2.6.11", + "ajv": "^8.16.0", + "bit-buffers": "^1.0.2", + "bn.js": "^5.2.1", + "body-parser": "^1.20.2", + "cors": "^2.8.5", + "cross-fetch": "^4.0.0", + "did-jwt": "^8.0.4", + "did-jwt-vc": "^4.0.4", + "did-resolver": "^4.1.0", + "ejs": "^3.1.10", + "ethers": "^6.13.1", + "express": "^4.19.2", + "express-async-handler": "^1.2.0", + "helmet": "^7.1.0", + "hot-shots": "^10.0.0", + "js-sha3": "^0.9.3", + "jsonpath": "^1.1.1", + "lodash": "^4.17.21", + "minify": "^11.2.1", + "morgan": "^1.10.0", + "pg": "^8.12.0", + "pkh-did-resolver": "^2.0.0", + "secp256k1": "^5.0.0", + "uuid": "^10.0.0", + "web-did-resolver": "^2.0.27", + "winston": "^3.13.0" + }, + "devDependencies": { + "@types/bs58": "^4.0.4", + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/jest": "^29.5.12", + "@types/jsonpath": "^0.2.4", + "@types/lodash": "^4.17.6", + "@types/mocha": "^10.0.7", + "@types/morgan": "^1.9.9", + "@types/node": "^20.14.9", + "@types/supertest": "^6.0.2", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^7.14.1", + "@typescript-eslint/parser": "^7.14.1", + "bs58": "^6.0.0", + "dotenv": "^16.4.5", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.1", + "jest": "^29.7.0", + "nock": "^13.5.4", + "nodemon": "^3.1.4", + "npm-run-all": "^4.1.5", + "prettier": "^3.3.2", + "prisma": "^5.16.1", + "regenerator-runtime": "^0.14.1", + "supertest": "^7.0.0", + "ts-jest": "^29.1.5", + "ts-node": "^10.9.2", + "typescript": "^5.5.2" + } + }, + "packages/verifier/node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "packages/verifier/node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "packages/verifier/node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/verifier/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/verifier/node_modules/@opentelemetry/auto-instrumentations-node": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.47.1.tgz", + "integrity": "sha512-W7Iz4SZhj6z5iqYTu4zZXr2woP/zD4dA6zFAz9PQEx21/SGn6+y6plcJTA08KnPVMbRff60D1IBdl547TyGy9A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-amqplib": "^0.38.0", + "@opentelemetry/instrumentation-aws-lambda": "^0.42.0", + "@opentelemetry/instrumentation-aws-sdk": "^0.42.0", + "@opentelemetry/instrumentation-bunyan": "^0.39.0", + "@opentelemetry/instrumentation-cassandra-driver": "^0.39.0", + "@opentelemetry/instrumentation-connect": "^0.37.0", + "@opentelemetry/instrumentation-cucumber": "^0.7.0", + "@opentelemetry/instrumentation-dataloader": "^0.10.0", + "@opentelemetry/instrumentation-dns": "^0.37.0", + "@opentelemetry/instrumentation-express": "^0.40.1", + "@opentelemetry/instrumentation-fastify": "^0.37.0", + "@opentelemetry/instrumentation-fs": "^0.13.0", + "@opentelemetry/instrumentation-generic-pool": "^0.37.0", + "@opentelemetry/instrumentation-graphql": "^0.41.0", + "@opentelemetry/instrumentation-grpc": "^0.52.0", + "@opentelemetry/instrumentation-hapi": "^0.39.0", + "@opentelemetry/instrumentation-http": "^0.52.0", + "@opentelemetry/instrumentation-ioredis": "^0.41.0", + "@opentelemetry/instrumentation-knex": "^0.37.0", + "@opentelemetry/instrumentation-koa": "^0.41.0", + "@opentelemetry/instrumentation-lru-memoizer": "^0.38.0", + "@opentelemetry/instrumentation-memcached": "^0.37.0", + "@opentelemetry/instrumentation-mongodb": "^0.45.0", + "@opentelemetry/instrumentation-mongoose": "^0.39.0", + "@opentelemetry/instrumentation-mysql": "^0.39.0", + "@opentelemetry/instrumentation-mysql2": "^0.39.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.38.0", + "@opentelemetry/instrumentation-net": "^0.37.0", + "@opentelemetry/instrumentation-pg": "^0.42.0", + "@opentelemetry/instrumentation-pino": "^0.40.0", + "@opentelemetry/instrumentation-redis": "^0.40.0", + "@opentelemetry/instrumentation-redis-4": "^0.40.0", + "@opentelemetry/instrumentation-restify": "^0.39.0", + "@opentelemetry/instrumentation-router": "^0.38.0", + "@opentelemetry/instrumentation-socket.io": "^0.40.0", + "@opentelemetry/instrumentation-tedious": "^0.11.0", + "@opentelemetry/instrumentation-undici": "^0.3.0", + "@opentelemetry/instrumentation-winston": "^0.38.0", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.28.10", + "@opentelemetry/resource-detector-aws": "^1.5.1", + "@opentelemetry/resource-detector-azure": "^0.2.9", + "@opentelemetry/resource-detector-container": "^0.3.11", + "@opentelemetry/resource-detector-gcp": "^0.29.10", + "@opentelemetry/resources": "^1.24.0", + "@opentelemetry/sdk-node": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.4.1" + } + }, + "packages/verifier/node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "packages/verifier/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "packages/verifier/node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "packages/verifier/node_modules/@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "packages/verifier/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "packages/verifier/node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz", + "integrity": "sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/type-utils": "7.14.1", + "@typescript-eslint/utils": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/verifier/node_modules/@typescript-eslint/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/verifier/node_modules/@typescript-eslint/scope-manager": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz", + "integrity": "sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/verifier/node_modules/@typescript-eslint/type-utils": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz", + "integrity": "sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/utils": "7.14.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/verifier/node_modules/@typescript-eslint/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.14.1.tgz", + "integrity": "sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/verifier/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz", + "integrity": "sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/verifier/node_modules/@typescript-eslint/utils": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.14.1.tgz", + "integrity": "sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "packages/verifier/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz", + "integrity": "sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.14.1", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/verifier/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" + }, + "packages/verifier/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/verifier/node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "packages/verifier/node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "packages/verifier/node_modules/base-x": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.0.tgz", + "integrity": "sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==", + "dev": true, + "license": "MIT" + }, + "packages/verifier/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "packages/verifier/node_modules/bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "base-x": "^5.0.0" + } + }, + "packages/verifier/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/verifier/node_modules/canonicalize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.0.0.tgz", + "integrity": "sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==", + "license": "Apache-2.0" + }, + "packages/verifier/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/verifier/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/verifier/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "packages/verifier/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "packages/verifier/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "packages/verifier/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "packages/verifier/node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "packages/verifier/node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "packages/verifier/node_modules/did-jwt": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-8.0.4.tgz", + "integrity": "sha512-KPtG7H+8GgKGMiDqFvOdNy5BBN3hpA+8xV7VygEnpst5oPIqjvcH3rTtnPF55a8bOxIzE2PudKGIXIQhekv7WA==", + "license": "Apache-2.0", + "dependencies": { + "@noble/ciphers": "^0.5.0", + "@noble/curves": "^1.0.0", + "@noble/hashes": "^1.3.0", + "@scure/base": "^1.1.3", + "canonicalize": "^2.0.0", + "did-resolver": "^4.1.0", + "multibase": "^4.0.6", + "multiformats": "^9.6.2", + "uint8arrays": "3.1.1" + } + }, + "packages/verifier/node_modules/did-jwt-vc": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/did-jwt-vc/-/did-jwt-vc-4.0.4.tgz", + "integrity": "sha512-O/VSW+pux25+bERGQ1Z+LNv8z8gIy++yL8yjspxNZHCLjdmCelZz3hjuIpHlixhBCFP2YyTOQqGg8QeIMRwN9Q==", + "license": "ISC", + "dependencies": { + "did-jwt": "^8.0.0", + "did-resolver": "^4.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "packages/verifier/node_modules/did-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", + "license": "Apache-2.0" + }, + "packages/verifier/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "packages/verifier/node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "packages/verifier/node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "license": "ISC", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "packages/verifier/node_modules/ethers": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.1.tgz", + "integrity": "sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/verifier/node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", + "license": "MIT" + }, + "packages/verifier/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/verifier/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/verifier/node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "packages/verifier/node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "packages/verifier/node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "packages/verifier/node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "packages/verifier/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "packages/verifier/node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "packages/verifier/node_modules/js-sha3": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.9.3.tgz", + "integrity": "sha512-BcJPCQeLg6WjEx3FE591wVAevlli8lxsxm9/FzV4HXkV49TmBH38Yvrpce6fjbADGMKFrBMGTqrVz3qPIZ88Gg==", + "license": "MIT" + }, + "packages/verifier/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/verifier/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" + }, + "packages/verifier/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "packages/verifier/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/verifier/node_modules/prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "packages/verifier/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/verifier/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/verifier/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "packages/verifier/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "packages/verifier/node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "packages/verifier/node_modules/secp256k1": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", + "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/verifier/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/verifier/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "packages/verifier/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/verifier/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/verifier/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "packages/verifier/node_modules/ts-jest": { + "version": "29.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", + "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "packages/verifier/node_modules/typescript": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "packages/verifier/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "packages/verifier/node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "packages/verifier/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "packages/verifier/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "packages/verifier/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "packages/verifier/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "packages/verifier/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "packages/verifier/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + } + }, + "dependencies": { + "@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + }, + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@apideck/better-ajv-errors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.2.tgz", + "integrity": "sha512-JdEazx7qiVqTBzzBl5rolRwl5cmhihjfIcpqRzIZjtT6b18liVmDn/VlWpqW4C/qP2hrFFMLRV1wlex8ZVBPTg==", + "dev": true, + "requires": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + } + }, + "@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "requires": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "requires": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "requires": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "requires": { + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "requires": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "requires": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/client-ssm": { + "version": "3.603.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.603.0.tgz", + "integrity": "sha512-KyHp8mxIFUDeAkjSiPzfDTFcrP3WSjQeNUYBTG76cowkmYZgc0QqVfgQwjOt3rQvmkG8R7M/vmDIwLTh1xx/7A==", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } + } + }, + "@aws-sdk/client-sso": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz", + "integrity": "sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw==", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz", + "integrity": "sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/client-sts": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz", + "integrity": "sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/core": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.598.0.tgz", + "integrity": "sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g==", + "requires": { + "@smithy/core": "^2.2.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/signature-v4": "^3.1.0", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz", + "integrity": "sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/credential-provider-http": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz", + "integrity": "sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/util-stream": "^3.0.2", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz", + "integrity": "sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA==", + "requires": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz", + "integrity": "sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==", + "requires": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-ini": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz", + "integrity": "sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz", + "integrity": "sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA==", + "requires": { + "@aws-sdk/client-sso": "3.598.0", + "@aws-sdk/token-providers": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz", + "integrity": "sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz", + "integrity": "sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz", + "integrity": "sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz", + "integrity": "sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz", + "integrity": "sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/region-config-resolver": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz", + "integrity": "sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.1", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/token-providers": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz", + "integrity": "sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/types": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.598.0.tgz", + "integrity": "sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ==", + "requires": { + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/util-endpoints": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz", + "integrity": "sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", + "@smithy/util-endpoints": "^2.0.2", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/util-locate-window": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "requires": { + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz", + "integrity": "sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz", + "integrity": "sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A==", + "requires": { + "@aws-sdk/types": "3.598.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "dev": true + }, + "@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + } + } + }, + "@babel/eslint-parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz", + "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==", + "dev": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dev": true, + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "@babel/parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", + "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", + "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.1", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.0", + "charcodes": "^0.2.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", + "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", + "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz", + "integrity": "sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", + "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz", + "integrity": "sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-flow": "^7.16.7" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.16.7.tgz", + "integrity": "sha512-lF+cfsyTgwWkcw715J88JhMYJ5GpysYNLhLP1PkvkhTRN7B3e74R/1KsDxFxhRpSn0UUD3IWM4GvdBR2PEbbQQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", + "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", + "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-typescript": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/preset-env": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + } + }, + "@babel/preset-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", + "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.16.7" + } + }, + "@babel/runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "requires": { + "regenerator-runtime": "^0.14.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + } + } + }, + "@babel/runtime-corejs3": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.2.tgz", + "integrity": "sha512-NcKtr2epxfIrNM4VOmPKO46TvDMCBhgi2CrSHaEarrz+Plk2K5r9QemmOFTGpZaoKnWoGH5MO+CzeRsih/Fcgg==", + "dev": true, + "requires": { + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@bitauth/libauth": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@bitauth/libauth/-/libauth-1.19.1.tgz", + "integrity": "sha512-R524tD5VwOt3QRHr7N518nqTVR/HKgfWL4LypekcGuNQN8R4PWScvuRcRzrY39A28kLztMv+TJdiKuMNbkU1ug==" + }, + "@blocto/sdk": { + "version": "0.2.21", + "resolved": "https://registry.npmjs.org/@blocto/sdk/-/sdk-0.2.21.tgz", + "integrity": "sha512-yolSah+bYEZGzbBYr0GuQ2Pca1h95aF/btDJvcEyranosyR27kokvRKiPTX4Sost+giAD+Z6vrD8/hM6E+LnUw==", + "requires": { + "@solana/web3.js": "^1.30.2", + "bs58": "^4.0.1", + "buffer": "^6.0.3", + "eip1193-provider": "^1.0.1", + "js-sha3": "^0.8.0" + } + }, + "@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@csstools/normalize.css": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", + "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", + "dev": true + }, + "@csstools/postcss-font-format-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz", + "integrity": "sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-hwb-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.0.tgz", + "integrity": "sha512-VSTd7hGjmde4rTj1rR30sokY3ONJph1reCBTUXqeW1fKwETPy1x4t/XIeaaqbMbC5Xg4SM/lyXZ2S8NELT2TaA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-is-pseudo-class": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.0.tgz", + "integrity": "sha512-WnfZlyuh/CW4oS530HBbrKq0G8BKl/bsNr5NMFoubBFzJfvFRGJhplCgIJYWUidLuL3WJ/zhMtDIyNFTqhx63Q==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "@csstools/postcss-normalize-display-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz", + "integrity": "sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "@did-core/data-model": { + "version": "0.1.1-unstable.15", + "resolved": "https://registry.npmjs.org/@did-core/data-model/-/data-model-0.1.1-unstable.15.tgz", + "integrity": "sha512-l7gxLxegcXW7389G+j6o+S24lS8uasmJx5txWpW3QadNvOawKwvWn8bV59SdHSK806xNzIZaCLKmXKxebs8yAQ==", + "requires": { + "factory.ts": "^0.5.1" + } + }, + "@did-core/did-ld-json": { + "version": "0.1.1-unstable.15", + "resolved": "https://registry.npmjs.org/@did-core/did-ld-json/-/did-ld-json-0.1.1-unstable.15.tgz", + "integrity": "sha512-p2jKRxSU+eJJqd+ewCklYp/XZ6ysISk8VU2/kANCoB/WwUy/kVgw2rUNScRDXw2utr9Qj36P8EZTYi4aj7vRCQ==", + "requires": { + "@transmute/did-context": "^0.6.1-unstable.25", + "jsonld-checker": "^0.1.6" + } + }, + "@digitalbazaar/http-client": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-1.2.0.tgz", + "integrity": "sha512-W9KQQ5pUJcaR0I4c2HPJC0a7kRbZApIorZgPnEDwMBgj16iQzutGLrCXYaZOmxqVLVNqqlQ4aUJh+HBQZy4W6Q==", + "requires": { + "esm": "^3.2.22", + "ky": "^0.25.1", + "ky-universal": "^0.8.2" + } + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true + }, + "@ethereumjs/block": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.1.tgz", + "integrity": "sha512-o5d/zpGl4SdVfdTfrsq9ZgYMXddc0ucKMiFW5OphBCX+ep4xzYnSjboFcZXT2V/tcSBr84VrKWWp21CGVb3DGw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.1", + "@ethereumjs/tx": "^3.5.0", + "ethereumjs-util": "^7.1.4", + "merkle-patricia-tree": "^4.2.3" + } + }, + "@ethereumjs/blockchain": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.1.tgz", + "integrity": "sha512-JS2jeKxl3tlaa5oXrZ8mGoVBCz6YqsGG350XVNtHAtNZXKk7pU3rH4xzF2ru42fksMMqzFLzKh9l4EQzmNWDqA==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.0", + "@ethereumjs/common": "^2.6.0", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^2.2.0", + "ethereumjs-util": "^7.1.3", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "@ethereumjs/common": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.2.tgz", + "integrity": "sha512-vDwye5v0SVeuDky4MtKsu+ogkH2oFUV8pBKzH/eNBzT8oI91pKa8WyzDuYuxOQsgNgv5R34LfFDh2aaw3H4HbQ==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.4" + } + }, + "@ethereumjs/ethash": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" + } + }, + "@ethereumjs/tx": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.0.tgz", + "integrity": "sha512-/+ZNbnJhQhXC83Xuvy6I9k4jT5sXiV0tMR9C+AzSSpcCV64+NB8dTE1m3x98RYMqb8+TLYWA+HML4F5lfXTlJw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.1", + "ethereumjs-util": "^7.1.4" + } + }, + "@ethereumjs/vm": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.7.1.tgz", + "integrity": "sha512-NiFm5FMaeDGZ9ojBL+Y9Y/xhW6S4Fgez+zPBM402T5kLsfeAR9mrRVckYhvkGVJ6FMwsY820CLjYP5OVwMjLTg==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.1", + "@ethereumjs/blockchain": "^5.5.1", + "@ethereumjs/common": "^2.6.2", + "@ethereumjs/tx": "^3.5.0", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.4", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.3", + "rustbn.js": "~0.2.0" + } + }, + "@ethersproject/abi": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", + "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", + "requires": { + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz", + "integrity": "sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==", + "requires": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/networks": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/web": "^5.5.0" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz", + "integrity": "sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==", + "requires": { + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0" + } + }, + "@ethersproject/address": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz", + "integrity": "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==", + "requires": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/rlp": "^5.5.0" + } + }, + "@ethersproject/base64": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.5.0.tgz", + "integrity": "sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==", + "requires": { + "@ethersproject/bytes": "^5.5.0" + } + }, + "@ethersproject/basex": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz", + "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/properties": "^5.5.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz", + "integrity": "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "bn.js": "^4.11.9" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "@ethersproject/bytes": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz", + "integrity": "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==", + "requires": { + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/constants": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.5.0.tgz", + "integrity": "sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==", + "requires": { + "@ethersproject/bignumber": "^5.5.0" + } + }, + "@ethersproject/contracts": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz", + "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==", + "requires": { + "@ethersproject/abi": "^5.5.0", + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/transactions": "^5.5.0" + } + }, + "@ethersproject/hash": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz", + "integrity": "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==", + "requires": { + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "@ethersproject/hdnode": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz", + "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==", + "requires": { + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/basex": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/pbkdf2": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/wordlists": "^5.5.0" + } + }, + "@ethersproject/json-wallets": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz", + "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==", + "requires": { + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hdnode": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/pbkdf2": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz", + "integrity": "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz", + "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==" + }, + "@ethersproject/networks": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.2.tgz", + "integrity": "sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ==", + "requires": { + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz", + "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/sha2": "^5.5.0" + } + }, + "@ethersproject/properties": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz", + "integrity": "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==", + "requires": { + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/providers": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.3.tgz", + "integrity": "sha512-ZHXxXXXWHuwCQKrgdpIkbzMNJMvs+9YWemanwp1fA7XZEv7QlilseysPvQe0D7Q7DlkJX/w/bGA1MdgK2TbGvA==", + "requires": { + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/basex": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/networks": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/rlp": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/web": "^5.5.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/random": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.1.tgz", + "integrity": "sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/rlp": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.5.0.tgz", + "integrity": "sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/sha2": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz", + "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.5.0.tgz", + "integrity": "sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "@ethersproject/solidity": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz", + "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==", + "requires": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "@ethersproject/strings": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz", + "integrity": "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/transactions": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.5.0.tgz", + "integrity": "sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==", + "requires": { + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/rlp": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0" + } + }, + "@ethersproject/units": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz", + "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==", + "requires": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/wallet": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz", + "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==", + "requires": { + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/hdnode": "^5.5.0", + "@ethersproject/json-wallets": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/wordlists": "^5.5.0" + } + }, + "@ethersproject/web": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.1.tgz", + "integrity": "sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg==", + "requires": { + "@ethersproject/base64": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "@ethersproject/wordlists": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz", + "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "@grpc/grpc-js": { + "version": "1.10.10", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.10.tgz", + "integrity": "sha512-HPa/K5NX6ahMoeBv15njAc/sfF4/jmiXLar9UlC2UfHFKZzsCVLc3wbe7+7qua7w9VPh2/L6EBxyAV7/E8Wftg==", + "requires": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + } + }, + "@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "requires": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } + }, + "@hapi/accept": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.2.tgz", + "integrity": "sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw==", + "dev": true, + "peer": true, + "requires": { + "@hapi/boom": "9.x.x", + "@hapi/hoek": "9.x.x" + } + }, + "@hapi/boom": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", + "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", + "dev": true, + "peer": true, + "requires": { + "@hapi/hoek": "9.x.x" + } + }, + "@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", + "dev": true, + "peer": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "requires": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "dependencies": { + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, + "expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true + }, + "jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } + } + }, + "@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3" + }, + "dependencies": { + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true + } + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==" + }, + "@json-rpc-tools/provider": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@json-rpc-tools/provider/-/provider-1.7.6.tgz", + "integrity": "sha512-z7D3xvJ33UfCGv77n40lbzOYjZKVM3k2+5cV7xS8G6SCvKTzMkhkUYuD/qzQUNT4cG/lv0e9mRToweEEVLVVmA==", + "requires": { + "@json-rpc-tools/utils": "^1.7.6", + "axios": "^0.21.0", + "safe-json-utils": "^1.1.1", + "ws": "^7.4.0" + } + }, + "@json-rpc-tools/types": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@json-rpc-tools/types/-/types-1.7.6.tgz", + "integrity": "sha512-nDSqmyRNEqEK9TZHtM15uNnDljczhCUdBmRhpNZ95bIPKEDQ+nTDmGMFd2lLin3upc5h2VVVd9tkTDdbXUhDIQ==", + "requires": { + "keyvaluestorage-interface": "^1.0.0" + } + }, + "@json-rpc-tools/utils": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@json-rpc-tools/utils/-/utils-1.7.6.tgz", + "integrity": "sha512-HjA8x/U/Q78HRRe19yh8HVKoZ+Iaoo3YZjakJYxR+rw52NHo6jM+VE9b8+7ygkCFXl/EHID5wh/MkXaE/jGyYw==", + "requires": { + "@json-rpc-tools/types": "^1.7.6", + "@pedrouid/environment": "^1.0.1" + } + }, + "@ledgerhq/devices": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-6.24.1.tgz", + "integrity": "sha512-6SNXWXxojUF6WKXMVIbRs15Mveg+9k0RKJK/PKlwZh929Lnr/NcbONWdwPjWKZAp1g82eEPT4jIkG6qc4QXlcA==", + "requires": { + "@ledgerhq/errors": "^6.10.0", + "@ledgerhq/logs": "^6.10.0", + "rxjs": "6", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@ledgerhq/errors": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.10.0.tgz", + "integrity": "sha512-fQFnl2VIXh9Yd41lGjReCeK+Q2hwxQJvLZfqHnKqWapTz68NHOv5QcI0OHuZVNEbv0xhgdLhi5b65kgYeQSUVg==" + }, + "@ledgerhq/hw-transport": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.24.1.tgz", + "integrity": "sha512-cOhxkQJrN7DvPFLLXAS2nqAZ7NIDaFqnbgu9ugTccgbJm2/z7ClRZX/uQoI4FscswZ47MuJQdXqz4nK48phteQ==", + "requires": { + "@ledgerhq/devices": "^6.24.1", + "@ledgerhq/errors": "^6.10.0", + "events": "^3.3.0" + } + }, + "@ledgerhq/hw-transport-webhid": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.24.1.tgz", + "integrity": "sha512-jeOB4oSQyytJD99FU+xNUkEflgSB6hWUbzhEqnz7fExnGJhMrRT39035dEmSdwshsOFBhzR/IwTUzlwNZzhNxQ==", + "requires": { + "@ledgerhq/devices": "^6.24.1", + "@ledgerhq/errors": "^6.10.0", + "@ledgerhq/hw-transport": "^6.24.1", + "@ledgerhq/logs": "^6.10.0" + } + }, + "@ledgerhq/logs": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.10.0.tgz", + "integrity": "sha512-lLseUPEhSFUXYTKj6q7s2O3s2vW2ebgA11vMAlKodXGf5AFw4zUoEbTz9CoFOC9jS6xY4Qr8BmRnxP/odT4Uuw==" + }, + "@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "optional": true + } + } + }, + "@mattrglobal/bbs-signatures": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mattrglobal/bbs-signatures/-/bbs-signatures-1.3.1.tgz", + "integrity": "sha512-syZGkapPpktD2el4lPTCQRw/LSia6/NwBS83hzCKu4dTlaJRO636qo5NCiiQb+iBYWyZQQEzN0jdRik8N9EUGA==", + "requires": { + "@mattrglobal/node-bbs-signatures": "0.18.1", + "@stablelib/random": "1.0.0" + }, + "dependencies": { + "@stablelib/random": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.0.tgz", + "integrity": "sha512-G9vwwKrNCGMI/uHL6XeWe2Nk4BuxkYyWZagGaDU9wrsuV+9hUwNI1lok2WVo8uJDa2zx7ahNwN7Ij983hOUFEw==", + "requires": { + "@stablelib/binary": "^1.0.0", + "@stablelib/wipe": "^1.0.0" + } + } + } + }, + "@mattrglobal/bls12381-key-pair": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@mattrglobal/bls12381-key-pair/-/bls12381-key-pair-1.2.1.tgz", + "integrity": "sha512-Xh63NP1iSGBLW10N5uRpDyoPo2LtNHHh/TRGVJEHRgo+07yxgl8tS06Q2zO9gN9+b+GU5COKvR3lACwrvn+MYw==", + "requires": { + "@mattrglobal/bbs-signatures": "1.3.1", + "bs58": "4.0.1", + "rfc4648": "1.5.2" + } + }, + "@mattrglobal/node-bbs-signatures": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@mattrglobal/node-bbs-signatures/-/node-bbs-signatures-0.18.1.tgz", + "integrity": "sha512-s9ccL/1TTvCP1N//4QR84j/d5D/stx/AI1kPcRgiE4O3KrxyF7ZdL9ca8fmFuN6yh9LAbn/OiGRnOXgvn38Dgg==", + "optional": true, + "requires": { + "@mapbox/node-pre-gyp": "1.0.11", + "neon-cli": "1.0.0" + } + }, + "@multiformats/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" + }, + "@napi-rs/triples": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz", + "integrity": "sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA==", + "dev": true, + "peer": true + }, + "@next/env": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.7.tgz", + "integrity": "sha512-TNDqBV37wd95SiNdZsSUq8gnnrTwr+aN9wqy4Zxrxw4bC/jCHNsbK94DxjkG99VL30VCRXXDBTA1/Wa2jIpF9Q==", + "dev": true, + "peer": true + }, + "@next/eslint-plugin-next": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.0.tgz", + "integrity": "sha512-WFiyvSM2G5cQmh32t/SiQuJ+I2O+FHVlK/RFw5b1565O2kEM/36EXncjt88Pa+X5oSc+1SS+tWxowWJd1lqI+g==", + "dev": true, + "requires": { + "glob": "7.1.7" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "@next/polyfill-module": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-12.0.7.tgz", + "integrity": "sha512-sA8LAMMlmcspIZw/jeQuJTyA3uGrqOhTBaQE+G9u6DPohqrBFRkaz7RzzJeqXkUXw600occsIBknSjyVd1R67A==", + "dev": true, + "peer": true + }, + "@next/react-dev-overlay": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-12.0.7.tgz", + "integrity": "sha512-dSQLgpZ5uzyittFtIHlJCLAbc0LlMFbRBSYuGsIlrtGyjYN+WMcnz8lK48VLxNPFGuB/hEzkWV4TW5Zu75+Fzg==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "7.12.11", + "anser": "1.4.9", + "chalk": "4.0.0", + "classnames": "2.2.6", + "css.escape": "1.5.1", + "data-uri-to-buffer": "3.0.1", + "platform": "1.3.6", + "shell-quote": "1.7.3", + "source-map": "0.8.0-beta.0", + "stacktrace-parser": "0.1.10", + "strip-ansi": "6.0.1" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "peer": true, + "requires": { + "whatwg-url": "^7.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "peer": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true, + "peer": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "peer": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "@next/swc-android-arm64": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.7.tgz", + "integrity": "sha512-yViT7EEc7JqxncRT+ZTeTsrAYXLlcefo0Y0eAfYmmalGD2605L4FWAVrJi4WnrSLji7l+veczw1WBmNeHICKKA==", + "dev": true, + "optional": true, + "peer": true + }, + "@next/swc-darwin-arm64": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.7.tgz", + "integrity": "sha512-vhAyW2rDEUcQesRVaj0z1hSoz7QhDzzGd0V1/5/5i9YJOfOtyrPsVJ82tlf7BfXl6/Ep+eKNfWVIb5/Jv89EKg==", + "dev": true, + "optional": true, + "peer": true + }, + "@next/swc-darwin-x64": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.7.tgz", + "integrity": "sha512-km+6Rx6TvbraoQ1f0MXa69ol/x0RxzucFGa2OgZaYJERas0spy0iwW8hpASsGcf597D8VRW1x+R2C7ZdjVBSTw==", + "dev": true, + "optional": true, + "peer": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.7.tgz", + "integrity": "sha512-d0zWr877YqZ2cf/DQy6obouaR39r0FPebcXj2nws9AC99m68CO2xVpWv9jT7mFvpY+T40HJisLH80jSZ2iQ9sA==", + "dev": true, + "optional": true, + "peer": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.7.tgz", + "integrity": "sha512-fdobh5u6gG13Gd5LkHhJ+W8tF9hbaFolRW99FhzArMe5/nMKlLdBymOxvitE3K4gSFQxbXJA6TbU0Vv0e59Kww==", + "dev": true, + "optional": true, + "peer": true + }, + "@next/swc-linux-arm64-musl": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.7.tgz", + "integrity": "sha512-vx0c5Q3oIScFNT/4jI9rCe0yPzKuCqWOkiO/OOV0ixSI2gLhbrwDIcdkm79fKVn3i8JOJunxE4zDoFeR/g8xqQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@next/swc-linux-x64-gnu": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.7.tgz", + "integrity": "sha512-9ITyp6s6uGVKNx3C/GP7GrYycbcwTADG7TdIXzXUxOOZORrdB1GNg3w/EL3Am4VMPPEpO6v1RfKo2IKZpVKfTA==", + "dev": true, + "optional": true, + "peer": true + }, + "@next/swc-linux-x64-musl": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.7.tgz", + "integrity": "sha512-C+k+cygbIZXYfc+Hx2fNPUBEg7jzio+mniP5ywZevuTXW14zodIfQ3ZMoMJR8EpOVvYpjWFk2uAjiwqgx8vo/g==", + "dev": true, + "optional": true, + "peer": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.7.tgz", + "integrity": "sha512-7jTRjOKkDVnb5s7VoHT7eX+eyT/5BQJ/ljP2G56riAgKGqPL63/V7FXemLhhLT67D+OjoP8DRA2E2ne6IPHk4w==", + "dev": true, + "optional": true, + "peer": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.7.tgz", + "integrity": "sha512-2u5pGDsk7H6gGxob2ATIojzlwKzgYsrijo7RRpXOiPePVqwPWg6/pmhaJzLdpfjaBgRg1NFmwSp/7Ump9X8Ijg==", + "dev": true, + "optional": true, + "peer": true + }, + "@next/swc-win32-x64-msvc": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.7.tgz", + "integrity": "sha512-frEWtbf+q8Oz4e2UqKJrNssk6DZ6/NLCQXn5/ORWE9dPAfe9XS6aK5FRZ6DuEPmmKd5gOoRkKJFFz5nYd+TeyQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@noble/ciphers": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.5.3.tgz", + "integrity": "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==" + }, + "@noble/curves": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", + "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", + "requires": { + "@noble/hashes": "1.4.0" + } + }, + "@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nomiclabs/hardhat-ethers": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.4.tgz", + "integrity": "sha512-7LMR344TkdCYkMVF9LuC9VU2NBIi84akQiwqm7OufpWaDgHbWhuanY53rk3SVAW0E4HBk5xn5wl5+bN5f+Mq5w==", + "dev": true, + "requires": {} + }, + "@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==" + }, + "@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "requires": { + "@opentelemetry/api": "^1.0.0" + } + }, + "@opentelemetry/context-async-hooks": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", + "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", + "requires": {} + }, + "@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "requires": { + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", + "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "requires": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + } + }, + "@opentelemetry/exporter-trace-otlp-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", + "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + } + }, + "@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", + "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + } + }, + "@opentelemetry/exporter-zipkin": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", + "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "requires": { + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + } + } + }, + "@opentelemetry/instrumentation-amqplib": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.38.0.tgz", + "integrity": "sha512-6i1sZl2B329NoOeCFm0R6H/u0DLex7L3NVLEQGSujfM6ztNxEZGmrFhV57eFkzwIHVHUqq9pfmpAAYVkGgrO1w==", + "requires": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-aws-lambda": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.42.0.tgz", + "integrity": "sha512-GhV3s62W8gWXDuCdPkWj60W3giHGadHoGBPGW5Wud2fUK9lY6FiYxv6AmCokzugTaiRfB2RjsaJWd9xTtYttVA==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagator-aws-xray": "^1.3.1", + "@opentelemetry/resources": "^1.8.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/aws-lambda": "8.10.122" + } + }, + "@opentelemetry/instrumentation-aws-sdk": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.42.0.tgz", + "integrity": "sha512-6b4LQAeBSKU5RhKEP9rH+wMcKswlllIT9J65uREmnWQQJo5zogD6cWa2sJ814o9K25/aDi+zheVHDFDuA7iVCQ==", + "requires": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagation-utils": "^0.30.10", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-bunyan": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.39.0.tgz", + "integrity": "sha512-AQ845Wh5Yhd7S0argkCd1vrThNo4q/p6LJePC4OlFifPa9i5O2MzfLNh4mo8YWa0rYvcc+jbhodkGNa+1YJk/A==", + "requires": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@types/bunyan": "1.8.9" + } + }, + "@opentelemetry/instrumentation-cassandra-driver": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.39.0.tgz", + "integrity": "sha512-D1p7zNNHQYI6/d0ulAFXe+71oDAgzxctfB0EICT8GpBhOCRlCW0U4rxRWrnZW6T5sJaBJqSsY4QF5CPqvCc00w==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-connect": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.37.0.tgz", + "integrity": "sha512-SeQktDIH5rNzjiEiazWiJAIXkmnLOnNV7wwHpahrqE0Ph+Z3heqMfxRtoMtbdJSIYLfcNZYO51AjxZ00IXufdw==", + "requires": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/connect": "3.4.36" + } + }, + "@opentelemetry/instrumentation-cucumber": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.7.0.tgz", + "integrity": "sha512-bF9gpkUsDbg5Ii47PrhOzgCJKKrT0Tn0wfowOOgcW8PruqfuXgnQ9q1B6GGdSqtIaFnX3xFxGCyWcmf5emt64w==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-dataloader": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.10.0.tgz", + "integrity": "sha512-yoAHGsgXx0YNFJ5XgCAgPo2Wr7Hy4IQX7YTcCulnKuxdfFXybsM9Yz7wiF9X2X2eB6HRLRJRufXT0sujbHaq1g==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0" + } + }, + "@opentelemetry/instrumentation-dns": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.37.0.tgz", + "integrity": "sha512-vhIOqqUGq1qwSKS6mF9tpXP7GmVQpQK4zm7bn2UYModpm+YYQzghtf/D8JH6lxXyUMP40zA37xUd2HO6uze/dw==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "semver": "^7.5.4" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + } + } + }, + "@opentelemetry/instrumentation-express": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.40.1.tgz", + "integrity": "sha512-+RKMvVe2zw3kIXRup9c1jFu3T4d0fs5aKy015TpiMyoCKX1UMu3Z0lfgYtuyiSTANvg5hZnDbWmQmqSPj9VTvg==", + "requires": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-fastify": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.37.0.tgz", + "integrity": "sha512-WRjwzNZgupSzbEYvo9s+QuHJRqZJjVdNxSEpGBwWK8RKLlHGwGVAu0gcc2gPamJWUJsGqPGvahAPWM18ZkWj6A==", + "requires": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-fs": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.13.0.tgz", + "integrity": "sha512-sZxofhMkul95/Rb4R/Q1eP8mIpgWX8dXNCAOk1jMzl/I8xPJ5tnPgT+PIInPSiDh3kgZDTxK5Up1zMnUh0XqSg==", + "requires": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + } + }, + "@opentelemetry/instrumentation-generic-pool": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.37.0.tgz", + "integrity": "sha512-l3VivYfu+FRw0/hHu2jlFLz4mfxZrOg4r96usDF5dJgDRQrRUmjtq6xssYGuFKn1FXAfN8Rcn1Tdk/c40PNYEA==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0" + } + }, + "@opentelemetry/instrumentation-graphql": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.41.0.tgz", + "integrity": "sha512-R/gXeljgIhaRDKquVkKYT5QHPnFouM8ooyePZEP0kqyaVAedtR1V7NfAUJbxfTG5fBQa5wdmLjvu63+tzRXZCA==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0" + } + }, + "@opentelemetry/instrumentation-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.52.1.tgz", + "integrity": "sha512-EdSDiDSAO+XRXk/ZN128qQpBo1I51+Uay/LUPcPQhSRGf7fBPIEUBeOLQiItguGsug5MGOYjql2w/1wCQF3fdQ==", + "requires": { + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/instrumentation-hapi": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.39.0.tgz", + "integrity": "sha512-ik2nA9Yj2s2ay+aNY+tJsKCsEx6Tsc2g/MK0iWBW5tibwrWKTy1pdVt5sB3kd5Gkimqj23UV5+FH2JFcQLeKug==", + "requires": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz", + "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1", + "semver": "^7.5.2" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + } + } + }, + "@opentelemetry/instrumentation-ioredis": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.41.0.tgz", + "integrity": "sha512-rxiLloU8VyeJGm5j2fZS8ShVdB82n7VNP8wTwfUQqDwRfHCnkzGr+buKoxuhGD91gtwJ91RHkjHA1Eg6RqsUTg==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.23.0" + } + }, + "@opentelemetry/instrumentation-knex": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.37.0.tgz", + "integrity": "sha512-NyXHezcUYiWnzhiY4gJE/ZMABnaC7ZQUCyx7zNB4J9Snmc4YCsRbLpTkJmCLft3ey/8Qg1Un+6efZcpgthQqbg==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-koa": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.41.0.tgz", + "integrity": "sha512-mbPnDt7ELvpM2S0vixYUsde7122lgegLOJQxx8iJQbB8YHal/xnTh9v7IfArSVzIDo+E+080hxZyUZD4boOWkw==", + "requires": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/koa": "2.14.0", + "@types/koa__router": "12.0.3" + } + }, + "@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.38.0.tgz", + "integrity": "sha512-x41JPoCbltEeOXlHHVxHU6Xcd/91UkaXHNIqj8ejfp9nVQe0lFHBJ8wkUaVJlasu60oEPmiz6VksU3Wa42BrGw==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0" + } + }, + "@opentelemetry/instrumentation-memcached": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.37.0.tgz", + "integrity": "sha512-30mEfl+JdeuA6m7GRRwO6XYkk7dj4dp0YB70vMQ4MS2qBMVQvkEu3Gb+WFhSHukTYv753zyBeohDkeXw7DEsvw==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0", + "@types/memcached": "^2.2.6" + } + }, + "@opentelemetry/instrumentation-mongodb": { + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.45.0.tgz", + "integrity": "sha512-xnZP9+ayeB1JJyNE9cIiwhOJTzNEsRhXVdLgfzmrs48Chhhk026mQdM5CITfyXSCfN73FGAIB8d91+pflJEfWQ==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/sdk-metrics": "^1.9.1", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-mongoose": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.39.0.tgz", + "integrity": "sha512-J1r66A7zJklPPhMtrFOO7/Ud2p0Pv5u8+r23Cd1JUH6fYPmftNJVsLp2urAt6PHK4jVqpP/YegN8wzjJ2mZNPQ==", + "requires": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-mysql": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.39.0.tgz", + "integrity": "sha512-8snHPh83rhrDf31v9Kq0Nf+ts8hdr7NguuszRqZomZBHgE0+UyXZSkXHAAFZoBPPRMGyM68uaFE5hVtFl+wOcA==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/mysql": "2.15.22" + } + }, + "@opentelemetry/instrumentation-mysql2": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.39.0.tgz", + "integrity": "sha512-Iypuq2z6TCfriAXCIZjRq8GTFCKhQv5SpXbmI+e60rYdXw8NHtMH4NXcGF0eKTuoCsC59IYSTUvDQYDKReaszA==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1" + } + }, + "@opentelemetry/instrumentation-nestjs-core": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.38.0.tgz", + "integrity": "sha512-M381Df1dM8aqihZz2yK+ugvMFK5vlHG/835dc67Sx2hH4pQEQYDA2PpFPTgc9AYYOydQaj7ClFQunESimjXDgg==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + } + }, + "@opentelemetry/instrumentation-net": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.37.0.tgz", + "integrity": "sha512-kLTnWs4R/FtNDvJC7clS7/tBzK7I8DH5IV1I8abog4/1fHh/CFiwWeTRlPlREwcGfVJyL95pDX2Utjviybr5Dg==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + } + }, + "@opentelemetry/instrumentation-pg": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.42.0.tgz", + "integrity": "sha512-sjgcM8CswYy8zxHgXv4RAZ09DlYhQ+9TdlourUs63Df/ek5RrB1ZbjznqW7PB6c3TyJJmX6AVtPTjAsROovEjA==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.4" + } + }, + "@opentelemetry/instrumentation-pino": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.40.0.tgz", + "integrity": "sha512-29B7mpabiB5m9YeVuUpWNceKv2E2semh44Y0EngFn7Z/Dwg13j+jsD3h6RaLPLUmUynWKSa160jZm0XrWbx40w==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0" + } + }, + "@opentelemetry/instrumentation-redis": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.40.0.tgz", + "integrity": "sha512-vf2EwBrb979ztLMbf8ew+65ECP3yMxeFwpMLu9KjX6+hFf1Ng776jlM2H9GeP1YePbvoBB5Jbo0MBU6Y0HEgzA==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-redis-4": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.40.0.tgz", + "integrity": "sha512-0ieQYJb6yl35kXA75LQUPhHtGjtQU9L85KlWa7d4ohBbk/iQKZ3X3CFl5jC5vNMq/GGPB3+w3IxNvALlHtrp7A==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-restify": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.39.0.tgz", + "integrity": "sha512-+KDpaGvJLW28LYoT3AZAEVnywzy8dGS+wTWirXU6edKXu4w5mwdxui3UB3Vy/+FV7gbMWidzedaihTDlQvZXRA==", + "requires": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-router": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.38.0.tgz", + "integrity": "sha512-HMeeBva/rqIqg/KHzmKcvutK4JS90Sk59i4qCnLhHW57CMVruj18aXEpBT+QMVJRjmzrvhkJnIpNcPu5vglmRg==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-socket.io": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.40.0.tgz", + "integrity": "sha512-BJFMytiHnvKM7n6n67pT9eTBGpZetY+LHic8UKrIQ313uBp+MBbRyqiJY6dT4bcN1B6sl47JzCyKmVprSuSnBA==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/instrumentation-tedious": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.11.0.tgz", + "integrity": "sha512-Dh93CyaR7vldKf0oXwtYlSEdqvMGUTv270N0YGBQtODPKtgIMr9816vIA7cJPCZ4SbbREgLNQJfbh0qeadAM4Q==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/tedious": "^4.0.10" + } + }, + "@opentelemetry/instrumentation-undici": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.3.0.tgz", + "integrity": "sha512-LMbOE4ofjpQyZ3266Ah6XL9JIBaShebLN0aaZPvqXozKPu41rHmggO3qk0H+Unv8wbiUnHgYZDvq8yxXyKAadg==", + "requires": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + } + }, + "@opentelemetry/instrumentation-winston": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.38.0.tgz", + "integrity": "sha512-rBAoVkv5HGyKFIpM3Xy5raPNJ/Le1JsAFPbxwbfOZUxpLT2YBB99h/jJYsHm+eNueJ7EBwz2ftqY8rEpVlk3XA==", + "requires": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0" + } + }, + "@opentelemetry/otlp-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", + "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-transformer": "0.52.1" + } + }, + "@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", + "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", + "requires": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1" + } + }, + "@opentelemetry/otlp-transformer": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", + "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "requires": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "protobufjs": "^7.3.0" + } + }, + "@opentelemetry/propagation-utils": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.10.tgz", + "integrity": "sha512-hhTW8pFp9PSyosYzzuUL9rdm7HF97w3OCyElufFHyUnYnKkCBbu8ne2LyF/KSdI/xZ81ubxWZs78hX4S7pLq5g==", + "requires": {} + }, + "@opentelemetry/propagator-aws-xray": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-1.25.1.tgz", + "integrity": "sha512-soZQdO9EAROMwa9bL2C0VLadbrfRjSA9t7g6X8sL0X1B8V59pzOayYMyTW9qTECn9uuJV98A7qOnJm6KH6yk8w==", + "requires": { + "@opentelemetry/core": "1.25.1" + } + }, + "@opentelemetry/propagator-b3": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", + "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "requires": { + "@opentelemetry/core": "1.25.1" + } + }, + "@opentelemetry/propagator-jaeger": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", + "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "requires": { + "@opentelemetry/core": "1.25.1" + } + }, + "@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==" + }, + "@opentelemetry/resource-detector-alibaba-cloud": { + "version": "0.28.10", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.28.10.tgz", + "integrity": "sha512-TZv/1Y2QCL6sJ+X9SsPPBXe4786bc/Qsw0hQXFsNTbJzDTGGUmOAlSZ2qPiuqAd4ZheUYfD+QA20IvAjUz9Hhg==", + "requires": { + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/resource-detector-aws": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.5.1.tgz", + "integrity": "sha512-+IUh4gAwJf49vOJM6PIjmgOapRH5zr21ZpFnNU0QZmxRi52AXVhZN7A89pKW6GAQheWnVQLD7iUN87ieYt70tw==", + "requires": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/resource-detector-azure": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.2.9.tgz", + "integrity": "sha512-16Z6kyrmszoa7J1uj1kbSAgZuk11K07yEDj6fa3I9XBf8Debi8y4K8ex94kpxbCfEraWagXji3bCWvaq3k4dRg==", + "requires": { + "@opentelemetry/resources": "^1.10.1", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/resource-detector-container": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.3.11.tgz", + "integrity": "sha512-22ndMDakxX+nuhAYwqsciexV8/w26JozRUV0FN9kJiqSWtA1b5dCVtlp3J6JivG5t8kDN9UF5efatNnVbqRT9Q==", + "requires": { + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + } + }, + "@opentelemetry/resource-detector-gcp": { + "version": "0.29.10", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.29.10.tgz", + "integrity": "sha512-rm2HKJ9lsdoVvrbmkr9dkOzg3Uk0FksXNxvNBgrCprM1XhMoJwThI5i0h/5sJypISUAJlEeJS6gn6nROj/NpkQ==", + "requires": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "gcp-metadata": "^6.0.0" + } + }, + "@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "requires": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1" + } + }, + "@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + } + }, + "@opentelemetry/sdk-node": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", + "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "requires": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "0.52.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", + "@opentelemetry/exporter-zipkin": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/sdk-trace-node": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/sdk-trace-node": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", + "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==", + "requires": { + "@opentelemetry/context-async-hooks": "1.25.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/propagator-b3": "1.25.1", + "@opentelemetry/propagator-jaeger": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "semver": "^7.5.2" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + } + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==" + }, + "@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "requires": { + "@opentelemetry/core": "^1.1.0" + } + }, + "@opentelemetry/tracing": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/tracing/-/tracing-0.24.0.tgz", + "integrity": "sha512-sTLEs1SIon3xV8vLe53PzfbU0FahoxL9NPY/CYvA1mwGbMu4zHkHAjqy1Tc8JmqRrfa+XrHkmzeSM4hrvloBaA==", + "requires": { + "@opentelemetry/core": "0.24.0", + "@opentelemetry/resources": "0.24.0", + "@opentelemetry/semantic-conventions": "0.24.0", + "lodash.merge": "^4.6.2" + }, + "dependencies": { + "@opentelemetry/core": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-0.24.0.tgz", + "integrity": "sha512-KpsfxBbFTZT9zaB4Es/fFLbvSzVl9Io/8UUu/TYl4/HgqkmyVInNlWTgRiKyz9nsHzFpGP1kdZJj+YIut0IFsw==", + "requires": { + "@opentelemetry/semantic-conventions": "0.24.0", + "semver": "^7.1.3" + } + }, + "@opentelemetry/resources": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-0.24.0.tgz", + "integrity": "sha512-uEr2m13IRkjQAjX6fsYqJ21aONCspRvuQunaCl8LbH1NS1Gj82TuRUHF6TM82ulBPK8pU+nrrqXKuky2cMcIzw==", + "requires": { + "@opentelemetry/core": "0.24.0", + "@opentelemetry/semantic-conventions": "0.24.0" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-0.24.0.tgz", + "integrity": "sha512-a/szuMQV0Quy0/M7kKdglcbRSoorleyyOwbTNNJ32O+RBN766wbQlMTvdimImTmwYWGr+NJOni1EcC242WlRcA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@openzeppelin/contracts": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.4.2.tgz", + "integrity": "sha512-NyJV7sJgoGYqbtNUWgzzOGW4T6rR19FmX1IJgXGdapGPWsuMelGJn9h03nos0iqfforCbCB0iYIR0MtIuIFLLw==", + "dev": true + }, + "@peculiar/asn1-schema": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", + "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", + "requires": { + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@peculiar/webcrypto": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", + "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", + "requires": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@pedrouid/environment": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pedrouid/environment/-/environment-1.0.1.tgz", + "integrity": "sha512-HaW78NszGzRZd9SeoI3JD11JqY+lubnaOx7Pewj5pfjqWXOEATpeKIFb9Z4t2WBUK2iryiXX3lzWwmYWgUL0Ug==" + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.4.tgz", + "integrity": "sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw==", + "dev": true, + "requires": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.8.1", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@prisma/client": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.16.1.tgz", + "integrity": "sha512-wM9SKQjF0qLxdnOZIVAIMKiz6Hu7vDt4FFAih85K1dk/Rr2mdahy6d3QP41K62N9O0DJJA//gUDA3Mp49xsKIg==", + "requires": {} + }, + "@prisma/debug": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.16.1.tgz", + "integrity": "sha512-JsNgZAg6BD9RInLSrg7ZYzo11N7cVvYArq3fHGSD89HSgtN0VDdjV6bib7YddbcO6snzjchTiLfjeTqBjtArVQ==", + "devOptional": true + }, + "@prisma/engines": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.16.1.tgz", + "integrity": "sha512-KkyF3eIUtBIyp5A/rJHCtwQO18OjpGgx18PzjyGcJDY/+vNgaVyuVd+TgwBgeq6NLdd1XMwRCI+58vinHsAdfA==", + "devOptional": true, + "requires": { + "@prisma/debug": "5.16.1", + "@prisma/engines-version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "@prisma/fetch-engine": "5.16.1", + "@prisma/get-platform": "5.16.1" + } + }, + "@prisma/engines-version": { + "version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303.tgz", + "integrity": "sha512-HkT2WbfmFZ9WUPyuJHhkiADxazHg8Y4gByrTSVeb3OikP6tjQ7txtSUGu9OBOBH0C13dPKN2qqH12xKtHu/Hiw==", + "devOptional": true + }, + "@prisma/fetch-engine": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.16.1.tgz", + "integrity": "sha512-oOkjaPU1lhcA/Rvr4GVfd1NLJBwExgNBE36Ueq7dr71kTMwy++a3U3oLd2ZwrV9dj9xoP6LjCcky799D9nEt4w==", + "devOptional": true, + "requires": { + "@prisma/debug": "5.16.1", + "@prisma/engines-version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "@prisma/get-platform": "5.16.1" + } + }, + "@prisma/get-platform": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.16.1.tgz", + "integrity": "sha512-R4IKnWnMkR2nUAbU5gjrPehdQYUUd7RENFD2/D+xXTNhcqczp0N+WEGQ3ViyI3+6mtVcjjNIMdnUTNyu3GxIgA==", + "devOptional": true, + "requires": { + "@prisma/debug": "5.16.1" + } + }, + "@prisma/instrumentation": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.16.1.tgz", + "integrity": "sha512-4m5gRFWnQb8s/yTyGbMZkL7A5uJgqOWcWJxapwcAD0T0kh5sGPEVSQl/zTQvE9aduXhFAxOtC3gO+R8Hb5xO1Q==", + "requires": { + "@opentelemetry/api": "^1.8", + "@opentelemetry/instrumentation": "^0.49 || ^0.50 || ^0.51 || ^0.52.0", + "@opentelemetry/sdk-trace-base": "^1.22" + } + }, + "@project-serum/anchor": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.20.1.tgz", + "integrity": "sha512-2TuBmGUn9qeYz6sJINJlElrBuPsaUAtYyUsJ3XplEBf1pczrANAgs5ceJUFzdiqGEWLn+84ObSdBeChT/AXYFA==", + "requires": { + "@project-serum/borsh": "^0.2.2", + "@solana/web3.js": "^1.17.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^5.3.1", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "find": "^0.3.0", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "toml": "^3.0.0" + } + }, + "@project-serum/borsh": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.5.tgz", + "integrity": "sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==", + "requires": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + } + }, + "@project-serum/sol-wallet-adapter": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.6.tgz", + "integrity": "sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g==", + "requires": { + "bs58": "^4.0.1", + "eventemitter3": "^4.0.7" + } + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "@putout/minify": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@putout/minify/-/minify-4.3.1.tgz", + "integrity": "sha512-XIkJx93TDReV+zYaCB+CnfASHm26vAOEpBmAKzcW/56/8LxU8TRoetUBelkACUab8GPGHjElp0n6a2cLI+ccnw==" + }, + "@rollup/plugin-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", + "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + } + } + }, + "@rushstack/eslint-patch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", + "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==", + "dev": true + }, + "@scure/base": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz", + "integrity": "sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==" + }, + "@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "requires": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true + }, + "@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@smithy/abort-controller": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.0.tgz", + "integrity": "sha512-XOm4LkuC0PsK1sf2bBJLIlskn5ghmVxiEBVlo/jg0R8hxASBKYYgOoJEhKWgOr4vWGkN+5rC+oyBAqHYtxjnwQ==", + "requires": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/config-resolver": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.3.tgz", + "integrity": "sha512-4wHqCMkdfVDP4qmr4fVPYOFOH+vKhOv3X4e6KEU9wIC8xXUQ24tnF4CW+sddGDX1zU86GGyQ7A+rg2xmUD6jpQ==", + "requires": { + "@smithy/node-config-provider": "^3.1.2", + "@smithy/types": "^3.2.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.2", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/core": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.3.tgz", + "integrity": "sha512-SpyLOL2vgE6sUYM6nQfu82OirCPkCDKctyG3aMgjMlDPTJpUlmlNH0ttu9ZWwzEjrzzr8uABmPjJTRI7gk1HFQ==", + "requires": { + "@smithy/middleware-endpoint": "^3.0.3", + "@smithy/middleware-retry": "^3.0.6", + "@smithy/middleware-serde": "^3.0.2", + "@smithy/protocol-http": "^4.0.2", + "@smithy/smithy-client": "^3.1.4", + "@smithy/types": "^3.2.0", + "@smithy/util-middleware": "^3.0.2", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/credential-provider-imds": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.2.tgz", + "integrity": "sha512-gqVmUaNoeqyrOAjgZg+rTmFLsphh/vS59LCMdFfVpthVS0jbfBzvBmEPktBd+y9ME4DYMGHFAMSYJDK8q0noOQ==", + "requires": { + "@smithy/node-config-provider": "^3.1.2", + "@smithy/property-provider": "^3.1.2", + "@smithy/types": "^3.2.0", + "@smithy/url-parser": "^3.0.2", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/fetch-http-handler": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.1.0.tgz", + "integrity": "sha512-s7oQjEOUH9TYjctpITtWF4qxOdg7pBrP9eigEQ8SBsxF3dRFV0S28pGMllC83DUr7ECmErhO/BUwnULfoNhKgQ==", + "requires": { + "@smithy/protocol-http": "^4.0.2", + "@smithy/querystring-builder": "^3.0.2", + "@smithy/types": "^3.2.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/hash-node": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.2.tgz", + "integrity": "sha512-43uGA6o6QJQdXwAogybdTDHDd3SCdKyoiHIHb8PpdE2rKmVicjG9b1UgVwdgO8QPytmVqHFaUw27M3LZKwu8Yg==", + "requires": { + "@smithy/types": "^3.2.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/invalid-dependency": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.2.tgz", + "integrity": "sha512-+BAY3fMhomtq470tswXyrdVBSUhiLuhBVT+rOmpbz5e04YX+s1dX4NxTLzZGwBjCpeWZNtTxP8zbIvvFk81gUg==", + "requires": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "requires": { + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/middleware-content-length": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.2.tgz", + "integrity": "sha512-/Havz3PkYIEmwpqkyRTR21yJsWnFbD1ec4H1pUL+TkDnE7RCQkAVUQepLL/UeCaZeCBXvfdoKbOjSbV01xIinQ==", + "requires": { + "@smithy/protocol-http": "^4.0.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/middleware-endpoint": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.3.tgz", + "integrity": "sha512-ARAXHodhj4tttKa9y75zvENdSoHq6VGsSi7XS3+yLutrnxttJs6N10UMInCC1yi3/bopT8xug3iOP/y9R6sKJQ==", + "requires": { + "@smithy/middleware-serde": "^3.0.2", + "@smithy/node-config-provider": "^3.1.2", + "@smithy/shared-ini-file-loader": "^3.1.2", + "@smithy/types": "^3.2.0", + "@smithy/url-parser": "^3.0.2", + "@smithy/util-middleware": "^3.0.2", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/middleware-retry": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.6.tgz", + "integrity": "sha512-ICsFKp8eAyIMmxN5UT3IU37S6886L879TKtgxPsn/VD/laYNwqTLmJaCAn5//+2fRIrV0dnHp6LFlMwdXlWoUQ==", + "requires": { + "@smithy/node-config-provider": "^3.1.2", + "@smithy/protocol-http": "^4.0.2", + "@smithy/service-error-classification": "^3.0.2", + "@smithy/smithy-client": "^3.1.4", + "@smithy/types": "^3.2.0", + "@smithy/util-middleware": "^3.0.2", + "@smithy/util-retry": "^3.0.2", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } + } + }, + "@smithy/middleware-serde": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.2.tgz", + "integrity": "sha512-oT2abV5zLhBucJe1LIIFEcRgIBDbZpziuMPswTMbBQNcaEUycLFvX63zsFmqfwG+/ZQKsNx+BSE8W51CMuK7Yw==", + "requires": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/middleware-stack": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.2.tgz", + "integrity": "sha512-6fRcxomlNKBPIy/YjcnC7YHpMAjRvGUYlYVJAfELqZjkW0vQegNcImjY7T1HgYA6u3pAcCxKVBLYnkTw8z/l0A==", + "requires": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/node-config-provider": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.2.tgz", + "integrity": "sha512-388fEAa7+6ORj/BDC70peg3fyFBTTXJyXfXJ0Bwd6FYsRltePr2oGzIcm5AuC1WUSLtZ/dF+hYOnfTMs04rLvA==", + "requires": { + "@smithy/property-provider": "^3.1.2", + "@smithy/shared-ini-file-loader": "^3.1.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/node-http-handler": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.0.tgz", + "integrity": "sha512-pOpgB6B+VLXLwAyyvRz+ZAVXABlbAsJ2xvn3WZvrppAPImxwQOPFbeSUzWYMhpC8Tr7yQ3R8fG990QDhskkf1Q==", + "requires": { + "@smithy/abort-controller": "^3.1.0", + "@smithy/protocol-http": "^4.0.2", + "@smithy/querystring-builder": "^3.0.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/property-provider": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.2.tgz", + "integrity": "sha512-Hzp32BpeFFexBpO1z+ts8okbq/VLzJBadxanJAo/Wf2CmvXMBp6Q/TLWr7Js6IbMEcr0pDZ02V3u1XZkuQUJaA==", + "requires": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/protocol-http": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.2.tgz", + "integrity": "sha512-X/90xNWIOqSR2tLUyWxVIBdatpm35DrL44rI/xoeBWUuanE0iyCXJpTcnqlOpnEzgcu0xCKE06+g70TTu2j7RQ==", + "requires": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/querystring-builder": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.2.tgz", + "integrity": "sha512-xhv1+HacDYsOLdNt7zW+8Fe779KYAzmWvzs9bC5NlKM8QGYCwwuFwDBynhlU4D5twgi2pZ14Lm4h6RiAazCtmA==", + "requires": { + "@smithy/types": "^3.2.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/querystring-parser": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.2.tgz", + "integrity": "sha512-C5hyRKgrZGPNh5QqIWzXnW+LXVrPmVQO0iJKjHeb5v3C61ZkP9QhrKmbfchcTyg/VnaE0tMNf/nmLpQlWuiqpg==", + "requires": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/service-error-classification": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.2.tgz", + "integrity": "sha512-cu0WV2XRttItsuXlcM0kq5MKdphbMMmSd2CXF122dJ75NrFE0o7rruXFGfxAp3BKzgF/DMxX+PllIA/cj4FHMw==", + "requires": { + "@smithy/types": "^3.2.0" + } + }, + "@smithy/shared-ini-file-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.2.tgz", + "integrity": "sha512-tgnXrXbLMO8vo6VeuqabMw/eTzQHlLmZx0TC0TjtjJghnD0Xl4pEnJtBjTJr6XF5fHMNrt5BcczDXHJT9yNQnA==", + "requires": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/signature-v4": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.1.1.tgz", + "integrity": "sha512-2/vlG86Sr489XX8TA/F+VDA+P04ESef04pSz0wRtlQBExcSPjqO08rvrkcas2zLnJ51i+7ukOURCkgqixBYjSQ==", + "requires": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/types": "^3.2.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.2", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/smithy-client": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.4.tgz", + "integrity": "sha512-y6xJROGrIoitjpwXLY7P9luDHvuT9jWpAluliuSFdBymFxcl6iyQjo9U/JhYfRHFNTruqsvKOrOESVuPGEcRmQ==", + "requires": { + "@smithy/middleware-endpoint": "^3.0.3", + "@smithy/middleware-stack": "^3.0.2", + "@smithy/protocol-http": "^4.0.2", + "@smithy/types": "^3.2.0", + "@smithy/util-stream": "^3.0.4", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/types": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.2.0.tgz", + "integrity": "sha512-cKyeKAPazZRVqm7QPvcPD2jEIt2wqDPAL1KJKb0f/5I7uhollvsWZuZKLclmyP6a+Jwmr3OV3t+X0pZUUHS9BA==", + "requires": { + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/url-parser": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.2.tgz", + "integrity": "sha512-pRiPHrgibeAr4avtXDoBHmTLtthwA4l8jKYRfZjNgp+bBPyxDMPRg2TMJaYxqbKemvrOkHu9MIBTv2RkdNfD6w==", + "requires": { + "@smithy/querystring-parser": "^3.0.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "requires": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-body-length-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "requires": { + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "requires": { + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "requires": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "requires": { + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-defaults-mode-browser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.6.tgz", + "integrity": "sha512-tAgoc++Eq+KL7g55+k108pn7nAob3GLWNEMbXhZIQyBcBNaE/o3+r4AEbae0A8bWvLRvArVsjeiuhMykGa04/A==", + "requires": { + "@smithy/property-provider": "^3.1.2", + "@smithy/smithy-client": "^3.1.4", + "@smithy/types": "^3.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-defaults-mode-node": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.6.tgz", + "integrity": "sha512-UNerul6/E8aiCyFTBHk+RSIZCo7m96d/N5K3FeO/wFeZP6oy5HAicLzxqa85Wjv7MkXSxSySX29L/LwTV/QMag==", + "requires": { + "@smithy/config-resolver": "^3.0.3", + "@smithy/credential-provider-imds": "^3.1.2", + "@smithy/node-config-provider": "^3.1.2", + "@smithy/property-provider": "^3.1.2", + "@smithy/smithy-client": "^3.1.4", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-endpoints": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.3.tgz", + "integrity": "sha512-Dyi+pfLglDHSGsKSYunuUUSFM5V0tz7UDgv1Ex97yg+Xkn0Eb0rH0rcvl1n0MaJ11fac3HKDOH0DkALyQYCQag==", + "requires": { + "@smithy/node-config-provider": "^3.1.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "requires": { + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-middleware": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.2.tgz", + "integrity": "sha512-7WW5SD0XVrpfqljBYzS5rLR+EiDzl7wCVJZ9Lo6ChNFV4VYDk37Z1QI5w/LnYtU/QKnSawYoHRd7VjSyC8QRQQ==", + "requires": { + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-retry": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.2.tgz", + "integrity": "sha512-HUVOb1k8p/IH6WFUjsLa+L9H1Zi/FAAB2CDOpWuffI1b2Txi6sknau8kNfC46Xrt39P1j2KDzCE1UlLa2eW5+A==", + "requires": { + "@smithy/service-error-classification": "^3.0.2", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-stream": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.4.tgz", + "integrity": "sha512-CcMioiaOOsEVdb09pS7ux1ij7QcQ2jE/cE1+iin1DXMeRgAEQN/47m7Xztu7KFQuQsj0A5YwB2UN45q97CqKCg==", + "requires": { + "@smithy/fetch-http-handler": "^3.1.0", + "@smithy/node-http-handler": "^3.1.0", + "@smithy/types": "^3.2.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "requires": { + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "requires": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@smithy/util-waiter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.1.tgz", + "integrity": "sha512-xT+Bbpe5sSrC7cCWSElOreDdWzqovR1V+7xrp+fmwGAA+TPYBb78iasaXjO1pa+65sY6JjW5GtGeIoJwCK9B1g==", + "requires": { + "@smithy/abort-controller": "^3.1.0", + "@smithy/types": "^3.2.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@solana/buffer-layout": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", + "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "requires": { + "buffer": "~6.0.3" + } + }, + "@solana/wallet-adapter-base": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.3.tgz", + "integrity": "sha512-XXUZJWvFouNuuBVnTGZjEhZQFszG60Ss3qDbmV2O4j6S4IwgfabCZ/J+eMG02a86nGEjQrfKz0jmumpmYICZOQ==", + "requires": { + "@solana/web3.js": "^1.20.0", + "eventemitter3": "^4.0.0" + } + }, + "@solana/wallet-adapter-bitkeep": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-bitkeep/-/wallet-adapter-bitkeep-0.3.3.tgz", + "integrity": "sha512-4oUqAANJ0smSj+ukjzZyjSf+nM6/vN6aPT9OppP8zZegUHoVp0TeHs5/AZ+s+nxs0Wiv1Es8x8GXAy1FLrSAxg==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "@solana/wallet-adapter-bitpie": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-bitpie/-/wallet-adapter-bitpie-0.5.3.tgz", + "integrity": "sha512-hRD91Pfj47taJgIwYaqLVNZ3bJqmlL9SpvL2RVWBqKDIRZ0zwSuiv0+QyOWfcwAJUCxZh4qT1Hr4Fd9EnC1OOQ==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "@solana/wallet-adapter-blocto": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-blocto/-/wallet-adapter-blocto-0.5.3.tgz", + "integrity": "sha512-zMz4uMdmPG0BMPx6lpu35cgnN1bVyxACboG+kWJvMnxw/f3kyHb/+5gIiBUuFMn6p0NSR1yUBEju0UB0Epbw0A==", + "requires": { + "@blocto/sdk": "^0.2.21", + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "@solana/wallet-adapter-clover": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-clover/-/wallet-adapter-clover-0.4.3.tgz", + "integrity": "sha512-cLEEPkGD2arfkz3jbjYWSyIqMVIjMQqRVghoLTpXe3KKbSUiIaeW4daPXnNzuqZZKkSj4w1ULrodpgz0xSZgKA==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "@solana/wallet-adapter-coin98": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-coin98/-/wallet-adapter-coin98-0.5.3.tgz", + "integrity": "sha512-AvZ1io9AnzdVeJAbZ7YZyOkjjDMsDgESfloH9FPGNDKFr88GgGVZuQf8UkK0UNhWjJmPapbI5CHTnfGMVwY/HA==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "bs58": "^4.0.0" + } + }, + "@solana/wallet-adapter-coinhub": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-coinhub/-/wallet-adapter-coinhub-0.3.3.tgz", + "integrity": "sha512-6TDj2/uObM/MoPO4DS/0qsKI/JIRUVl/KKST31HYIGWvQeP+oLRWMvCXwgczCxvLvxe/xAndtwxA4PbaiwhG3g==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "@solana/wallet-adapter-ledger": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-ledger/-/wallet-adapter-ledger-0.9.7.tgz", + "integrity": "sha512-tFjJxQkKi3IpVBqGqjDqcGZZBxYdCRZN1/vv/nG0WFLdqx96k1BB+E9q8K0fNF+aqlRPin5RnoJYKqex28LMIA==", + "requires": { + "@ledgerhq/hw-transport": "^6.11.2", + "@ledgerhq/hw-transport-webhid": "^6.11.2", + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "buffer": "^6.0.3" + } + }, + "@solana/wallet-adapter-mathwallet": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-mathwallet/-/wallet-adapter-mathwallet-0.9.3.tgz", + "integrity": "sha512-V0YIzhFwITy6mezLXjQKMK6XWkHUOwtMZO2Ar7MoFGWizD/lHvMYPbcyLCL5NVzQO1f/YCV2UfG5E6sdVpyEBQ==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "@solana/wallet-adapter-phantom": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-phantom/-/wallet-adapter-phantom-0.9.3.tgz", + "integrity": "sha512-XBDgG5BzxRolHW2OchaIccvsPeQ0PKl/Xy303x7oHS3rW+HUwjIMqaKKpmV66A6rMr1x+ytL+tp6p7t3M2oD3Q==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "@solana/wallet-adapter-react": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-react/-/wallet-adapter-react-0.15.3.tgz", + "integrity": "sha512-Nfd8R2WQ8kf/I4x5MzmEVth4sd5tM2sroOdvk9YzHhCo2nBg2edbQCE9rMHzMBEH6+egTA7dgQrlf0FTMHPUzw==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "react": "^17.0.0" + } + }, + "@solana/wallet-adapter-react-ui": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-react-ui/-/wallet-adapter-react-ui-0.9.5.tgz", + "integrity": "sha512-+869B9F453K9B47FyGEuoBRSziDTu1hlWGAl2KtF3KrzxnBiu97i+GMRRfT92CQQI1pYHA/FIhIfOHwOb7b6cw==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/wallet-adapter-react": "^0.15.3", + "@solana/web3.js": "^1.20.0", + "react": "^17.0.0", + "react-dom": "^17.0.0" + } + }, + "@solana/wallet-adapter-safepal": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-safepal/-/wallet-adapter-safepal-0.5.3.tgz", + "integrity": "sha512-30EOCDYJ/bq1HqKSkBlzCHsWITa82WJml2O46/CMUl1mOhxOJ1ghFSmIhqyHlgqQPcd5Orqvp1db+uj8v/i58w==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "@solana/wallet-adapter-slope": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-slope/-/wallet-adapter-slope-0.5.3.tgz", + "integrity": "sha512-8n6uXrrro2mFH+wIm3NJ3M/ogSn78KPJRxRj6ZSEPnAzx/gA4RAFnB6UWQh4TcOqvdRvsILNgv+C6q0NJM0kYg==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "bs58": "^4.0.0" + } + }, + "@solana/wallet-adapter-solflare": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-solflare/-/wallet-adapter-solflare-0.6.4.tgz", + "integrity": "sha512-Tu4kBiwde9xUQTv/bHxhIKz4dnydKqdOIiMYwUdtIPR9B6ST0Dee1hW5CiPzYBFmo4X7QrJILGFrgLehOe21YA==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "@solflare-wallet/sdk": "^1.0.6" + } + }, + "@solana/wallet-adapter-sollet": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-sollet/-/wallet-adapter-sollet-0.11.0.tgz", + "integrity": "sha512-LNryKaVyMJgsbX7CeR6lxV8P9VWnHlEqAglU2DVdr2GLYKFyT6B1PbGAWj291E/vUmjR0y4Hmi8fHYERnhGmMg==", + "requires": { + "@project-serum/sol-wallet-adapter": "^0.2.6", + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "@solana/wallet-adapter-solong": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-solong/-/wallet-adapter-solong-0.9.3.tgz", + "integrity": "sha512-TFdKK7/Vsta9ajY6+cQ9NGuhmhgsEJ8PR4Y9GWb9ao9OdcLhTFIwOV+IOeD1Ats1ORyukpzjSjsW/VA2UZkTVQ==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "@solana/wallet-adapter-tokenpocket": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-tokenpocket/-/wallet-adapter-tokenpocket-0.4.3.tgz", + "integrity": "sha512-D40nNp92bFwcDw/aQ3bKZMvoxk2s65PJiR9t3JBb4DOtlEafa9GFhwmRYkSH6SB7gRGFUKWWjBWpACRRirFjDA==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0" + } + }, + "@solana/wallet-adapter-torus": { + "version": "0.11.9", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-torus/-/wallet-adapter-torus-0.11.9.tgz", + "integrity": "sha512-D58fGgmv6R0mFumLF4FM8laDUA23GStwY/mKRWIMqYvz1kKxkYDCNEeN8a7XaghMU2U3lqJIj9puS6M9l7yQ/g==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/web3.js": "^1.20.0", + "@toruslabs/solana-embed": "^0.1.0", + "assert": "^2.0.0", + "process": "^0.11.10", + "stream-browserify": "^3.0.0" + } + }, + "@solana/wallet-adapter-wallets": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-wallets/-/wallet-adapter-wallets-0.15.3.tgz", + "integrity": "sha512-hxLtTVDHlmmrjIRkBULlDReqaCd97lZI2sK4zRBW9pxE/VL1x1JTemNZPwbrqqo6Btr1cbWnlSHEnsTy/aWpOg==", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/wallet-adapter-bitkeep": "^0.3.2", + "@solana/wallet-adapter-bitpie": "^0.5.2", + "@solana/wallet-adapter-blocto": "^0.5.2", + "@solana/wallet-adapter-clover": "^0.4.2", + "@solana/wallet-adapter-coin98": "^0.5.2", + "@solana/wallet-adapter-coinhub": "^0.3.2", + "@solana/wallet-adapter-ledger": "^0.9.7", + "@solana/wallet-adapter-mathwallet": "^0.9.2", + "@solana/wallet-adapter-phantom": "^0.9.2", + "@solana/wallet-adapter-safepal": "^0.5.2", + "@solana/wallet-adapter-slope": "^0.5.2", + "@solana/wallet-adapter-solflare": "^0.6.3", + "@solana/wallet-adapter-sollet": "^0.11.0", + "@solana/wallet-adapter-solong": "^0.9.2", + "@solana/wallet-adapter-tokenpocket": "^0.4.2", + "@solana/wallet-adapter-torus": "^0.11.9" + } + }, + "@solana/web3.js": { + "version": "1.93.3", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.93.3.tgz", + "integrity": "sha512-7ASJ3QdZPnWdTMnU//fnsvviKBSAnF57D2AorZPReN7gb820UlT07Na5dAoXymjkuOYZN6Iyw8vrc/jv+2HZnQ==", + "requires": { + "@babel/runtime": "^7.24.7", + "@noble/curves": "^1.4.0", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "agentkeepalive": "^4.5.0", + "bigint-buffer": "^1.1.5", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.3", + "fast-stable-stringify": "^1.0.0", + "jayson": "^4.1.0", + "node-fetch": "^2.7.0", + "rpc-websockets": "^9.0.2", + "superstruct": "^1.0.4" + }, + "dependencies": { + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "@solflare-wallet/sdk": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@solflare-wallet/sdk/-/sdk-1.0.10.tgz", + "integrity": "sha512-ym9PbKgozXUP8VYzqM1NKJp6x/HR4aI9YY0GMPqjhezCVuQ9dctp6zZ2RSMnjdh7evcYKgPdp6XgI36yhR3w6w==", + "requires": { + "@project-serum/sol-wallet-adapter": "0.2.0", + "bs58": "^4.0.1", + "eventemitter3": "^4.0.7", + "uuid": "^8.3.2" + }, + "dependencies": { + "@project-serum/sol-wallet-adapter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.0.tgz", + "integrity": "sha512-ed7wZwlDqjF88VCq7eHVO8njHqdUkBxBL8WEVOnB47ooLO4btOJt6GBdkKpKqKX86c86LiEROJclcdW8e7kIjg==", + "requires": { + "bs58": "^4.0.1", + "eventemitter3": "^4.0.4" + } + } + } + }, + "@solidity-parser/parser": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.0.tgz", + "integrity": "sha512-cX0JJRcmPtNUJpzD2K7FdA7qQsTOk1UZnFx2k7qAg9ZRvuaH5NBe5IEdBMXGlmf2+FmjhqbygJ26H8l2SV7aKQ==", + "dev": true, + "requires": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "@stablelib/aead": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz", + "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==" + }, + "@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "requires": { + "@stablelib/int": "^1.0.1" + } + }, + "@stablelib/bytes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", + "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==" + }, + "@stablelib/chacha": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz", + "integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/chacha20poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz", + "integrity": "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==", + "requires": { + "@stablelib/aead": "^1.0.1", + "@stablelib/binary": "^1.0.1", + "@stablelib/chacha": "^1.0.1", + "@stablelib/constant-time": "^1.0.1", + "@stablelib/poly1305": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", + "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==" + }, + "@stablelib/ed25519": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.2.tgz", + "integrity": "sha512-FtnvUwvKbp6l1dNcg4CswMAVFVu/nzLK3oC7/PRtjYyHbWsIkD8j+5cjXHmwcCpdCpRCaTGACkEhhMQ1RcdSOQ==", + "requires": { + "@stablelib/random": "^1.0.1", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" + }, + "@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + }, + "@stablelib/keyagreement": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", + "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", + "requires": { + "@stablelib/bytes": "^1.0.1" + } + }, + "@stablelib/poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", + "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", + "requires": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.1.tgz", + "integrity": "sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/sha256": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz", + "integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" + }, + "@stablelib/x25519": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.1.tgz", + "integrity": "sha512-nmyUI2ZArxYDh1PhdoSCPEtlTYE0DYugp2qqx8OtjrX3Hmh7boIlDsD0X71ihAxzxqJf3TyQqN/p58ToWhnp+Q==", + "requires": { + "@stablelib/keyagreement": "^1.0.1", + "@stablelib/random": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/xchacha20": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/xchacha20/-/xchacha20-1.0.1.tgz", + "integrity": "sha512-1YkiZnFF4veUwBVhDnDYwo6EHeKzQK4FnLiO7ezCl/zu64uG0bCCAUROJaBkaLH+5BEsO3W7BTXTguMbSLlWSw==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/chacha": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/xchacha20poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/xchacha20poly1305/-/xchacha20poly1305-1.0.1.tgz", + "integrity": "sha512-B1Abj0sMJ8h3HNmGnJ7vHBrAvxuNka6cJJoZ1ILN7iuacXp7sUYcgOVEOTLWj+rtQMpspY9tXSCRLPmN1mQNWg==", + "requires": { + "@stablelib/aead": "^1.0.1", + "@stablelib/chacha20poly1305": "^1.0.1", + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1", + "@stablelib/xchacha20": "^1.0.1" + } + }, + "@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "requires": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "dev": true + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "dev": true + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "dev": true + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "dev": true + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "dev": true + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "dev": true + }, + "@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dev": true, + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + } + }, + "@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dev": true, + "requires": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dev": true, + "requires": { + "@babel/types": "^7.12.6" + } + }, + "@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + } + }, + "@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + } + }, + "@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + } + }, + "@swc/helpers": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.11.tgz", + "integrity": "sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==", + "requires": { + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "@testing-library/dom": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.3.tgz", + "integrity": "sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/jest-dom": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.2.tgz", + "integrity": "sha512-6ewxs1MXWwsBFZXIk4nKKskWANelkdUehchEOokHsN8X7c2eKXGw+77aRV63UU8f/DTSVUPLaGxdrj4lN7D/ug==", + "dev": true, + "requires": { + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/react": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.3.tgz", + "integrity": "sha512-oCULRXWRrBtC9m6G/WohPo1GLcLesH7T4fuKzRAKn1CWVu9BzXtqLXDDTA6KhFNNtRwLtfSMr20HFl+Qrdrvmg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0", + "@types/react-dom": "*" + } + }, + "@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@toruslabs/base-controllers": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-1.6.1.tgz", + "integrity": "sha512-aaOmh8uELiYi/UU7HiEk48xNluv1B0x769DrLyBL9clAy0OD1mWerHFcQJLydJdN95evG98W3LzfNb39/kC5Dw==", + "requires": { + "@toruslabs/http-helpers": "^2.1.4", + "@toruslabs/openlogin-jrpc": "^1.3.4", + "async-mutex": "^0.3.2", + "bignumber.js": "^9.0.2", + "bowser": "^2.11.0", + "broadcast-channel": "^4.9.0", + "eth-rpc-errors": "^4.0.3", + "ethereumjs-util": "^7.1.3", + "json-rpc-random-id": "^1.0.1", + "lodash": "^4.17.21", + "loglevel": "^1.8.0" + } + }, + "@toruslabs/http-helpers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-2.2.0.tgz", + "integrity": "sha512-xkzZZuE+DmWmJBTYneCrMJY24izNQCOdoJMpsXKQx20Va/rTQvNPbdkpx9LBf/pisk8jOwETNAfFQ8YTBc/bZw==", + "requires": { + "lodash.merge": "^4.6.2", + "loglevel": "^1.8.0" + } + }, + "@toruslabs/openlogin-jrpc": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-1.4.0.tgz", + "integrity": "sha512-3zR5mPVKwIRtH+U+COEYQDqD8rJoBUreRu/yFCcBsYIVT3VzAk3/RO1jtuCNn1NdiwvCCDzP3NmL0NnfDPuOUw==", + "requires": { + "@toruslabs/openlogin-utils": "^1.4.0", + "end-of-stream": "^1.4.4", + "events": "^3.3.0", + "fast-safe-stringify": "^2.1.1", + "once": "^1.4.0", + "pump": "^3.0.0", + "readable-stream": "^3.6.0" + } + }, + "@toruslabs/openlogin-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-1.4.0.tgz", + "integrity": "sha512-4RT/bzjyXcLbvXCZ/PwFh9b43LXdZxuPZphG5CCFl6TslLxO3fqQfGEXTpPgAZB0iUkadWoIqCTciWYKlG+vYA==", + "requires": { + "base64url": "^3.0.1", + "keccak": "^3.0.2", + "randombytes": "^2.1.0" + } + }, + "@toruslabs/solana-embed": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/solana-embed/-/solana-embed-0.1.0.tgz", + "integrity": "sha512-jQyw7X0YJVlY2UuZVcGd+CynF1PlXvlAzFj6/gxMAAPzhU0OjkWgWQQtrbKNuZ/d7kaGcpL/h460FbZVWI7NDA==", + "requires": { + "@solana/web3.js": "^1.31.0", + "@toruslabs/base-controllers": "^1.4.2", + "@toruslabs/http-helpers": "^2.1.4", + "@toruslabs/openlogin-jrpc": "^1.3.3", + "eth-rpc-errors": "^4.0.3", + "fast-deep-equal": "^3.1.3", + "is-stream": "^3.0.0", + "lodash-es": "^4.17.21", + "loglevel": "^1.8.0", + "pump": "^3.0.0" + }, + "dependencies": { + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + } + } + }, + "@transmute/bls12381-key-pair": { + "version": "0.7.0-unstable.81", + "resolved": "https://registry.npmjs.org/@transmute/bls12381-key-pair/-/bls12381-key-pair-0.7.0-unstable.81.tgz", + "integrity": "sha512-r0MIYw6MNr42AeYHSdbR5bJty9dpyTfuP8r7f45zZd5mvJkp/ryzDGu7JOQpeY+7VnzW/d9CVWTUmdrgq9oDqQ==", + "requires": { + "@mattrglobal/bls12381-key-pair": "^1.0.0", + "@transmute/ld-key-pair": "^0.7.0-unstable.81" + } + }, + "@transmute/did-context": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/did-context/-/did-context-0.6.1-unstable.37.tgz", + "integrity": "sha512-p/QnG3QKS4218hjIDgdvJOFATCXsAnZKgy4egqRrJLlo3Y6OaDBg7cA73dixOwUPoEKob0K6rLIGcsCI/L1acw==" + }, + "@transmute/did-key-bls12381": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-bls12381/-/did-key-bls12381-0.3.0-unstable.10.tgz", + "integrity": "sha512-ExSADdvDxrYeCx8RsKXZGMjJmHrOJ9vyYtziZUaJ97K/sn1uVlvIOTp9V4xHa6j9cT1wTzSqJ325euwGFeK+WQ==", + "requires": { + "@transmute/bls12381-key-pair": "^0.7.0-unstable.2", + "@transmute/did-key-common": "^0.3.0-unstable.10" + } + }, + "@transmute/did-key-common": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-common/-/did-key-common-0.3.0-unstable.10.tgz", + "integrity": "sha512-Iryh/HcGIvmTtWFTRaG/JEgbUsqI5OqKqkR2676yQWK4ajLMsyNattz5n0ZfFQk/4U7Ee6pJvvKRduFDAqqV0Q==", + "requires": { + "@did-core/data-model": "^0.1.1-unstable.13", + "@did-core/did-ld-json": "^0.1.1-unstable.13", + "@transmute/did-context": "^0.6.1-unstable.36", + "@transmute/ld-key-pair": "^0.6.1-unstable.36", + "@transmute/security-context": "^0.6.1-unstable.36" + }, + "dependencies": { + "@transmute/ld-key-pair": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/ld-key-pair/-/ld-key-pair-0.6.1-unstable.37.tgz", + "integrity": "sha512-DcTpEruAQBfOd2laZkg3uCQ+67Y7dw2hsvo42NAQ5tItCIx5AClP7zccri7T2JUcfDUFaE32z/BLTMEKYt3XZQ==" + } + } + }, + "@transmute/did-key-ed25519": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-ed25519/-/did-key-ed25519-0.3.0-unstable.10.tgz", + "integrity": "sha512-9QdXl58DjwqBuOJBx6DtvaNW2bZLmVBxMSq2En4RAQcGIz1GGulyEQ1NB7PLIAgnam3LIFxiK6RiQGQTfJmmJg==", + "requires": { + "@transmute/did-key-common": "^0.3.0-unstable.10", + "@transmute/ed25519-key-pair": "^0.6.1-unstable.37" + } + }, + "@transmute/did-key-secp256k1": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-secp256k1/-/did-key-secp256k1-0.3.0-unstable.10.tgz", + "integrity": "sha512-C/Gyu2U3NQZ9Gxu4WVwUk8h0ERbY9Z4Kjk0P49p3IQFrWK19XmVXjA+b1RiqffhYzWJ6fH5TPYIt2LW5MRQmUA==", + "requires": { + "@transmute/did-key-common": "^0.3.0-unstable.10", + "@transmute/secp256k1-key-pair": "^0.7.0-unstable.2" + } + }, + "@transmute/did-key-test-vectors": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-test-vectors/-/did-key-test-vectors-0.3.0-unstable.10.tgz", + "integrity": "sha512-YVkhIJbis6j/zwIYVSKzBIPMhf0dLIcsM2CA2KcjbBOwPWOBMeRZES3uOQBIwn3tkTIRtlv+Mn+XsNHTl+J4Vg==" + }, + "@transmute/did-key-web-crypto": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-web-crypto/-/did-key-web-crypto-0.3.0-unstable.10.tgz", + "integrity": "sha512-eq0AEjQi2lFFC1K3Hl/3nTXoLKy07McEjkXGI2xz/GO9tJNvxEZPbmC/VuwLYf61Q/mgB09qNdY8ApEIpWk3mQ==", + "requires": { + "@transmute/did-key-common": "^0.3.0-unstable.10", + "@transmute/web-crypto-key-pair": "^0.7.0-unstable.2" + } + }, + "@transmute/did-key-x25519": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key-x25519/-/did-key-x25519-0.3.0-unstable.10.tgz", + "integrity": "sha512-Jm5UxwI9EhlfVQ9D0Clj9RlMvhOi8nqAgQG30KMzjFMVGfWqIPwQNZFvmL+XsQ7g3dfTo5iQwXBY0de/f+RoMA==", + "requires": { + "@transmute/did-key-common": "^0.3.0-unstable.10", + "@transmute/x25519-key-pair": "^0.7.0-unstable.1" + } + }, + "@transmute/did-key.js": { + "version": "0.3.0-unstable.10", + "resolved": "https://registry.npmjs.org/@transmute/did-key.js/-/did-key.js-0.3.0-unstable.10.tgz", + "integrity": "sha512-qvuZ7SdmEb0ZqRYs9R/NMUgTUwZDsUysW+EhtQ/P/dQw0CvRmvfWOmtz1UWGT6yZKl/IDba0KtKn/Yz0GaClsQ==", + "requires": { + "@transmute/did-key-bls12381": "^0.3.0-unstable.10", + "@transmute/did-key-ed25519": "^0.3.0-unstable.10", + "@transmute/did-key-secp256k1": "^0.3.0-unstable.10", + "@transmute/did-key-test-vectors": "^0.3.0-unstable.10", + "@transmute/did-key-web-crypto": "^0.3.0-unstable.10", + "@transmute/did-key-x25519": "^0.3.0-unstable.10", + "base64url": "^3.0.1" + } + }, + "@transmute/ed25519-key-pair": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/ed25519-key-pair/-/ed25519-key-pair-0.6.1-unstable.37.tgz", + "integrity": "sha512-l34yzE/QnQwmdk5xY9g2kD55e4XPp/jTZQzPu7I6J4Ar+bMaL/0RLL/pgvwyI7qUpsddxRf4WPZCCcZveqPcdA==", + "requires": { + "@stablelib/ed25519": "^1.0.1", + "@transmute/ld-key-pair": "^0.6.1-unstable.37", + "@transmute/x25519-key-pair": "^0.6.1-unstable.37" + }, + "dependencies": { + "@transmute/ld-key-pair": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/ld-key-pair/-/ld-key-pair-0.6.1-unstable.37.tgz", + "integrity": "sha512-DcTpEruAQBfOd2laZkg3uCQ+67Y7dw2hsvo42NAQ5tItCIx5AClP7zccri7T2JUcfDUFaE32z/BLTMEKYt3XZQ==" + }, + "@transmute/x25519-key-pair": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/x25519-key-pair/-/x25519-key-pair-0.6.1-unstable.37.tgz", + "integrity": "sha512-j6zR9IoJmgVhUCVH8YVGpsgQf99SxPKZ00LGnUheBAQzgj2lULGBQ44G+GqBCdzfT0qweptTfp1RjqqHEpizeA==", + "requires": { + "@stablelib/x25519": "^1.0.0", + "@transmute/ld-key-pair": "^0.6.1-unstable.37" + } + } + } + }, + "@transmute/ld-key-pair": { + "version": "0.7.0-unstable.82", + "resolved": "https://registry.npmjs.org/@transmute/ld-key-pair/-/ld-key-pair-0.7.0-unstable.82.tgz", + "integrity": "sha512-XWnVNCL1LeohldBLu7O12tc53rzdCYjZiaMrWvEH/sNpqnZBiNWAsdLWengXhF67LqAXWMwstfbCLNTPCD+EGg==" + }, + "@transmute/secp256k1-key-pair": { + "version": "0.7.0-unstable.82", + "resolved": "https://registry.npmjs.org/@transmute/secp256k1-key-pair/-/secp256k1-key-pair-0.7.0-unstable.82.tgz", + "integrity": "sha512-X+txATKPpwodcr0B5TPvcsi2UnSrS3UFkrALa2ui0B1zNLj56pUVMJ0FdX9eHUKdP7t5tB9iE73Y7/8NWL6exA==", + "requires": { + "@bitauth/libauth": "^1.18.1", + "@transmute/ld-key-pair": "^0.7.0-unstable.82", + "secp256k1": "^4.0.2" + } + }, + "@transmute/security-context": { + "version": "0.6.1-unstable.37", + "resolved": "https://registry.npmjs.org/@transmute/security-context/-/security-context-0.6.1-unstable.37.tgz", + "integrity": "sha512-GtLmG65qlORrz/2S4I74DT+vA4+qXsFxrMr0cNOXjUqZBd/AW1PTrFnryLF9907BfoiD58HC9qb1WVGWjSlBYw==" + }, + "@transmute/web-crypto-key-pair": { + "version": "0.7.0-unstable.82", + "resolved": "https://registry.npmjs.org/@transmute/web-crypto-key-pair/-/web-crypto-key-pair-0.7.0-unstable.82.tgz", + "integrity": "sha512-xhaFpW/jcYgmOZanBVkm034YX728ukVVPO0Bb53d5IcL5MiMSWjPDQfhOyX8+EZfa7rSNDOAi6zCsZMggtB9fg==", + "requires": { + "@peculiar/webcrypto": "^1.1.6", + "@transmute/ld-key-pair": "^0.7.0-unstable.82", + "big-integer": "^1.6.48" + } + }, + "@transmute/x25519-key-pair": { + "version": "0.7.0-unstable.82", + "resolved": "https://registry.npmjs.org/@transmute/x25519-key-pair/-/x25519-key-pair-0.7.0-unstable.82.tgz", + "integrity": "sha512-y4lPzk/SY/Cy1dUCa17ES3kqvShNQwevTO16dvbuevu6YcTYBAdSCYvW9JL+ppFqPYI5NSDPUwT6kkd4wNWmsA==", + "requires": { + "@stablelib/x25519": "^1.0.0", + "@transmute/ld-key-pair": "^0.7.0-unstable.82" + } + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "@typechain/ethers-v5": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", + "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + } + }, + "@typechain/hardhat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-4.0.0.tgz", + "integrity": "sha512-SeEKtiHu4Io3LHhE8VV3orJbsj7dwJZX8pzSTv7WQR38P18vOLm2M52GrykVinMpkLK0uVc88ICT58emvfn74w==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0" + } + }, + "@types/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "dev": true + }, + "@types/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "@types/aws-lambda": { + "version": "8.10.122", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.122.tgz", + "integrity": "sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==" + }, + "@types/babel__core": { + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/bs58": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/bs58/-/bs58-4.0.4.tgz", + "integrity": "sha512-0IEpMFXXQi2zXaXl9GJ3sRwQo0uEkD+yFOv+FnAU5lkPtcu6h61xb7jc2CFPEZ5BUOaiP13ThuGc9HD4R8lR5g==", + "dev": true, + "requires": { + "@types/node": "*", + "base-x": "^3.0.6" + } + }, + "@types/bunyan": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.9.tgz", + "integrity": "sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/content-disposition": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz", + "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==" + }, + "@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true + }, + "@types/cookies": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.0.tgz", + "integrity": "sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==", + "requires": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/http-assert": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.5.tgz", + "integrity": "sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==" + }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, + "@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", + "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", + "dev": true, + "requires": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/jsonpath": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.4.tgz", + "integrity": "sha512-K3hxB8Blw0qgW6ExKgMbXQv2UPZBoE2GqLpVY+yr7nMD2Pq86lsuIzyAaiQ7eMqFL5B6di6pxSkogLJEyEHoGA==", + "dev": true + }, + "@types/keygrip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz", + "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==" + }, + "@types/koa": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.14.0.tgz", + "integrity": "sha512-DTDUyznHGNHAl+wd1n0z1jxNajduyTh8R53xoewuerdBzGo6Ogj6F2299BFtrexJw4NtgjsI5SMPCmV9gZwGXA==", + "requires": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "@types/koa__router": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@types/koa__router/-/koa__router-12.0.3.tgz", + "integrity": "sha512-5YUJVv6NwM1z7m6FuYpKfNLTZ932Z6EF6xy2BbtpJSyn13DKNQEkXVffFVSnJHxvwwWh2SAeumpjAYUELqgjyw==", + "requires": { + "@types/koa": "*" + } + }, + "@types/koa-compose": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", + "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", + "requires": { + "@types/koa": "*" + } + }, + "@types/level-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", + "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", + "dev": true + }, + "@types/levelup": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", + "dev": true, + "requires": { + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" + } + }, + "@types/lodash": { + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", + "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", + "dev": true + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "@types/memcached": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", + "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", + "requires": { + "@types/node": "*" + } + }, + "@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "@types/mocha": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", + "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", + "dev": true + }, + "@types/morgan": { + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.9.tgz", + "integrity": "sha512-iRYSDKVaC6FkGSpEVVIvrRGw0DfJMiQzIn3qr2G5B3C//AWkulhXgaBd7tS9/J79GWSYMTHGs7PfI5b3Y8m+RQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/mysql": { + "version": "2.15.22", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.22.tgz", + "integrity": "sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "17.0.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.16.tgz", + "integrity": "sha512-ydLaGVfQOQ6hI1xK2A5nVh8bl0OGoIfYMxPWHqqYe9bTkWCfqiVvZoh2I/QF2sNSkZzZyROBoTefIEI+PB6iIA==" + }, + "@types/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "requires": { + "@types/node": "*", + "form-data": "^4.0.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "requires": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "@types/pg-pool": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.4.tgz", + "integrity": "sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==", + "requires": { + "@types/pg": "*" + } + }, + "@types/prettier": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", + "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "dev": true + }, + "@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "@types/react": { + "version": "17.0.39", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.39.tgz", + "integrity": "sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", + "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/shimmer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.5.tgz", + "integrity": "sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww==" + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/superagent": { + "version": "8.1.7", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.7.tgz", + "integrity": "sha512-NmIsd0Yj4DDhftfWvvAku482PZum4DBW7U51OvS8gvOkDDY0WT1jsVyDV3hK+vplrsYw8oDwi9QxOM7U68iwww==", + "dev": true, + "requires": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*" + } + }, + "@types/supertest": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", + "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", + "dev": true, + "requires": { + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" + } + }, + "@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "requires": { + "@types/node": "*" + } + }, + "@types/testing-library__jest-dom": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.2.tgz", + "integrity": "sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg==", + "dev": true, + "requires": { + "@types/jest": "*" + } + }, + "@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, + "@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", + "dev": true + }, + "@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true + }, + "@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz", + "integrity": "sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/type-utils": "5.11.0", + "@typescript-eslint/utils": "5.11.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.11.0.tgz", + "integrity": "sha512-EPvC/bU2n1LKtzKWP1AjGWkp7r8tJ8giVlZHIODo6q7SAd6J+/9vjtEKHK2G/Qp+D2IGPsQge+oadDR3CZcFtQ==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.11.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.11.0.tgz", + "integrity": "sha512-x0DCjetHZYBRovJdr3U0zG9OOdNXUaFLJ82ehr1AlkArljJuwEsgnud+Q7umlGDFLFrs8tU8ybQDFocp/eX8mQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/typescript-estree": "5.11.0", + "debug": "^4.3.2" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz", + "integrity": "sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/visitor-keys": "5.11.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz", + "integrity": "sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.11.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz", + "integrity": "sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz", + "integrity": "sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/visitor-keys": "5.11.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.11.0.tgz", + "integrity": "sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/typescript-estree": "5.11.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz", + "integrity": "sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.11.0", + "eslint-visitor-keys": "^3.0.0" + } + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "@web3-react/abstract-connector": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@web3-react/abstract-connector/-/abstract-connector-6.0.7.tgz", + "integrity": "sha512-RhQasA4Ox8CxUC0OENc1AJJm8UTybu/oOCM61Zjg6y0iF7Z0sqv1Ai1VdhC33hrQpA8qSBgoXN9PaP8jKmtdqg==", + "requires": { + "@web3-react/types": "^6.0.7" + } + }, + "@web3-react/core": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@web3-react/core/-/core-6.1.9.tgz", + "integrity": "sha512-P877DslsbAkWIlMANpWiK7pCvNwlz0kJC0EGckuVh0wlA23J4UnFxq6xyOaxkxaDCu14rA/tAO0NbwjcXTQgSA==", + "requires": { + "@ethersproject/keccak256": "^5.0.0-beta.130", + "@web3-react/abstract-connector": "^6.0.7", + "@web3-react/types": "^6.0.7", + "tiny-invariant": "^1.0.6", + "tiny-warning": "^1.0.3" + } + }, + "@web3-react/injected-connector": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@web3-react/injected-connector/-/injected-connector-6.0.7.tgz", + "integrity": "sha512-Y7aJSz6pg+MWKtvdyuqyy6LWuH+4Tqtph1LWfiyVms9II9ar/9B/de4R8wh4wjg91wmHkU+D75yP09E/Soh2RA==", + "requires": { + "@web3-react/abstract-connector": "^6.0.7", + "@web3-react/types": "^6.0.7", + "tiny-warning": "^1.0.3" + } + }, + "@web3-react/types": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@web3-react/types/-/types-6.0.7.tgz", + "integrity": "sha512-ofGmfDhxmNT1/P/MgVa8IKSkCStFiyvXe+U5tyZurKdrtTDFU+wJ/LxClPDtFerWpczNFPUSrKcuhfPX1sI6+A==" + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "devOptional": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abstract-leveldown": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } + } + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==" + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, + "acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "devOptional": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "requires": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "anser": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz", + "integrity": "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==", + "dev": true, + "peer": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "devOptional": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "devOptional": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "aria-query": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true + }, + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "devOptional": true + }, + "array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "asn1js": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", + "requires": { + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "requires": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, + "requires": { + "async": "^2.4.0" + } + }, + "async-mutex": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz", + "integrity": "sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", + "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", + "dev": true, + "requires": { + "browserslist": "^4.19.1", + "caniuse-lite": "^1.0.30001297", + "fraction.js": "^4.1.2", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "axe-core": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", + "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==", + "dev": true + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "requires": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "dev": true, + "requires": {} + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", + "dev": true + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "dev": true, + "requires": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "bfj": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", + "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "check-types": "^11.1.1", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "bigint-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", + "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", + "requires": { + "bindings": "^1.3.0" + } + }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bit-buffers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bit-buffers/-/bit-buffers-1.0.2.tgz", + "integrity": "sha512-yOK3e4MM2sis7NqecDlomBESCNjQooxCoEzHDhiEY/lrUCaivNzvYkiC/Lnx8TwcYe4tozXoV1AfQHrzflSIDw==", + "requires": { + "base64-js": "^1.5.1", + "pako": "^2.0.4" + } + }, + "blakejs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz", + "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==" + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "borsh": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", + "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "requires": { + "bn.js": "^5.2.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" + } + }, + "bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "broadcast-channel": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-4.10.0.tgz", + "integrity": "sha512-hOUh312XyHk6JTVyX9cyXaH1UYs+2gHVtnW16oQAu9FL7ALcXGXc/YoJWqlkV8vUn14URQPMmRi4A9q4UrwVEQ==", + "requires": { + "@babel/runtime": "^7.16.0", + "detect-node": "^2.1.0", + "microseconds": "0.2.0", + "nano-time": "1.0.0", + "oblivious-set": "1.0.0", + "p-queue": "6.6.2", + "rimraf": "3.0.2", + "unload": "2.3.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + } + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "peer": true, + "requires": { + "pako": "~1.0.5" + }, + "dependencies": { + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "peer": true + } + } + }, + "browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-layout": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz", + "integrity": "sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==" + }, + "buffer-xor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true, + "peer": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "optional": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "caip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/caip/-/caip-1.1.0.tgz", + "integrity": "sha512-yOO3Fu4ygyKYAdznuoaqschMKIZzcdgyMpBNtrIfrUhnOeaOWG+dh0c13wcOS6B/46IGGbncoyzJlio79jU7rw==" + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001638", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz", + "integrity": "sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ==" + }, + "canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "devOptional": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "optional": true + }, + "check-types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", + "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==", + "dev": true, + "peer": true + }, + "clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "optional": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "optional": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true + }, + "colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "dev": true + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "requires": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "devOptional": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-commands": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/command-line-commands/-/command-line-commands-3.0.2.tgz", + "integrity": "sha512-ac6PdCtdR6q7S3HN+JiVLIWGHY30PRYIEl2qPo+FuEuzwAUk0UYyimrngrg7FvF/mCr4Jgoqv5ZnHZgads50rw==", + "optional": true, + "requires": { + "array-back": "^4.0.1" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "optional": true + } + } + }, + "command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "devOptional": true, + "requires": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "devOptional": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "devOptional": true + } + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true, + "peer": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "core-js": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.0.tgz", + "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ==", + "dev": true + }, + "core-js-compat": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", + "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", + "dev": true, + "requires": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-js-pure": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.0.tgz", + "integrity": "sha512-VaJUunCZLnxuDbo1rNOzwbet9E1K9joiXS5+DQMPtgxd24wfsZbJZMMfQLGYMlCUvSxLfsRUUhoOR2x28mFfeg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "crc-32": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz", + "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", + "dev": true, + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.3.1" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "dependencies": { + "@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + } + }, + "@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + } + }, + "@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "requires": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "requires": {} + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true + }, + "expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + } + }, + "jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + } + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true + }, + "jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + } + }, + "jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + } + }, + "jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true + }, + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "requires": { + "node-fetch": "2.6.7" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "crypto-hash": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz", + "integrity": "sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==" + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "css-b64-images": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz", + "integrity": "sha512-TgQBEdP07adhrDfXvI5o6bHGukKBNMzp2Ngckc/6d09zpjD2gc1Hl3Ca1CKgb8FXjHi88+Phv2Uegs2kTL4zjg==" + }, + "css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "css-declaration-sorter": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", + "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", + "dev": true, + "requires": { + "timsort": "^0.3.0" + } + }, + "css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "css-loader": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.6.0.tgz", + "integrity": "sha512-FK7H2lisOixPT406s5gZM1S3l8GrfhEBT3ZiL2UX1Ng1XWs0y2GPllz/OTyvbaHe12VgQrIXIzuEGVlbUhodqg==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.5", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dev": true, + "requires": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "dev": true, + "requires": {} + }, + "css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "dev": true + }, + "cssdb": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.2.0.tgz", + "integrity": "sha512-OP1owHiK7IkCPSmNvWGMOEbfMcPZ8HA1TkzUXzB2SA708Y4pFGXWtLAVxds2QJI/0FA3mCNwRkEA9B4U4fW2Dw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.17.tgz", + "integrity": "sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.1.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz", + "integrity": "sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^3.0.2", + "postcss-calc": "^8.2.0", + "postcss-colormin": "^5.2.5", + "postcss-convert-values": "^5.0.4", + "postcss-discard-comments": "^5.0.3", + "postcss-discard-duplicates": "^5.0.3", + "postcss-discard-empty": "^5.0.3", + "postcss-discard-overridden": "^5.0.4", + "postcss-merge-longhand": "^5.0.6", + "postcss-merge-rules": "^5.0.6", + "postcss-minify-font-values": "^5.0.4", + "postcss-minify-gradients": "^5.0.6", + "postcss-minify-params": "^5.0.5", + "postcss-minify-selectors": "^5.1.3", + "postcss-normalize-charset": "^5.0.3", + "postcss-normalize-display-values": "^5.0.3", + "postcss-normalize-positions": "^5.0.4", + "postcss-normalize-repeat-style": "^5.0.4", + "postcss-normalize-string": "^5.0.4", + "postcss-normalize-timing-functions": "^5.0.3", + "postcss-normalize-unicode": "^5.0.4", + "postcss-normalize-url": "^5.0.5", + "postcss-normalize-whitespace": "^5.0.4", + "postcss-ordered-values": "^5.0.5", + "postcss-reduce-initial": "^5.0.3", + "postcss-reduce-transforms": "^5.0.4", + "postcss-svgo": "^5.0.4", + "postcss-unique-selectors": "^5.0.4" + } + }, + "cssnano-preset-simple": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-3.0.0.tgz", + "integrity": "sha512-vxQPeoMRqUT3c/9f0vWeVa2nKQIHFpogtoBvFdW4GQ3IvEJ6uauCP6p3Y5zQDLFcI7/+40FTgX12o7XUL0Ko+w==", + "dev": true, + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30001202" + } + }, + "cssnano-simple": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-3.0.0.tgz", + "integrity": "sha512-oU3ueli5Dtwgh0DyeohcIEE00QVfbPR3HzyXdAl89SfnQG3y0/qcpfLVW+jPIh3/rgMZGwuW96rejZGaYE9eUg==", + "dev": true, + "peer": true, + "requires": { + "cssnano-preset-simple": "^3.0.0" + } + }, + "cssnano-utils": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.2.tgz", + "integrity": "sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==", + "dev": true, + "requires": {} + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + } + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==", + "dev": true + }, + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "devOptional": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "dev": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } + } + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, + "delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "optional": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "did-jwt": { + "version": "5.12.4", + "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-5.12.4.tgz", + "integrity": "sha512-rFY7yIlE/79zB648Drn9vLiM+F4+3IzRkFvBcHelZqQmnPy037U9VWeeP/f2PlnQKgW5qbYXVJR5KftLfo58TA==", + "requires": { + "@stablelib/ed25519": "^1.0.2", + "@stablelib/random": "^1.0.1", + "@stablelib/sha256": "^1.0.1", + "@stablelib/x25519": "^1.0.1", + "@stablelib/xchacha20poly1305": "^1.0.1", + "bech32": "^2.0.0", + "canonicalize": "^1.0.5", + "did-resolver": "^3.1.5", + "elliptic": "^6.5.4", + "js-sha3": "^0.8.0", + "multiformats": "^9.4.10", + "uint8arrays": "^3.0.0" + }, + "dependencies": { + "bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + } + } + }, + "did-jwt-vc": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/did-jwt-vc/-/did-jwt-vc-2.1.9.tgz", + "integrity": "sha512-FBgJBZkdJAGtF0fp8NPgtJmpglRc/ZQ2C1KNevHKmOLgjPrVIeJw5xL8pw0wFwoA2E+uCaXkrZrNtcLQXHG6IQ==", + "requires": { + "did-jwt": "^5.12.3", + "did-resolver": "^3.1.5" + } + }, + "did-resolver": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.5.tgz", + "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg==" + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-accessibility-api": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.11.tgz", + "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==", + "dev": true + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domain-browser": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz", + "integrity": "sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ==", + "dev": true, + "peer": true + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "eip1193-provider": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/eip1193-provider/-/eip1193-provider-1.0.1.tgz", + "integrity": "sha512-kSuqwQ26d7CzuS/t3yRXo2Su2cVH0QfvyKbr2H7Be7O5YDyIq4hQGCNTo5wRdP07bt+E2R/8nPCzey4ojBHf7g==", + "requires": { + "@json-rpc-tools/provider": "^1.5.5" + } + }, + "ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.4.812", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.812.tgz", + "integrity": "sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "devOptional": true, + "peer": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "devOptional": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "dev": true, + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + } + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + } + }, + "es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "devOptional": true + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-config-next": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.1.0.tgz", + "integrity": "sha512-tBhuUgoDITcdcM7xFvensi9I5WTI4dnvH4ETGRg1U8ZKpXrZsWQFdOKIDzR3RLP5HR3xXrLviaMM4c3zVoE/pA==", + "dev": true, + "requires": { + "@next/eslint-plugin-next": "12.1.0", + "@rushstack/eslint-patch": "^1.0.8", + "@typescript-eslint/parser": "^5.0.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-import-resolver-typescript": "^2.4.0", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.0", + "eslint-plugin-react-hooks": "^4.3.0" + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-config-react-app": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.0.tgz", + "integrity": "sha512-xyymoxtIt1EOsSaGag+/jmcywRuieQoA2JbPCjnw9HukFj9/97aGPoZVFioaotzk1K5Qt9sHO5EutZbkrAXS0g==", + "dev": true, + "requires": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-import-resolver-typescript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", + "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", + "dev": true, + "requires": { + "debug": "^4.3.1", + "glob": "^7.1.7", + "is-glob": "^4.0.1", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.9.0" + } + }, + "eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "dev": true, + "requires": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + } + }, + "eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "requires": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^5.0.0" + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "dev": true, + "requires": { + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" + }, + "dependencies": { + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + } + } + }, + "eslint-plugin-react": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", + "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", + "dev": true, + "requires": {} + }, + "eslint-plugin-testing-library": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.0.5.tgz", + "integrity": "sha512-0j355vJpJCE/2g+aayIgJRUB6jBVqpD5ztMLGcadR1PgrgGPnPxN1HJuOAsAAwiMo27GwRnpJB8KOQzyNuNZrw==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "^5.10.2" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "eslint-webpack-plugin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", + "dev": true, + "requires": { + "@types/eslint": "^7.28.2", + "jest-worker": "^27.3.1", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1" + } + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eth-rpc-errors": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", + "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", + "requires": { + "fast-safe-stringify": "^2.0.6" + } + }, + "eth-sig-util": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.4.tgz", + "integrity": "sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A==", + "dev": true, + "requires": { + "ethereumjs-abi": "0.6.8", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereum": { + "version": "file:packages/ethereum", + "requires": { + "@babel/preset-typescript": "^7.16.7", + "@nomiclabs/hardhat-ethers": "^2.0.4", + "@openzeppelin/contracts": "^4.4.2", + "@typechain/ethers-v5": "^9.0.0", + "@typechain/hardhat": "^4.0.0", + "@types/jest": "^27.4.0", + "@types/node": "^17.0.16", + "dotenv": "^16.0.0", + "eslint": "^8.4.0", + "eslint-config-prettier": "^8.3.0", + "eslint-import-resolver-typescript": "^2.5.0", + "eslint-plugin-import": "^2.25.3", + "ethers": "^5.5.4", + "hardhat": "^2.8.2", + "jest": "^27.5.0", + "prettier": "^2.5.1", + "ts-node": "^10.5.0", + "typechain": "^7.0.0", + "typescript": "^4.5.5", + "verifier": "*" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereum-dapp": { + "version": "file:packages/ethereum-dapp", + "requires": { + "@ethersproject/providers": "^5.5.3", + "@types/node": "17.0.8", + "@types/react": "^17.0.0", + "@types/react-dom": "^17.0.0", + "@web3-react/core": "^6.1.9", + "@web3-react/injected-connector": "^6.0.7", + "eslint": "^8.6.0", + "eslint-config-next": "^12.0.7", + "next": "12.1.0", + "react": "17.0.2", + "react-dom": "17.0.2", + "shx": "^0.3.3", + "typescript": "~4.4.4" + }, + "dependencies": { + "@next/env": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.1.0.tgz", + "integrity": "sha512-nrIgY6t17FQ9xxwH3jj0a6EOiQ/WDHUos35Hghtr+SWN/ntHIQ7UpuvSi0vaLzZVHQWaDupKI+liO5vANcDeTQ==" + }, + "@next/swc-android-arm64": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.0.tgz", + "integrity": "sha512-/280MLdZe0W03stA69iL+v6I+J1ascrQ6FrXBlXGCsGzrfMaGr7fskMa0T5AhQIVQD4nA/46QQWxG//DYuFBcA==", + "optional": true + }, + "@next/swc-darwin-arm64": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.0.tgz", + "integrity": "sha512-R8vcXE2/iONJ1Unf5Ptqjk6LRW3bggH+8drNkkzH4FLEQkHtELhvcmJwkXcuipyQCsIakldAXhRbZmm3YN1vXg==", + "optional": true + }, + "@next/swc-darwin-x64": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.0.tgz", + "integrity": "sha512-ieAz0/J0PhmbZBB8+EA/JGdhRHBogF8BWaeqR7hwveb6SYEIJaDNQy0I+ZN8gF8hLj63bEDxJAs/cEhdnTq+ug==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.0.tgz", + "integrity": "sha512-njUd9hpl6o6A5d08dC0cKAgXKCzm5fFtgGe6i0eko8IAdtAPbtHxtpre3VeSxdZvuGFh+hb0REySQP9T1ttkog==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.0.tgz", + "integrity": "sha512-OqangJLkRxVxMhDtcb7Qn1xjzFA3s50EIxY7mljbSCLybU+sByPaWAHY4px97ieOlr2y4S0xdPKkQ3BCAwyo6Q==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.0.tgz", + "integrity": "sha512-hB8cLSt4GdmOpcwRe2UzI5UWn6HHO/vLkr5OTuNvCJ5xGDwpPXelVkYW/0+C3g5axbDW2Tym4S+MQCkkH9QfWA==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.0.tgz", + "integrity": "sha512-OKO4R/digvrVuweSw/uBM4nSdyzsBV5EwkUeeG4KVpkIZEe64ZwRpnFB65bC6hGwxIBnTv5NMSnJ+0K/WmG78A==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.0.tgz", + "integrity": "sha512-JohhgAHZvOD3rQY7tlp7NlmvtvYHBYgY0x5ZCecUT6eCCcl9lv6iV3nfu82ErkxNk1H893fqH0FUpznZ/H3pSw==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.0.tgz", + "integrity": "sha512-T/3gIE6QEfKIJ4dmJk75v9hhNiYZhQYAoYm4iVo1TgcsuaKLFa+zMPh4056AHiG6n9tn2UQ1CFE8EoybEsqsSw==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.0.tgz", + "integrity": "sha512-iwnKgHJdqhIW19H9PRPM9j55V6RdcOo6rX+5imx832BCWzkDbyomWnlzBfr6ByUYfhohb8QuH4hSGEikpPqI0Q==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.0.tgz", + "integrity": "sha512-aBvcbMwuanDH4EMrL2TthNJy+4nP59Bimn8egqv6GHMVj0a44cU6Au4PjOhLNqEh9l+IpRGBqMTzec94UdC5xg==", + "optional": true + }, + "@types/node": { + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", + "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", + "dev": true + }, + "next": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/next/-/next-12.1.0.tgz", + "integrity": "sha512-s885kWvnIlxsUFHq9UGyIyLiuD0G3BUC/xrH0CEnH5lHEWkwQcHOORgbDF0hbrW9vr/7am4ETfX4A7M6DjrE7Q==", + "requires": { + "@next/env": "12.1.0", + "@next/swc-android-arm64": "12.1.0", + "@next/swc-darwin-arm64": "12.1.0", + "@next/swc-darwin-x64": "12.1.0", + "@next/swc-linux-arm-gnueabihf": "12.1.0", + "@next/swc-linux-arm64-gnu": "12.1.0", + "@next/swc-linux-arm64-musl": "12.1.0", + "@next/swc-linux-x64-gnu": "12.1.0", + "@next/swc-linux-x64-musl": "12.1.0", + "@next/swc-win32-arm64-msvc": "12.1.0", + "@next/swc-win32-ia32-msvc": "12.1.0", + "@next/swc-win32-x64-msvc": "12.1.0", + "caniuse-lite": "^1.0.30001283", + "postcss": "8.4.5", + "styled-jsx": "5.0.0", + "use-subscription": "1.5.1" + } + }, + "postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + } + }, + "styled-jsx": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0.tgz", + "integrity": "sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA==", + "requires": {} + }, + "typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true + } + } + }, + "ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "ethereumjs-util": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz", + "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "dependencies": { + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + } + } + }, + "ethers": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.4.tgz", + "integrity": "sha512-N9IAXsF8iKhgHIC6pquzRgPBJEzc9auw3JoRkaKe+y4Wl/LFBtDDunNe7YmdomontECAcC5APaAgWZBiu1kirw==", + "requires": { + "@ethersproject/abi": "5.5.0", + "@ethersproject/abstract-provider": "5.5.1", + "@ethersproject/abstract-signer": "5.5.0", + "@ethersproject/address": "5.5.0", + "@ethersproject/base64": "5.5.0", + "@ethersproject/basex": "5.5.0", + "@ethersproject/bignumber": "5.5.0", + "@ethersproject/bytes": "5.5.0", + "@ethersproject/constants": "5.5.0", + "@ethersproject/contracts": "5.5.0", + "@ethersproject/hash": "5.5.0", + "@ethersproject/hdnode": "5.5.0", + "@ethersproject/json-wallets": "5.5.0", + "@ethersproject/keccak256": "5.5.0", + "@ethersproject/logger": "5.5.0", + "@ethersproject/networks": "5.5.2", + "@ethersproject/pbkdf2": "5.5.0", + "@ethersproject/properties": "5.5.0", + "@ethersproject/providers": "5.5.3", + "@ethersproject/random": "5.5.1", + "@ethersproject/rlp": "5.5.0", + "@ethersproject/sha2": "5.5.0", + "@ethersproject/signing-key": "5.5.0", + "@ethersproject/solidity": "5.5.0", + "@ethersproject/strings": "5.5.0", + "@ethersproject/transactions": "5.5.0", + "@ethersproject/units": "5.5.0", + "@ethersproject/wallet": "5.5.0", + "@ethersproject/web": "5.5.1", + "@ethersproject/wordlists": "5.5.0" + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "examples": { + "version": "file:packages/examples", + "requires": { + "@types/node": "^16.11.11", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "cross-fetch": "^3.1.4", + "eslint": "^8.4.0", + "eslint-config-prettier": "^8.3.0", + "eslint-import-resolver-typescript": "^2.5.0", + "eslint-plugin-import": "^2.25.3", + "jose": "^4.4.0", + "prettier": "^2.5.1", + "ts-node": "^10.4.0", + "typescript": "^4.5.2", + "verifier": "*" + }, + "dependencies": { + "@types/node": { + "version": "16.11.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", + "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==", + "dev": true + } + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "dev": true + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, + "express-async-handler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/express-async-handler/-/express-async-handler-1.2.0.tgz", + "integrity": "sha512-rCSVtPXRmQSW8rmik/AIb2P0op6l7r1fMW538yyvTMltCO4xQEWMmobfrIxN2V1/mVrgxB8Az3reYF6yUZw37w==" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "optional": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==" + }, + "factory.ts": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/factory.ts/-/factory.ts-0.5.2.tgz", + "integrity": "sha512-I4YDKuyMW+s2PocnWh/Ekv9wSStt/MNN1ZRb1qhy0Kv056ndlzbLHDsW9KEmTAqMpLI3BtjSqEdZ7ZfdnaXn9w==", + "requires": { + "clone-deep": "^4.0.1", + "source-map-support": "^0.5.19" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "fast-stable-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", + "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" + }, + "fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "requires": { + "strnum": "^1.0.5" + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "fetch-blob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", + "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "optional": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, + "find": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", + "integrity": "sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==", + "requires": { + "traverse-chain": "~0.1.0" + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "devOptional": true, + "requires": { + "array-back": "^3.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "follow-redirects": { + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "dev": true, + "requires": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "fraction.js": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.3.tgz", + "integrity": "sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "optional": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "gaxios": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.0.tgz", + "integrity": "sha512-DSrkyMTfAnAm4ks9Go20QGOcXEyW/NmZhvTYBU2rb4afBB393WIMQPWPEDMl/k8xqiNN9HYq2zao3oWXsdl2Tg==", + "requires": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9", + "uuid": "^10.0.0" + }, + "dependencies": { + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "requires": { + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "requires": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-orientation": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz", + "integrity": "sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==", + "dev": true, + "peer": true, + "requires": { + "stream-parser": "^0.3.1" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + } + }, + "get-tsconfig": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "dev": true, + "requires": { + "resolve-pkg-maps": "^1.0.0" + } + }, + "git-config": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/git-config/-/git-config-0.0.7.tgz", + "integrity": "sha512-LidZlYZXWzVjS+M3TEwhtYBaYwLeOZrXci1tBgqp/vDdZTBMl02atvwb6G35L64ibscYoPnxfbwwUS+VZAISLA==", + "optional": true, + "requires": { + "iniparser": "~1.0.5" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "requires": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "optional": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "hardhat": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.8.3.tgz", + "integrity": "sha512-VxqiVTSayRoeLHly8zKnlvtWoG8sroTP4vl8GHuj7OjfAdrHu4Blk7NBJ5+Rl8cmMEp6CuZtDaDmcHJIRTwEPA==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.0", + "@ethereumjs/blockchain": "^5.5.0", + "@ethereumjs/common": "^2.6.0", + "@ethereumjs/tx": "^3.4.0", + "@ethereumjs/vm": "^5.6.0", + "@ethersproject/abi": "^5.1.2", + "@sentry/node": "^5.18.1", + "@solidity-parser/parser": "^0.14.0", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "abort-controller": "^3.0.0", + "adm-zip": "^0.4.16", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "eth-sig-util": "^2.5.2", + "ethereum-cryptography": "^0.1.2", + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^7.1.3", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "^7.1.3", + "https-proxy-agent": "^5.0.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "lodash": "^4.17.11", + "merkle-patricia-tree": "^4.2.2", + "mnemonist": "^0.38.0", + "mocha": "^7.2.0", + "node-fetch": "^2.6.0", + "qs": "^6.7.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "slash": "^3.0.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "true-case-path": "^2.2.1", + "tsort": "0.0.1", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "dependencies": { + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "devOptional": true + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "helmet": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.1.0.tgz", + "integrity": "sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==" + }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "hot-shots": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-10.0.0.tgz", + "integrity": "sha512-uy/uGpuJk7yuyiKRfZMBNkF1GAOX5O2ifO9rDCaX9jw8fu6eW9QeWC7WRPDI+O98frW1HQgV3+xwjWsZPECIzQ==", + "requires": { + "unix-dgram": "2.x" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + } + } + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, + "http-parser-js": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", + "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true, + "peer": true + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "devOptional": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "idb": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", + "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==", + "dev": true + }, + "identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", + "dev": true, + "requires": { + "harmony-reflect": "^1.4.6" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "image-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", + "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", + "dev": true, + "peer": true, + "requires": { + "queue": "6.0.2" + } + }, + "immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true + }, + "immer": { + "version": "9.0.12", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz", + "integrity": "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==", + "dev": true + }, + "immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-in-the-middle": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.8.1.tgz", + "integrity": "sha512-yhRwoHtiLGvmSozNOALgjRPFI6uYsds60EoMqqnXyyv+JOIW/BrrLejuTGBt+bq0T5tLzOHrN0T7xYTm4Qt/ng==", + "requires": { + "acorn": "^8.8.2", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "iniparser": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/iniparser/-/iniparser-1.0.5.tgz", + "integrity": "sha512-i40MWqgTU6h/70NtMsDVVDLjDYWwcIR1yIEVDPfxZIJno9z9L4s83p/V7vAu2i48Vj0gpByrkGFub7ko9XvPrw==", + "optional": true + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "optional": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "optional": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "requires": { + "fp-ts": "^1.0.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, + "is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "requires": { + "hasown": "^2.0.2" + } + }, + "is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "requires": { + "is-typed-array": "^1.1.13" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "devOptional": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "requires": { + "which-typed-array": "^1.1.14" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, + "isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "requires": {} + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jayson": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz", + "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==", + "requires": { + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "JSONStream": "^1.3.5", + "uuid": "^8.3.2", + "ws": "^7.4.5" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + } + } + }, + "jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + } + }, + "jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true + }, + "jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watch-typeahead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.0.0.tgz", + "integrity": "sha512-jxoszalAb394WElmiJTFBMzie/RDCF+W7Q29n5LzOPtcoQoHWfdUtHFkbhgf5NwWe8uMOxvKb/g7ea7CshfkTw==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^27.0.0", + "jest-watcher": "^27.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.0.tgz", + "integrity": "sha512-oGu2QekBMXgyQNWPDRQ001bjvDnZe4/zBTz37TMbiKz1NbNiyiH5hRkobe7npRN6GfbGbxMYFck/vQ1r9c1VMA==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + }, + "string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, + "requires": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" + }, + "jose": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.5.0.tgz", + "integrity": "sha512-GFcVFQwYQKbQTUOo2JlpFGXTkgBw26uzDsRMD2q1WgSKNSnpKS9Ug7bdQ8dS+p4sZHNH6iRPu6WK2jLIjspaMA==" + }, + "js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-rpc-random-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", + "integrity": "sha1-uknZat7RRE27jaPSA3SKy7zeyMg=" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonld": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-5.2.0.tgz", + "integrity": "sha512-JymgT6Xzk5CHEmHuEyvoTNviEPxv6ihLWSPu1gFdtjSAyM6cFqNrv02yS/SIur3BBIkCf0HjizRc24d8/FfQKw==", + "requires": { + "@digitalbazaar/http-client": "^1.1.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "jsonld-checker": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/jsonld-checker/-/jsonld-checker-0.1.8.tgz", + "integrity": "sha512-jclmnPRrm5SEpaIV6IiSTJxplRAqIWHduQLsUfrYpZM41Ng48m1RN2/aUyHze/ynfO0D2UhlJBt8SdObsH5GBw==", + "requires": { + "jsonld": "^5.2.0", + "node-fetch": "^2.6.1" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" + }, + "jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "requires": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + }, + "dependencies": { + "esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=" + } + } + }, + "jsonpointer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", + "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + } + }, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "keyvaluestorage-interface": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz", + "integrity": "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==" + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true + }, + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "ky": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", + "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==" + }, + "ky-universal": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", + "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", + "requires": { + "abort-controller": "^3.0.0", + "node-fetch": "3.0.0-beta.9" + }, + "dependencies": { + "node-fetch": { + "version": "3.0.0-beta.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", + "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", + "requires": { + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^2.1.1" + } + } + } + }, + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "requires": { + "buffer": "^5.6.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + } + }, + "level-mem": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", + "dev": true, + "requires": { + "level-packager": "^5.0.3", + "memdown": "^5.0.0" + } + }, + "level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "dev": true, + "requires": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "requires": { + "xtend": "^4.0.2" + } + }, + "level-ws": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "dev": true, + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2" + } + }, + "logform": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", + "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "requires": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, + "loglevel": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==" + }, + "long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", + "dev": true + }, + "lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "devOptional": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "make-promises-safe": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/make-promises-safe/-/make-promises-safe-5.1.0.tgz", + "integrity": "sha512-AfdZ49rtyhQR/6cqVKGoH7y4ql7XkS5HJI1lZm0/5N6CQosy1eYbBJ/qbhkKHzo17UH7M918Bysf6XB9f3kS1g==", + "optional": true + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "dev": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=", + "dev": true + } + } + }, + "memfs": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", + "dev": true, + "requires": { + "fs-monkey": "1.0.3" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "merkle-patricia-tree": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.3.tgz", + "integrity": "sha512-S4xevdXl5KvdBGgUxhQcxoep0onqXiIhzfwZp4M78kIuJH3Pu9o9IUgqhzSFOR2ykLO6t265026Xb6PY0q2UFQ==", + "dev": true, + "requires": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "microseconds": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", + "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==" + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "devOptional": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz", + "integrity": "sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "minify": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/minify/-/minify-11.2.1.tgz", + "integrity": "sha512-ltd2Q1CoZBq8rFf51GfRprDgROKNjasl4rEaWxXUU1cMjHAdnMX2fg81AR3UMJXrU0OAi91O5YSQeWv5aKxxsA==", + "requires": { + "@putout/minify": "^4.0.0", + "clean-css": "^5.0.1", + "css-b64-images": "~0.2.5", + "debug": "^4.1.0", + "find-up": "^7.0.0", + "html-minifier-terser": "^7.1.0", + "readjson": "^2.2.2", + "simport": "^1.2.0", + "terser": "^5.28.1", + "try-catch": "^3.0.0", + "try-to-catch": "^3.0.0" + }, + "dependencies": { + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "requires": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + } + }, + "html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "requires": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "devOptional": true + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "requires": { + "obliterator": "^2.0.0" + } + }, + "mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "dev": true, + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + } + } + }, + "module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multibase": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", + "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", + "requires": { + "@multiformats/base-x": "^4.0.1" + } + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "multiformats": { + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.3.tgz", + "integrity": "sha512-yfXKI66fL0nFzt0nJl26i4wV1qAqbAEIBvfFbkbsne9GrLz6IHvHUoRyxUtlJcdP181ssOgjama6E/VSk4pbrA==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "optional": true + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, + "nano-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", + "integrity": "sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8=", + "requires": { + "big-integer": "^1.6.16" + } + }, + "nanoid": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "devOptional": true + }, + "neon-cli": { + "version": "https://registry.npmjs.org/neon-cli/-/neon-cli-0.10.1.tgz", + "integrity": "sha512-kOd9ELaYETe1J1nBEOYD7koAZVj6xR9TGwOPccAsWmwL5amkaXXXwXHCUHkBAWujlgSZY5f2pT+pFGkzoHExYQ==", + "optional": true, + "requires": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-commands": "^3.0.1", + "command-line-usage": "^6.1.0", + "git-config": "0.0.7", + "handlebars": "^4.7.6", + "inquirer": "^7.3.3", + "make-promises-safe": "^5.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "toml": "^3.0.0", + "ts-typed-json": "^0.3.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "optional": true + }, + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "optional": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "next": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/next/-/next-12.0.7.tgz", + "integrity": "sha512-sKO8GJJYfuk9c+q+zHSNumvff+wP7ufmOlwT6BuzwiYfFJ61VTTkfTcDLSJ+95ErQJiC54uS4Yg5JEE8H6jXRA==", + "dev": true, + "peer": true, + "requires": { + "@babel/runtime": "7.15.4", + "@hapi/accept": "5.0.2", + "@napi-rs/triples": "1.0.3", + "@next/env": "12.0.7", + "@next/polyfill-module": "12.0.7", + "@next/react-dev-overlay": "12.0.7", + "@next/react-refresh-utils": "12.0.7", + "@next/swc-android-arm64": "12.0.7", + "@next/swc-darwin-arm64": "12.0.7", + "@next/swc-darwin-x64": "12.0.7", + "@next/swc-linux-arm-gnueabihf": "12.0.7", + "@next/swc-linux-arm64-gnu": "12.0.7", + "@next/swc-linux-arm64-musl": "12.0.7", + "@next/swc-linux-x64-gnu": "12.0.7", + "@next/swc-linux-x64-musl": "12.0.7", + "@next/swc-win32-arm64-msvc": "12.0.7", + "@next/swc-win32-ia32-msvc": "12.0.7", + "@next/swc-win32-x64-msvc": "12.0.7", + "acorn": "8.5.0", + "assert": "2.0.0", + "browserify-zlib": "0.2.0", + "browserslist": "4.16.6", + "buffer": "5.6.0", + "caniuse-lite": "^1.0.30001228", + "chalk": "2.4.2", + "chokidar": "3.5.1", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "cssnano-simple": "3.0.0", + "domain-browser": "4.19.0", + "encoding": "0.1.13", + "etag": "1.8.1", + "events": "3.3.0", + "find-cache-dir": "3.3.1", + "get-orientation": "1.1.2", + "https-browserify": "1.0.0", + "image-size": "1.0.0", + "jest-worker": "27.0.0-next.5", + "node-fetch": "2.6.1", + "node-html-parser": "1.4.9", + "os-browserify": "0.3.0", + "p-limit": "3.1.0", + "path-browserify": "1.0.1", + "postcss": "8.2.15", + "process": "0.11.10", + "querystring-es3": "0.2.1", + "raw-body": "2.4.1", + "react-is": "17.0.2", + "react-refresh": "0.8.3", + "regenerator-runtime": "0.13.4", + "stream-browserify": "3.0.0", + "stream-http": "3.1.1", + "string_decoder": "1.3.0", + "styled-jsx": "5.0.0-beta.3", + "timers-browserify": "2.0.12", + "tty-browserify": "0.0.1", + "use-subscription": "1.5.1", + "util": "0.12.4", + "vm-browserify": "1.1.2", + "watchpack": "2.3.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dev": true, + "peer": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@next/react-refresh-utils": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-12.0.7.tgz", + "integrity": "sha512-Pglj1t+7RxH0txEqVcD8ZxrJgqLDmKvQDqxKq3ZPRWxMv7LTl7FVT2Pnb36QFeBwCvMVl67jxsADKsW0idz8sA==", + "dev": true, + "peer": true, + "requires": {} + }, + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "peer": true + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "peer": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "peer": true + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "peer": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "peer": true + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "peer": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "peer": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "jest-worker": { + "version": "27.0.0-next.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.0-next.5.tgz", + "integrity": "sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true, + "peer": true + }, + "node-releases": { + "version": "1.1.77", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", + "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==", + "dev": true, + "peer": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "peer": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "postcss": { + "version": "8.2.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", + "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", + "dev": true, + "peer": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map": "^0.6.1" + } + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "peer": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react-refresh": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", + "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==", + "dev": true, + "peer": true + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "peer": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz", + "integrity": "sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g==", + "dev": true, + "peer": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "peer": true + }, + "watchpack": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", + "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", + "dev": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + } + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "nock": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.4.tgz", + "integrity": "sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + } + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "node-forge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", + "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", + "dev": true + }, + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" + }, + "node-html-parser": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz", + "integrity": "sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==", + "dev": true, + "peer": true, + "requires": { + "he": "1.2.0" + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "nodemon": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", + "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true + } + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "optional": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true + }, + "object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + } + }, + "object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "obliterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.1.tgz", + "integrity": "sha512-XnkiCrrBcIZQitJPAI36mrrpEUvatbte8hLcTcQwKA1v9NkCKasSi+UAguLsLDs/out7MoRzAlmz7VXvY6ph6w==", + "dev": true + }, + "oblivious-set": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", + "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==" + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "devOptional": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true, + "peer": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "devOptional": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, + "p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "dev": true, + "requires": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "peer": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pg": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "requires": { + "pg-cloudflare": "^1.1.1", + "pg-connection-string": "^2.6.4", + "pg-pool": "^3.6.2", + "pg-protocol": "^1.6.1", + "pg-types": "^2.1.0", + "pgpass": "1.x" + } + }, + "pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "pg-connection-string": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", + "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", + "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "requires": {} + }, + "pg-protocol": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", + "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "requires": { + "split2": "^4.1.0" + } + }, + "picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, + "pkh-did-resolver": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkh-did-resolver/-/pkh-did-resolver-2.0.0.tgz", + "integrity": "sha512-OspfuI99LxLQ02/+tynJjQYEVmagSxKZIZQwv+54SNYWYQSI2dSZGOQmN2l3a2IptUj7AZ8Z7WzZPu+XY4siXQ==", + "requires": { + "caip": "~1.1.0" + } + }, + "platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "dev": true, + "peer": true + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==" + }, + "postcss": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", + "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", + "dev": true, + "requires": { + "nanoid": "^3.2.0", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-attribute-case-insensitive": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz", + "integrity": "sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.2" + } + }, + "postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "dev": true, + "requires": {} + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-clamp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-3.0.0.tgz", + "integrity": "sha512-QENQMIF/Grw0qX0RzSPJjw+mAiGPIwG2AnsQDIoR/WJ5Q19zLB0NrZX8cH7CzzdDWEerTPGCdep7ItFaAdtItg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-color-functional-notation": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz", + "integrity": "sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-hex-alpha": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.3.tgz", + "integrity": "sha512-fESawWJCrBV035DcbKRPAVmy21LpoyiXdPTuHUfWJ14ZRjY7Y7PA6P4g8z6LQGYhU1WAxkTxjIjurXzoe68Glw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-rebeccapurple": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", + "integrity": "sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.5.tgz", + "integrity": "sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz", + "integrity": "sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-media": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz", + "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==", + "dev": true, + "requires": {} + }, + "postcss-custom-properties": { + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.4.tgz", + "integrity": "sha512-i6AytuTCoDLJkWN/MtAIGriJz3j7UX6bV7Z5t+KgFz+dwZS15/mlTJY1S0kRizlk6ba0V8u8hN50Fz5Nm7tdZw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-selectors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz", + "integrity": "sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-dir-pseudo-class": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", + "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-discard-comments": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz", + "integrity": "sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==", + "dev": true, + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz", + "integrity": "sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==", + "dev": true, + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz", + "integrity": "sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==", + "dev": true, + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz", + "integrity": "sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==", + "dev": true, + "requires": {} + }, + "postcss-double-position-gradients": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.0.5.tgz", + "integrity": "sha512-XiZzvdxLOWZwtt/1GgHJYGoD9scog/DD/yI5dcvPrXNdNDEv7T53/6tL7ikl+EM3jcerII5/XIQzd1UHOdTi2w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-env-function": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.5.tgz", + "integrity": "sha512-gPUJc71ji9XKyl0WSzAalBeEA/89kU+XpffpPxSaaaZ1c48OL36r1Ep5R6+9XAPkIiDlSvVAwP4io12q/vTcvA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "dev": true, + "requires": {} + }, + "postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "dev": true, + "requires": {} + }, + "postcss-gap-properties": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", + "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", + "dev": true, + "requires": {} + }, + "postcss-image-set-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", + "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "dev": true, + "requires": {} + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-lab-function": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.0.4.tgz", + "integrity": "sha512-TAEW8X/ahMYV33mvLFQARtBPAy1VVJsiR9VVx3Pcbu+zlqQj0EIyJ/Ie1/EwxwIt530CWtEDzzTXBDzfdb+qIQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-load-config": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", + "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.4", + "yaml": "^1.10.2" + } + }, + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "dev": true, + "requires": {} + }, + "postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "dev": true, + "requires": {} + }, + "postcss-merge-longhand": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz", + "integrity": "sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.0.3" + } + }, + "postcss-merge-rules": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz", + "integrity": "sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.0.2", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz", + "integrity": "sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz", + "integrity": "sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.0.2", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz", + "integrity": "sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.0.2", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz", + "integrity": "sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "postcss-nesting": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.2.tgz", + "integrity": "sha512-dJGmgmsvpzKoVMtDMQQG/T6FSqs6kDtUDirIfl4KnjMCiY9/ETX8jdKyCd20swSRAbUYkaBKV20pxkzxoOXLqQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.8" + } + }, + "postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "dev": true, + "requires": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + } + }, + "postcss-normalize-charset": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz", + "integrity": "sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==", + "dev": true, + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz", + "integrity": "sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz", + "integrity": "sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz", + "integrity": "sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz", + "integrity": "sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz", + "integrity": "sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz", + "integrity": "sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz", + "integrity": "sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "dependencies": { + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz", + "integrity": "sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-opacity-percentage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", + "dev": true + }, + "postcss-ordered-values": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz", + "integrity": "sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==", + "dev": true, + "requires": { + "cssnano-utils": "^3.0.2", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-overflow-shorthand": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", + "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", + "dev": true, + "requires": {} + }, + "postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "dev": true, + "requires": {} + }, + "postcss-place": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", + "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-preset-env": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.3.1.tgz", + "integrity": "sha512-x7fNsJxfkY60P4FUNwhJUOfXBFfnObd2EcUYY97sXZ0XRLgmAE65es9EFIYHq1rAk7X3LMfbG+L9wYgkrNsq5Q==", + "dev": true, + "requires": { + "@csstools/postcss-font-format-keywords": "^1.0.0", + "@csstools/postcss-hwb-function": "^1.0.0", + "@csstools/postcss-is-pseudo-class": "^2.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.0", + "autoprefixer": "^10.4.2", + "browserslist": "^4.19.1", + "css-blank-pseudo": "^3.0.2", + "css-has-pseudo": "^3.0.3", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^6.1.0", + "postcss-attribute-case-insensitive": "^5.0.0", + "postcss-clamp": "^3.0.0", + "postcss-color-functional-notation": "^4.2.1", + "postcss-color-hex-alpha": "^8.0.2", + "postcss-color-rebeccapurple": "^7.0.2", + "postcss-custom-media": "^8.0.0", + "postcss-custom-properties": "^12.1.4", + "postcss-custom-selectors": "^6.0.0", + "postcss-dir-pseudo-class": "^6.0.3", + "postcss-double-position-gradients": "^3.0.4", + "postcss-env-function": "^4.0.4", + "postcss-focus-visible": "^6.0.3", + "postcss-focus-within": "^5.0.3", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.2", + "postcss-image-set-function": "^4.0.5", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.0.3", + "postcss-logical": "^5.0.3", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.1.2", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.2", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.3", + "postcss-pseudo-class-any-link": "^7.1.0", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^5.0.0" + } + }, + "postcss-pseudo-class-any-link": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.1.tgz", + "integrity": "sha512-JRoLFvPEX/1YTPxRxp1JO4WxBVXJYrSY7NHeak5LImwJ+VobFMwYDQHvfTXEpcn+7fYIeGkC29zYFhFWIZD8fg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-reduce-initial": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz", + "integrity": "sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz", + "integrity": "sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "dev": true, + "requires": {} + }, + "postcss-selector-not": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", + "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.4.tgz", + "integrity": "sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + } + } + }, + "postcss-unique-selectors": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz", + "integrity": "sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==", + "dev": true + }, + "prisma": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.16.1.tgz", + "integrity": "sha512-Z1Uqodk44diztImxALgJJfNl2Uisl9xDRvqybMKEBYJLNKNhDfAHf+ZIJbZyYiBhLMbKU9cYGdDVG5IIXEnL2Q==", + "devOptional": true, + "requires": { + "@prisma/engines": "5.16.1" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "requires": { + "asap": "~2.0.6" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + } + } + }, + "propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true + }, + "protobufjs": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", + "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true + }, + "pvtsutils": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", + "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", + "requires": { + "tslib": "^2.6.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "peer": true + }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "peer": true, + "requires": { + "inherits": "~2.0.3" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, + "requires": { + "performance-now": "^2.1.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "requires": { + "setimmediate": "^1.0.5" + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "dev": true, + "requires": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + } + }, + "react-app-rewired": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-2.2.1.tgz", + "integrity": "sha512-uFQWTErXeLDrMzOJHKp0h8P1z0LV9HzPGsJ6adOtGlA/B9WfT6Shh4j2tLTTGlXOfiVx6w6iWpp7SOC5pvk+gA==", + "dev": true, + "requires": { + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "react-dev-utils": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz", + "integrity": "sha512-xBQkitdxozPxt1YZ9O1097EJiVpwHr9FoAuEVURCKV0Av8NBERovJauzP7bo1ThvuhZ4shsQ1AJiu4vQpoT1AQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.10", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-error-overlay": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.10.tgz", + "integrity": "sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true + }, + "react-scripts": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz", + "integrity": "sha512-3i0L2CyIlROz7mxETEdfif6Sfhh9Lfpzi10CtcGs1emDQStmZfWjJbAIMtRD0opVUjQuFWqHZyRZ9PPzKCFxWg==", + "dev": true, + "requires": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.0", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "fsevents": "^2.3.2", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.0", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "readjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/readjson/-/readjson-2.2.2.tgz", + "integrity": "sha512-PdeC9tsmLWBiL8vMhJvocq+OezQ3HhsH2HrN7YkhfYcTjQSa/iraB15A7Qvt7Xpr0Yd2rDNt6GbFwVQDg3HcAw==", + "requires": { + "jju": "^1.4.0", + "try-catch": "^3.0.0" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dev": true, + "requires": { + "minimatch": "3.0.4" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "devOptional": true + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "require-in-the-middle": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.3.0.tgz", + "integrity": "sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw==", + "requires": { + "debug": "^4.1.1", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.1" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true + }, + "resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "optional": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfc4648": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.2.tgz", + "integrity": "sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "rollup": { + "version": "2.67.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.1.tgz", + "integrity": "sha512-1Sbcs4OuW+aD+hhqpIRl+RqooIpF6uQcfzU/QSI7vGkwADY6cM4iLsBGRM2CGLXDTDN5y/yShohFmnKegSPWzg==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "rpc-websockets": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.0.2.tgz", + "integrity": "sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==", + "requires": { + "@swc/helpers": "^0.5.11", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.2.2", + "buffer": "^6.0.3", + "bufferutil": "^4.0.1", + "eventemitter3": "^5.0.1", + "utf-8-validate": "^5.0.2", + "uuid": "^8.3.2", + "ws": "^8.5.0" + }, + "dependencies": { + "@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + }, + "@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "requires": { + "@types/node": "*" + } + }, + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "requires": {} + } + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "optional": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-json-utils": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/safe-json-utils/-/safe-json-utils-1.1.1.tgz", + "integrity": "sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==" + }, + "safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + } + }, + "safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", + "dev": true + }, + "sass-loader": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", + "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", + "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", + "dev": true, + "requires": { + "node-forge": "^1.2.0" + } + }, + "semaphore-async-await": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo=", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "devOptional": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "devOptional": true + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "shx": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", + "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", + "dev": true, + "requires": { + "minimist": "^1.2.3", + "shelljs": "^0.8.5" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "requires": { + "semver": "^7.5.3" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true + } + } + }, + "simport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/simport/-/simport-1.2.0.tgz", + "integrity": "sha512-85Bm7pKsqiiQ8rmYCaPDdlXZjJvuW6/k/FY8MTtLFMgU7f8S00CgTHfRtWB6KwSb6ek4p9YyG2enG1+yJbl+CA==", + "requires": { + "readjson": "^2.2.0", + "try-to-catch": "^3.0.0" + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "solana": { + "version": "file:packages/solana", + "requires": { + "@babel/core": "^7.17.0", + "@babel/preset-env": "^7.16.11", + "@babel/preset-typescript": "^7.16.7", + "@project-serum/anchor": "^0.20.1", + "@types/jest": "^27.4.0", + "ethers": "^5.5.4", + "jest": "^27.5.0", + "typescript": "^4.3.5" + } + }, + "solana-dapp": { + "version": "file:packages/solana-dapp", + "requires": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/wallet-adapter-react": "^0.15.3", + "@solana/wallet-adapter-react-ui": "^0.9.5", + "@solana/wallet-adapter-wallets": "^0.15.3", + "@solana/web3.js": "^1.33.0", + "@testing-library/jest-dom": "^5.16.2", + "@testing-library/react": "^12.1.2", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.22", + "@types/react": "^17.0.39", + "@types/react-dom": "^17.0.11", + "crypto-browserify": "^3.12.0", + "did-jwt-vc": "^2.1.9", + "ethers": "^5.5.4", + "process": "^0.11.10", + "react": "^17.0.2", + "react-app-rewired": "^2.1.11", + "react-dom": "^17.0.2", + "react-scripts": "5.0.0", + "source-map-loader": "^3.0.1", + "typescript": "^4.5.5", + "web-vitals": "^2.1.4" + }, + "dependencies": { + "@types/node": { + "version": "16.11.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", + "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==", + "dev": true + } + } + }, + "solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dev": true, + "requires": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "dependencies": { + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", + "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "devOptional": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "devOptional": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "devOptional": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "devOptional": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "dev": true + }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true + } + } + }, + "static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "requires": { + "escodegen": "^1.8.1" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "stream-http": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", + "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", + "dev": true, + "peer": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "dev": true, + "peer": true, + "requires": { + "debug": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "peer": true + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true, + "peer": true + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "devOptional": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "devOptional": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "devOptional": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.matchall": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.padend": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + } + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "style-loader": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "dev": true, + "requires": {} + }, + "styled-jsx": { + "version": "5.0.0-beta.3", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0-beta.3.tgz", + "integrity": "sha512-HtDDGSFPvmjHIqWf9n8Oo54tAoY/DTplvlyOH2+YOtD80Sp31Ap8ffSmxhgk5EkUoJ7xepdXMGT650mSffWuRA==", + "dev": true, + "peer": true, + "requires": { + "@babel/plugin-syntax-jsx": "7.14.5", + "@babel/types": "7.15.0", + "convert-source-map": "1.7.0", + "loader-utils": "1.2.3", + "source-map": "0.7.3", + "string-hash": "1.1.3", + "stylis": "3.5.4", + "stylis-rule-sheet": "0.0.10" + }, + "dependencies": { + "@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true, + "peer": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "peer": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "peer": true + } + } + }, + "stylehacks": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.3.tgz", + "integrity": "sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + } + }, + "stylis": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", + "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==", + "dev": true, + "peer": true + }, + "stylis-rule-sheet": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", + "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", + "dev": true, + "peer": true, + "requires": {} + }, + "superagent": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "dev": true, + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^3.5.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + } + } + }, + "superstruct": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", + "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==" + }, + "supertest": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", + "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", + "dev": true, + "requires": { + "methods": "^1.1.2", + "superagent": "^9.0.1" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "devOptional": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + }, + "dependencies": { + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + } + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + } + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "devOptional": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "devOptional": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "devOptional": true + } + } + }, + "tailwindcss": { + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.19.tgz", + "integrity": "sha512-rjsdfz/qZya5xQ0OVynEMETgWq1CacmftgMYeXXh6bRM5vxsNwRSbMJsCCIjq/w67om9VP/AFMolOwiE+5VKig==", + "dev": true, + "requires": { + "arg": "^5.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "cosmiconfig": "^7.0.1", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } + }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true + }, + "tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true + } + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "5.31.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", + "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "dev": true, + "requires": { + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" + }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "peer": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tiny-invariant": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", + "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "devOptional": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + } + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "dependencies": { + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "traverse-chain": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", + "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=" + }, + "triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" + }, + "true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "dev": true + }, + "try-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-catch/-/try-catch-3.0.1.tgz", + "integrity": "sha512-91yfXw1rr/P6oLpHSyHDOHm0vloVvUoo9FVdw8YwY05QjJQG9OT0LUxe2VRAzmHG+0CUOmI3nhxDUMLxDN/NEQ==" + }, + "try-to-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.1.tgz", + "integrity": "sha512-hOY83V84Hx/1sCzDSaJA+Xz2IIQOHRvjxzt+F0OjbQGPZ6yLPLArMA0gw/484MlfUkQbCpKYMLX3VDCAjWKfzQ==" + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "requires": {} + }, + "ts-command-line-args": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.2.1.tgz", + "integrity": "sha512-mnK68QA86FYzQYTSA/rxIjT/8EpKsvQw9QkawPic8I8t0gjAOw3Oa509NIRoaY1FmH7hdrncMp7t7o+vYoceNQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "requires": {} + }, + "ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "ts-typed-json": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ts-typed-json/-/ts-typed-json-0.3.2.tgz", + "integrity": "sha512-Tdu3BWzaer7R5RvBIJcg9r8HrTZgpJmsX+1meXMJzYypbkj8NK2oJN0yvm4Dp/Iv6tzFa/L5jKRmEVTga6K3nA==", + "optional": true + }, + "tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y=", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true, + "peer": true + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + }, + "tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "devOptional": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typechain": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-7.0.0.tgz", + "integrity": "sha512-ILfvBBFJ7j9aIk0crX03+N2GmzoDN1gtk32G1+XrasjuvXS0XAw2XxwQeQMMgKwlnxViJjIkG87sTMYXPkXA9g==", + "dev": true, + "requires": { + "@types/prettier": "^2.1.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.0", + "glob": "^7.1.6", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.1.2", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true + }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "devOptional": true + }, + "uglify-js": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "optional": true + }, + "uint8arrays": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "requires": { + "multiformats": "^9.4.2" + } + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==" + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unix-dgram": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.4.tgz", + "integrity": "sha512-7tpK6x7ls7J7pDrrAU63h93R0dVhRbPwiRRCawR10cl+2e1VOvF3bHlVJc6WI1dl/8qk5He673QU+Ogv7bPNaw==", + "optional": true, + "requires": { + "bindings": "^1.3.0", + "nan": "^2.13.2" + } + }, + "unload": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unload/-/unload-2.3.1.tgz", + "integrity": "sha512-MUZEiDqvAN9AIDRbbBnVYVvfcR6DrjCqeU2YQMmliFZl9uaBUjTkhuDQkBiyAy8ad5bx1TXVbqZ3gg7namsWjA==", + "requires": { + "@babel/runtime": "^7.6.2", + "detect-node": "2.1.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "dev": true, + "requires": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "use-subscription": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", + "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", + "requires": { + "object-assign": "^4.1.1" + } + }, + "utf-8-validate": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", + "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "devOptional": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "optional": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verifier": { + "version": "file:packages/verifier", + "requires": { + "@aws-sdk/client-ssm": "^3.603.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.47.1", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "^0.52.1", + "@opentelemetry/instrumentation": "^0.52.1", + "@opentelemetry/resources": "^1.25.1", + "@opentelemetry/sdk-node": "^0.52.1", + "@opentelemetry/semantic-conventions": "^1.25.1", + "@opentelemetry/tracing": "^0.24.0", + "@prisma/client": "^5.16.1", + "@prisma/instrumentation": "^5.16.1", + "@project-serum/borsh": "^0.2.5", + "@solana/web3.js": "^1.93.3", + "@transmute/did-key.js": "^0.3.0-unstable.10", + "@types/bs58": "^4.0.4", + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/jest": "^29.5.12", + "@types/jsonpath": "^0.2.4", + "@types/lodash": "^4.17.6", + "@types/mocha": "^10.0.7", + "@types/morgan": "^1.9.9", + "@types/node": "^20.14.9", + "@types/node-fetch": "^2.6.11", + "@types/supertest": "^6.0.2", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^7.14.1", + "@typescript-eslint/parser": "^7.14.1", + "ajv": "^8.16.0", + "bit-buffers": "^1.0.2", + "bn.js": "^5.2.1", + "body-parser": "^1.20.2", + "bs58": "^6.0.0", + "cors": "^2.8.5", + "cross-fetch": "^4.0.0", + "did-jwt": "^8.0.4", + "did-jwt-vc": "^4.0.4", + "did-resolver": "^4.1.0", + "dotenv": "^16.4.5", + "ejs": "^3.1.10", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.1", + "ethers": "^6.13.1", + "express": "^4.19.2", + "express-async-handler": "^1.2.0", + "helmet": "^7.1.0", + "hot-shots": "^10.0.0", + "jest": "^29.7.0", + "js-sha3": "^0.9.3", + "jsonpath": "^1.1.1", + "lodash": "^4.17.21", + "minify": "^11.2.1", + "morgan": "^1.10.0", + "nock": "^13.5.4", + "nodemon": "^3.1.4", + "npm-run-all": "^4.1.5", + "pg": "^8.12.0", + "pkh-did-resolver": "^2.0.0", + "prettier": "^3.3.2", + "prisma": "^5.16.1", + "regenerator-runtime": "^0.14.1", + "secp256k1": "^5.0.0", + "supertest": "^7.0.0", + "ts-jest": "^29.1.5", + "ts-node": "^10.9.2", + "typescript": "^5.5.2", + "uuid": "^10.0.0", + "web-did-resolver": "^2.0.27", + "winston": "^3.13.0" + }, + "dependencies": { + "@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + } + }, + "@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + } + }, + "@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "requires": { + "@noble/hashes": "1.3.2" + } + }, + "@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==" + }, + "@opentelemetry/auto-instrumentations-node": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.47.1.tgz", + "integrity": "sha512-W7Iz4SZhj6z5iqYTu4zZXr2woP/zD4dA6zFAz9PQEx21/SGn6+y6plcJTA08KnPVMbRff60D1IBdl547TyGy9A==", + "requires": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-amqplib": "^0.38.0", + "@opentelemetry/instrumentation-aws-lambda": "^0.42.0", + "@opentelemetry/instrumentation-aws-sdk": "^0.42.0", + "@opentelemetry/instrumentation-bunyan": "^0.39.0", + "@opentelemetry/instrumentation-cassandra-driver": "^0.39.0", + "@opentelemetry/instrumentation-connect": "^0.37.0", + "@opentelemetry/instrumentation-cucumber": "^0.7.0", + "@opentelemetry/instrumentation-dataloader": "^0.10.0", + "@opentelemetry/instrumentation-dns": "^0.37.0", + "@opentelemetry/instrumentation-express": "^0.40.1", + "@opentelemetry/instrumentation-fastify": "^0.37.0", + "@opentelemetry/instrumentation-fs": "^0.13.0", + "@opentelemetry/instrumentation-generic-pool": "^0.37.0", + "@opentelemetry/instrumentation-graphql": "^0.41.0", + "@opentelemetry/instrumentation-grpc": "^0.52.0", + "@opentelemetry/instrumentation-hapi": "^0.39.0", + "@opentelemetry/instrumentation-http": "^0.52.0", + "@opentelemetry/instrumentation-ioredis": "^0.41.0", + "@opentelemetry/instrumentation-knex": "^0.37.0", + "@opentelemetry/instrumentation-koa": "^0.41.0", + "@opentelemetry/instrumentation-lru-memoizer": "^0.38.0", + "@opentelemetry/instrumentation-memcached": "^0.37.0", + "@opentelemetry/instrumentation-mongodb": "^0.45.0", + "@opentelemetry/instrumentation-mongoose": "^0.39.0", + "@opentelemetry/instrumentation-mysql": "^0.39.0", + "@opentelemetry/instrumentation-mysql2": "^0.39.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.38.0", + "@opentelemetry/instrumentation-net": "^0.37.0", + "@opentelemetry/instrumentation-pg": "^0.42.0", + "@opentelemetry/instrumentation-pino": "^0.40.0", + "@opentelemetry/instrumentation-redis": "^0.40.0", + "@opentelemetry/instrumentation-redis-4": "^0.40.0", + "@opentelemetry/instrumentation-restify": "^0.39.0", + "@opentelemetry/instrumentation-router": "^0.38.0", + "@opentelemetry/instrumentation-socket.io": "^0.40.0", + "@opentelemetry/instrumentation-tedious": "^0.11.0", + "@opentelemetry/instrumentation-undici": "^0.3.0", + "@opentelemetry/instrumentation-winston": "^0.38.0", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.28.10", + "@opentelemetry/resource-detector-aws": "^1.5.1", + "@opentelemetry/resource-detector-azure": "^0.2.9", + "@opentelemetry/resource-detector-container": "^0.3.11", + "@opentelemetry/resource-detector-gcp": "^0.29.10", + "@opentelemetry/resources": "^1.24.0", + "@opentelemetry/sdk-node": "^0.52.0" + } + }, + "@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz", + "integrity": "sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/type-utils": "7.14.1", + "@typescript-eslint/utils": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz", + "integrity": "sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz", + "integrity": "sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/utils": "7.14.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.14.1.tgz", + "integrity": "sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz", + "integrity": "sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/utils": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.14.1.tgz", + "integrity": "sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz", + "integrity": "sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.14.1", + "eslint-visitor-keys": "^3.4.3" + } + }, + "aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "requires": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "base-x": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.0.tgz", + "integrity": "sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "dev": true, + "requires": { + "base-x": "^5.0.0" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "canonicalize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.0.0.tgz", + "integrity": "sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "requires": { + "node-fetch": "^2.6.12" + } + }, + "dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "requires": {} + }, + "did-jwt": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-8.0.4.tgz", + "integrity": "sha512-KPtG7H+8GgKGMiDqFvOdNy5BBN3hpA+8xV7VygEnpst5oPIqjvcH3rTtnPF55a8bOxIzE2PudKGIXIQhekv7WA==", + "requires": { + "@noble/ciphers": "^0.5.0", + "@noble/curves": "^1.0.0", + "@noble/hashes": "^1.3.0", + "@scure/base": "^1.1.3", + "canonicalize": "^2.0.0", + "did-resolver": "^4.1.0", + "multibase": "^4.0.6", + "multiformats": "^9.6.2", + "uint8arrays": "3.1.1" + } + }, + "did-jwt-vc": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/did-jwt-vc/-/did-jwt-vc-4.0.4.tgz", + "integrity": "sha512-O/VSW+pux25+bERGQ1Z+LNv8z8gIy++yL8yjspxNZHCLjdmCelZz3hjuIpHlixhBCFP2YyTOQqGg8QeIMRwN9Q==", + "requires": { + "did-jwt": "^8.0.0", + "did-resolver": "^4.1.0" + } + }, + "did-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==" + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true + }, + "eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + } + }, + "ethers": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.1.tgz", + "integrity": "sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A==", + "requires": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.17.1" + }, + "dependencies": { + "@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + } + } + }, + "expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", + "dev": true, + "requires": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + } + }, + "jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + } + }, + "jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + } + }, + "jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + } + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true + }, + "jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "requires": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + } + }, + "jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + } + }, + "jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + } + }, + "jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-sha3": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.9.3.tgz", + "integrity": "sha512-BcJPCQeLg6WjEx3FE591wVAevlli8lxsxm9/FzV4HXkV49TmBH38Yvrpce6fjbADGMKFrBMGTqrVz3qPIZ88Gg==" + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true + }, + "secp256k1": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", + "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "ts-jest": { + "version": "29.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", + "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + } + }, + "typescript": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "dev": true + }, + "uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==" + }, + "v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "requires": {} + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true, + "peer": true + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "web-did-resolver": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.27.tgz", + "integrity": "sha512-YxQlNdeYBXLhVpMW62+TPlc6sSOiWyBYq7DNvY6FXmXOD9g0zLeShpq2uCKFFQV/WlSrBi/yebK/W5lMTDxMUQ==", + "requires": { + "cross-fetch": "^4.0.0", + "did-resolver": "^4.0.0" + }, + "dependencies": { + "cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "requires": { + "node-fetch": "^2.6.12" + } + }, + "did-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==" + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + }, + "webcrypto-core": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.0.tgz", + "integrity": "sha512-kR1UQNH8MD42CYuLzvibfakG5Ew5seG85dMMoAM/1LqvckxaF6pUiidLuraIu4V+YCIFabYecUZAW0TuxAoaqw==", + "requires": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "asn1js": "^3.0.1", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + } + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "webpack": { + "version": "5.68.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.68.0.tgz", + "integrity": "sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", + "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.1", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz", + "integrity": "sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "@types/ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "requires": {} + } + } + }, + "webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "dev": true, + "requires": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "dependencies": { + "webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + } + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "devOptional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "winston": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz", + "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==", + "requires": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.7.0" + }, + "dependencies": { + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + } + } + }, + "winston-transport": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", + "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + } + }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "optional": true + }, + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "devOptional": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "devOptional": true + } + } + }, + "workbox-background-sync": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.4.2.tgz", + "integrity": "sha512-P7c8uG5X2k+DMICH9xeSA9eUlCOjHHYoB42Rq+RtUpuwBxUOflAXR1zdsMWj81LopE4gjKXlTw7BFd1BDAHo7g==", + "dev": true, + "requires": { + "idb": "^6.1.4", + "workbox-core": "6.4.2" + } + }, + "workbox-broadcast-update": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.4.2.tgz", + "integrity": "sha512-qnBwQyE0+PWFFc/n4ISXINE49m44gbEreJUYt2ldGH3+CNrLmJ1egJOOyUqqu9R4Eb7QrXcmB34ClXG7S37LbA==", + "dev": true, + "requires": { + "workbox-core": "6.4.2" + } + }, + "workbox-build": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.4.2.tgz", + "integrity": "sha512-WMdYLhDIsuzViOTXDH+tJ1GijkFp5khSYolnxR/11zmfhNDtuo7jof72xPGFy+KRpsz6tug39RhivCj77qqO0w==", + "dev": true, + "requires": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "source-map-url": "^0.4.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.4.2", + "workbox-broadcast-update": "6.4.2", + "workbox-cacheable-response": "6.4.2", + "workbox-core": "6.4.2", + "workbox-expiration": "6.4.2", + "workbox-google-analytics": "6.4.2", + "workbox-navigation-preload": "6.4.2", + "workbox-precaching": "6.4.2", + "workbox-range-requests": "6.4.2", + "workbox-recipes": "6.4.2", + "workbox-routing": "6.4.2", + "workbox-strategies": "6.4.2", + "workbox-streams": "6.4.2", + "workbox-sw": "6.4.2", + "workbox-window": "6.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "requires": { + "whatwg-url": "^7.0.0" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "workbox-cacheable-response": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.4.2.tgz", + "integrity": "sha512-9FE1W/cKffk1AJzImxgEN0ceWpyz1tqNjZVtA3/LAvYL3AC5SbIkhc7ZCO82WmO9IjTfu8Vut2X/C7ViMSF7TA==", + "dev": true, + "requires": { + "workbox-core": "6.4.2" + } + }, + "workbox-core": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.4.2.tgz", + "integrity": "sha512-1U6cdEYPcajRXiboSlpJx6U7TvhIKbxRRerfepAJu2hniKwJ3DHILjpU/zx3yvzSBCWcNJDoFalf7Vgd7ey/rw==", + "dev": true + }, + "workbox-expiration": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.4.2.tgz", + "integrity": "sha512-0hbpBj0tDnW+DZOUmwZqntB/8xrXOgO34i7s00Si/VlFJvvpRKg1leXdHHU8ykoSBd6+F2KDcMP3swoCi5guLw==", + "dev": true, + "requires": { + "idb": "^6.1.4", + "workbox-core": "6.4.2" + } + }, + "workbox-google-analytics": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.4.2.tgz", + "integrity": "sha512-u+gxs3jXovPb1oul4CTBOb+T9fS1oZG+ZE6AzS7l40vnyfJV79DaLBvlpEZfXGv3CjMdV1sT/ltdOrKzo7HcGw==", + "dev": true, + "requires": { + "workbox-background-sync": "6.4.2", + "workbox-core": "6.4.2", + "workbox-routing": "6.4.2", + "workbox-strategies": "6.4.2" + } + }, + "workbox-navigation-preload": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.4.2.tgz", + "integrity": "sha512-viyejlCtlKsbJCBHwhSBbWc57MwPXvUrc8P7d+87AxBGPU+JuWkT6nvBANgVgFz6FUhCvRC8aYt+B1helo166g==", + "dev": true, + "requires": { + "workbox-core": "6.4.2" + } + }, + "workbox-precaching": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.4.2.tgz", + "integrity": "sha512-CZ6uwFN/2wb4noHVlALL7UqPFbLfez/9S2GAzGAb0Sk876ul9ukRKPJJ6gtsxfE2HSTwqwuyNVa6xWyeyJ1XSA==", + "dev": true, + "requires": { + "workbox-core": "6.4.2", + "workbox-routing": "6.4.2", + "workbox-strategies": "6.4.2" + } + }, + "workbox-range-requests": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.4.2.tgz", + "integrity": "sha512-SowF3z69hr3Po/w7+xarWfzxJX/3Fo0uSG72Zg4g5FWWnHpq2zPvgbWerBZIa81zpJVUdYpMa3akJJsv+LaO1Q==", + "dev": true, + "requires": { + "workbox-core": "6.4.2" + } + }, + "workbox-recipes": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.4.2.tgz", + "integrity": "sha512-/oVxlZFpAjFVbY+3PoGEXe8qyvtmqMrTdWhbOfbwokNFtUZ/JCtanDKgwDv9x3AebqGAoJRvQNSru0F4nG+gWA==", + "dev": true, + "requires": { + "workbox-cacheable-response": "6.4.2", + "workbox-core": "6.4.2", + "workbox-expiration": "6.4.2", + "workbox-precaching": "6.4.2", + "workbox-routing": "6.4.2", + "workbox-strategies": "6.4.2" + } + }, + "workbox-routing": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.4.2.tgz", + "integrity": "sha512-0ss/n9PAcHjTy4Ad7l2puuod4WtsnRYu9BrmHcu6Dk4PgWeJo1t5VnGufPxNtcuyPGQ3OdnMdlmhMJ57sSrrSw==", + "dev": true, + "requires": { + "workbox-core": "6.4.2" + } + }, + "workbox-strategies": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.4.2.tgz", + "integrity": "sha512-YXh9E9dZGEO1EiPC3jPe2CbztO5WT8Ruj8wiYZM56XqEJp5YlGTtqRjghV+JovWOqkWdR+amJpV31KPWQUvn1Q==", + "dev": true, + "requires": { + "workbox-core": "6.4.2" + } + }, + "workbox-streams": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.4.2.tgz", + "integrity": "sha512-ROEGlZHGVEgpa5bOZefiJEVsi5PsFjJG9Xd+wnDbApsCO9xq9rYFopF+IRq9tChyYzhBnyk2hJxbQVWphz3sog==", + "dev": true, + "requires": { + "workbox-core": "6.4.2", + "workbox-routing": "6.4.2" + } + }, + "workbox-sw": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.4.2.tgz", + "integrity": "sha512-A2qdu9TLktfIM5NE/8+yYwfWu+JgDaCkbo5ikrky2c7r9v2X6DcJ+zSLphNHHLwM/0eVk5XVf1mC5HGhYpMhhg==", + "dev": true + }, + "workbox-webpack-plugin": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.4.2.tgz", + "integrity": "sha512-CiEwM6kaJRkx1cP5xHksn13abTzUqMHiMMlp5Eh/v4wRcedgDTyv6Uo8+Hg9MurRbHDosO5suaPyF9uwVr4/CQ==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "source-map-url": "^0.4.0", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.4.2" + }, + "dependencies": { + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "workbox-window": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.4.2.tgz", + "integrity": "sha512-KVyRKmrJg7iB+uym/B/CnEUEFG9CvnTU1Bq5xpXHbtgD9l+ShDekSl1wYpqw/O0JfeeQVOFb8CiNfvnwWwqnWQ==", + "dev": true, + "requires": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.4.2" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + } + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..adc5fe86f --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "verite-verifier", + "private": true, + "engines": { + "node": "16.x", + "npm": ">=7.0.0" + }, + "scripts": { + "build": "npm run build -w verifier; npm run build --workspaces --if-present", + "clean": "npm run clean --workspaces --if-present", + "dev": "npm run dev -w verifier", + "lint": "npm run lint --workspaces --if-present", + "setup": "./bin/setup", + "start": "npm start -w verifier", + "start:tracing": "npm run start:tracing -w verifier", + "start:tracing:inspect": "npm run start:tracing:inspect -w verifier", + "test": "npm run build -w verifier; npm run test --workspaces --if-present", + "type-check": "npm run type-check --workspaces --if-present" + }, + "workspaces": [ + "./packages/*" + ], + "devDependencies": { + "@types/secp256k1": "^4.0.6" + }, + "overrides": { + "neon-cli": "1.0.0" + } +} diff --git a/packages/ethereum-dapp/.eslintrc.json b/packages/ethereum-dapp/.eslintrc.json new file mode 100644 index 000000000..1c2aa65d7 --- /dev/null +++ b/packages/ethereum-dapp/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/packages/ethereum-dapp/.gitignore b/packages/ethereum-dapp/.gitignore new file mode 100644 index 000000000..88b6f0d98 --- /dev/null +++ b/packages/ethereum-dapp/.gitignore @@ -0,0 +1,37 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env.local +.env.development.local +.env.test.local +.env.production.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo diff --git a/packages/ethereum-dapp/LICENSE b/packages/ethereum-dapp/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/packages/ethereum-dapp/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/ethereum-dapp/README.md b/packages/ethereum-dapp/README.md new file mode 100644 index 000000000..f8902aad4 --- /dev/null +++ b/packages/ethereum-dapp/README.md @@ -0,0 +1,39 @@ +# Ethereum E2E Demo + +This is a [Next.js](https://nextjs.org/) project bootstrapped with Solana's [`nextjs-starter`](https://github.com/solana-labs/wallet-adapter/tree/master/packages/starter/nextjs-starter). While it was bootstrapped using a Solana starter, the resulting dapp is for Ethereum. + +## Installation + +From the root of the repository: + +```sh +npm install +``` + +The dapp requires an ABI of the deployed contract. It is already included at `lib/TestRegistry.json`. If you make changes to the contract's ABI, this file will need to be updated. + +The dapp is hardcoded with a contract address of `0x5FbDB2315678afecb367f032d93F642f64180aa3`. This will be the correct address if it is the first contract deployed on a localhost network hosted by hardhat. + +No gas is required to exercise this demo. Since no state is changed, the transaction can be simulated and is free. + +## Setup + +This dapp requires a running ethereum node and the contract deployed. You can find [instructions for how to do that](https://github.com/circlefin/verifier/blob/master/packages/ethereum/README.md#deployment-and-managing-the-registry) in the `ethereum` package. + +The issuer in this demo is `did:key:z6MknHapzEyBbfzUr6n8nxwQhAwFpPM4NBEEUwja2XtAXubF` and needs to be added as a trusted issuer in the verifier. Update `packages/verifier/.env` to include the issuer: + +``` +TRUSTED_ISSUERS="^did:key:z6MknHapzEyBbfzUr6n8nxwQhAwFpPM4NBEEUwja2XtAXubF$" +``` + +You should also start an instance of the verifier on port 3000 (the default) found in [packages/verifier](https://github.com/circlefin/verifier/tree/master/packages/verifier#quick-start). + +## Getting Started + +It is recommended to run it on port 3001 as we'll run the verifier on port 3000. + +```sh +PORT=3001 npm run dev +``` + +Open [http://localhost:3001](http://localhost:3001) with your browser to try the demo. Be sure your Metamask is configured to use localhost. diff --git a/packages/ethereum-dapp/lib/TestRegistry.json b/packages/ethereum-dapp/lib/TestRegistry.json new file mode 100644 index 000000000..90a886368 --- /dev/null +++ b/packages/ethereum-dapp/lib/TestRegistry.json @@ -0,0 +1,752 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TestRegistry", + "sourceName": "contracts/TestRegistry.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "uuid", + "type": "bytes32" + } + ], + "name": "VerificationRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "uuid", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "subject", + "type": "address" + }, + { + "internalType": "uint256", + "name": "entryTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "revoked", + "type": "bool" + } + ], + "indexed": false, + "internalType": "struct VerificationRecord", + "name": "verificationRecord", + "type": "tuple" + } + ], + "name": "VerificationResultConfirmed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "uuid", + "type": "bytes32" + } + ], + "name": "VerificationRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "name", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "did", + "type": "string" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct VerifierInfo", + "name": "verifierInfo", + "type": "tuple" + } + ], + "name": "VerifierAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "VerifierRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "name", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "did", + "type": "string" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct VerifierInfo", + "name": "verifierInfo", + "type": "tuple" + } + ], + "name": "VerifierUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifierAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "name", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "did", + "type": "string" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "internalType": "struct VerifierInfo", + "name": "verifierInfo", + "type": "tuple" + } + ], + "name": "addVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "uuid", + "type": "bytes32" + } + ], + "name": "getVerification", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "uuid", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "subject", + "type": "address" + }, + { + "internalType": "uint256", + "name": "entryTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "revoked", + "type": "bool" + } + ], + "internalType": "struct VerificationRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerificationCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "subject", + "type": "address" + } + ], + "name": "getVerificationsForSubject", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "uuid", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "subject", + "type": "address" + }, + { + "internalType": "uint256", + "name": "entryTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "revoked", + "type": "bool" + } + ], + "internalType": "struct VerificationRecord[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getVerificationsForVerifier", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "uuid", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "subject", + "type": "address" + }, + { + "internalType": "uint256", + "name": "entryTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "revoked", + "type": "bool" + } + ], + "internalType": "struct VerificationRecord[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifierAddress", + "type": "address" + } + ], + "name": "getVerifier", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "name", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "did", + "type": "string" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "internalType": "struct VerifierInfo", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "subject", + "type": "address" + } + ], + "name": "isVerified", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "schema", + "type": "string" + }, + { + "internalType": "address", + "name": "subject", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + } + ], + "internalType": "struct VerificationResult", + "name": "verificationResult", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "registerVerification", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "uuid", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "subject", + "type": "address" + }, + { + "internalType": "uint256", + "name": "entryTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "revoked", + "type": "bool" + } + ], + "internalType": "struct VerificationRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "uuid", + "type": "bytes32" + } + ], + "name": "removeVerification", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifierAddress", + "type": "address" + } + ], + "name": "removeVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "uuid", + "type": "bytes32" + } + ], + "name": "revokeVerification", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifierAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "name", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "did", + "type": "string" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "internalType": "struct VerifierInfo", + "name": "verifierInfo", + "type": "tuple" + } + ], + "name": "updateVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "schema", + "type": "string" + }, + { + "internalType": "address", + "name": "subject", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + } + ], + "internalType": "struct VerificationResult", + "name": "verificationResult", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "validate", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "uuid", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "subject", + "type": "address" + }, + { + "internalType": "uint256", + "name": "entryTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "revoked", + "type": "bool" + } + ], + "internalType": "struct VerificationRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601481526020017f566572696669636174696f6e52656769737472790000000000000000000000008152506040518060400160405280600381526020017f312e3000000000000000000000000000000000000000000000000000000000008152506200009f620000936200015a60201b60201c565b6200016260201b60201c565b60008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620001088184846200022660201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080610120818152505050505050506200033a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600083838346306040516020016200024395949392919062000295565b6040516020818303038152906040528051906020012090509392505050565b6200026d81620002f2565b82525050565b6200027e8162000306565b82525050565b6200028f8162000330565b82525050565b600060a082019050620002ac600083018862000273565b620002bb602083018762000273565b620002ca604083018662000273565b620002d9606083018562000284565b620002e8608083018462000262565b9695505050505050565b6000620002ff8262000310565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60805160a05160c05160601c60e05161010051610120516141d46200038d600039600061259b015260006125dd015260006125bc015260006124f1015260006125470152600061257001526141d46000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806394ef2440116100a2578063b9c688a711610071578063b9c688a7146102f1578063ca2dfd0a1461030f578063ed2ffd281461032b578063edaf4b891461035b578063f2fde38b1461038b57610116565b806394ef244014610245578063958c39ff1461027557806399cf1a1d146102a5578063b9209e33146102c157610116565b8063417469a7116100e9578063417469a7146101c95780634e4de26d146101e557806370eba12414610201578063715018a61461021d5780638da5cb5b1461022757610116565b8063059ce95d1461011b5780630e9e848f1461014b5780631f05b3741461017b5780633310521814610199575b600080fd5b61013560048036038101906101309190612f59565b6103a7565b6040516101429190613df1565b60405180910390f35b61016560048036038101906101609190612f59565b61060c565b6040516101729190613aa1565b60405180910390f35b610183610946565b6040516101909190613e13565b60405180910390f35b6101b360048036038101906101ae9190612f59565b610950565b6040516101c09190613ac3565b60405180910390f35b6101e360048036038101906101de9190612f82565b6109a2565b005b6101ff60048036038101906101fa9190612fd6565b610c33565b005b61021b60048036038101906102169190612fd6565b610e29565b005b610225610fbe565b005b61022f611046565b60405161023c9190613a56565b60405180910390f35b61025f600480360381019061025a9190612fd6565b61106f565b60405161026c9190613dd6565b60405180910390f35b61028f600480360381019061028a9190612fff565b611181565b60405161029c9190613dd6565b60405180910390f35b6102bf60048036038101906102ba9190612f82565b6112e4565b005b6102db60048036038101906102d69190612f59565b61158c565b6040516102e89190613ac3565b60405180910390f35b6102f9611828565b6040516103069190613e13565b60405180910390f35b61032960048036038101906103249190612f59565b611832565b005b61034560048036038101906103409190612f59565b611add565b6040516103529190613aa1565b60405180910390f35b61037560048036038101906103709190612fff565b611e17565b6040516103829190613dd6565b60405180910390f35b6103a560048036038101906103a09190612f59565b611e31565b005b6103af612ba3565b6000801b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042e90613d36565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201805461049b90613ffb565b80601f01602080910402602001604051908101604052809291908181526020018280546104c790613ffb565b80156105145780601f106104e957610100808354040283529160200191610514565b820191906000526020600020905b8154815290600101906020018083116104f757829003601f168201915b5050505050815260200160028201805461052d90613ffb565b80601f016020809104026020016040519081016040528092919081815260200182805461055990613ffb565b80156105a65780601f1061057b576101008083540402835291602001916105a6565b820191906000526020600020905b81548152906001019060200180831161058957829003601f168201915b505050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050919050565b6060600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067590613db6565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561070957602002820191906000526020600020905b8154815260200190600101908083116106f5575b505050505090506000815167ffffffffffffffff811115610753577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561078c57816020015b610779612be4565b8152602001906001900390816107715790505b50905060005b825181101561093b576000600460008584815181106107da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff16151515158152505090508083838151811061091c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101819052505080806109339061402d565b915050610792565b508092505050919050565b6000600754905090565b60008060001b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414159050919050565b6109aa611f29565b73ffffffffffffffffffffffffffffffffffffffff166109c8611046565b73ffffffffffffffffffffffffffffffffffffffff1614610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1590613d16565b60405180910390fd5b6000801b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90613d36565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190610b0c929190612c4b565b506040820151816002019080519060200190610b29929190612c4b565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508160026000836060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcf8ca726ba9d58efa48fa96d3184c211fcce84e8b5e9a3c83c10c1ba9fd392c68282604051610c27929190613a71565b60405180910390a15050565b6000801b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290613c56565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5690613d56565b60405180910390fd5b600460008281526020019081526020016000206000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600382016000905560048201600090556005820160006101000a81549060ff021916905550507f9abf56d49e4ef717f3418600d3ed66048ca2ed8e3e630a70b76a71dd2142def581604051610e1e9190613ade565b60405180910390a150565b6000801b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890613c56565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90613d96565b60405180910390fd5b60016004600083815260200190815260200160002060050160006101000a81548160ff0219169083151502179055507f071ad1bb208a373a52e72fe5d8aa7755d658f88e197e666bf1a6d09d0ddb505681604051610fb39190613ade565b60405180910390a150565b610fc6611f29565b73ffffffffffffffffffffffffffffffffffffffff16610fe4611046565b73ffffffffffffffffffffffffffffffffffffffff161461103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103190613d16565b60405180910390fd5b6110446000611f31565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611077612be4565b600460008381526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff1615151515815250509050919050565b611189612be4565b6000801b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890613c56565b60405180910390fd5b61121a83611ff5565b60006112268484611ff8565b90503373ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff161461129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190613c76565b60405180910390fd5b6112a381612284565b7fb13e5e7efcce7bbc67740f0fe050563d4fd1f5cc7096c3a32cb901711c95ab54816040516112d29190613dd6565b60405180910390a18091505092915050565b6112ec611f29565b73ffffffffffffffffffffffffffffffffffffffff1661130a611046565b73ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613d16565b60405180910390fd5b6000801b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90613cb6565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101908051906020019061144d929190612c4b565b50604082015181600201908051906020019061146a929190612c4b565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508160026000836060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919061154a9061402d565b91905055507f57fdb74cb7ec2177b327961b74feef54dcb8102656cf6484ea992a84eb1bb4d08282604051611580929190613a71565b60405180910390a15050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490613db6565b60405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561168857602002820191906000526020600020905b815481526020019060010190808311611674575b5050505050905060005b815181101561181c576000600460008484815181106116da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff16151515158152505090508060a001511580156117f75750428160800151115b156118085760019350505050611823565b5080806118149061402d565b915050611692565b5060009150505b919050565b6000600354905090565b61183a611f29565b73ffffffffffffffffffffffffffffffffffffffff16611858611046565b73ffffffffffffffffffffffffffffffffffffffff16146118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590613d16565b60405180910390fd5b6000801b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d90613cd6565b60405180910390fd5b60026000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160009055600182016000611a529190612cd1565b600282016000611a629190612cd1565b6003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505060036000815480929190611a9e90613fd1565b91905055507f44a3cd4eb5cc5748f6169df057b1cb2ae4c383e87cd94663c430e095d4cba42481604051611ad29190613a56565b60405180910390a150565b6060600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4690613db6565b60405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611bda57602002820191906000526020600020905b815481526020019060010190808311611bc6575b505050505090506000815167ffffffffffffffff811115611c24577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611c5d57816020015b611c4a612be4565b815260200190600190039081611c425790505b50905060005b8251811015611e0c57600060046000858481518110611cab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff161515151581525050905080838381518110611ded577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181905250508080611e049061402d565b915050611c63565b508092505050919050565b611e1f612be4565b611e298383611ff8565b905092915050565b611e39611f29565b73ffffffffffffffffffffffffffffffffffffffff16611e57611046565b73ffffffffffffffffffffffffffffffffffffffff1614611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490613d16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1490613c36565b60405180910390fd5b611f2681611f31565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50565b612000612be4565b600061206a7f10f37c780798f8d6ccc5deba550b287b1ccef3a50b9007536dc9ce57c6f066838560000151805190602001208660200151876040015160405160200161204f9493929190613af9565b60405160208183030381529060405280519060200120612462565b90506000612078828561247c565b90506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a590613d76565b60405180910390fd5b428660400151116121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90613bf6565b60405180910390fd5b60006040518060c001604052806000801b81526020018373ffffffffffffffffffffffffffffffffffffffff168152602001886020015173ffffffffffffffffffffffffffffffffffffffff16815260200142815260200188604001518152602001600015158152509050600061226a826124a3565b905080826000018181525050819550505050505092915050565b600760008154809291906122979061402d565b91905055508060046000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555090505060056000826040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160000151908060018154018082558091505060019003906000526020600020016000909190919091505560066000826020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160000151908060018154018082558091505060019003906000526020600020016000909190919091505550565b600061247561246f6124ed565b83612607565b9050919050565b600080600061248b858561263a565b91509150612498816126bd565b819250505092915050565b600081602001518260400151836060015184608001516007546040516020016124d09594939291906139c0565b604051602081830303815290604052805190602001209050919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561256957507f000000000000000000000000000000000000000000000000000000000000000046145b15612596577f00000000000000000000000000000000000000000000000000000000000000009050612604565b6126017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612a0e565b90505b90565b6000828260405160200161261c929190613a1f565b60405160208183030381529060405280519060200120905092915050565b60008060418351141561267c5760008060006020860151925060408601519150606086015160001a905061267087828585612a48565b945094505050506126b6565b6040835114156126ad5760008060208501519150604085015190506126a2868383612b55565b9350935050506126b6565b60006002915091505b9250929050565b600060048111156126f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612730577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561273b57612a0b565b60016004811115612775577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156127ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156127ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e690613bd6565b60405180910390fd5b60026004811115612829577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612862577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a90613c16565b60405180910390fd5b600360048111156128dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612916577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e90613c96565b60405180910390fd5b600480811115612990577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156129c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0190613cf6565b60405180910390fd5b5b50565b60008383834630604051602001612a29959493929190613b3e565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612a83576000600391509150612b4c565b601b8560ff1614158015612a9b5750601c8560ff1614155b15612aad576000600491509150612b4c565b600060018787878760405160008152602001604052604051612ad29493929190613b91565b6020604051602081039080840390855afa158015612af4573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b4357600060019250925050612b4c565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050612b9587828885612a48565b935093505050935093915050565b6040518060800160405280600080191681526020016060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b6040518060c0016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000151581525090565b828054612c5790613ffb565b90600052602060002090601f016020900481019282612c795760008555612cc0565b82601f10612c9257805160ff1916838001178555612cc0565b82800160010185558215612cc0579182015b82811115612cbf578251825591602001919060010190612ca4565b5b509050612ccd9190612d11565b5090565b508054612cdd90613ffb565b6000825580601f10612cef5750612d0e565b601f016020900490600052602060002090810190612d0d9190612d11565b5b50565b5b80821115612d2a576000816000905550600101612d12565b5090565b6000612d41612d3c84613e5f565b613e2e565b905082815260208101848484011115612d5957600080fd5b612d64848285613f8f565b509392505050565b6000612d7f612d7a84613e8f565b613e2e565b905082815260208101848484011115612d9757600080fd5b612da2848285613f8f565b509392505050565b600081359050612db981614159565b92915050565b600081359050612dce81614170565b92915050565b600082601f830112612de557600080fd5b8135612df5848260208601612d2e565b91505092915050565b600082601f830112612e0f57600080fd5b8135612e1f848260208601612d6c565b91505092915050565b600060608284031215612e3a57600080fd5b612e446060613e2e565b9050600082013567ffffffffffffffff811115612e6057600080fd5b612e6c84828501612dfe565b6000830152506020612e8084828501612daa565b6020830152506040612e9484828501612f44565b60408301525092915050565b600060808284031215612eb257600080fd5b612ebc6080613e2e565b90506000612ecc84828501612dbf565b600083015250602082013567ffffffffffffffff811115612eec57600080fd5b612ef884828501612dfe565b602083015250604082013567ffffffffffffffff811115612f1857600080fd5b612f2484828501612dfe565b6040830152506060612f3884828501612daa565b60608301525092915050565b600081359050612f5381614187565b92915050565b600060208284031215612f6b57600080fd5b6000612f7984828501612daa565b91505092915050565b60008060408385031215612f9557600080fd5b6000612fa385828601612daa565b925050602083013567ffffffffffffffff811115612fc057600080fd5b612fcc85828601612ea0565b9150509250929050565b600060208284031215612fe857600080fd5b6000612ff684828501612dbf565b91505092915050565b6000806040838503121561301257600080fd5b600083013567ffffffffffffffff81111561302c57600080fd5b61303885828601612e28565b925050602083013567ffffffffffffffff81111561305557600080fd5b61306185828601612dd4565b9150509250929050565b6000613077838361381c565b60c08301905092915050565b61308c81613f30565b82525050565b61309b81613f30565b82525050565b6130b26130ad82613f30565b614076565b82525050565b60006130c382613ecf565b6130cd8185613ef2565b93506130d883613ebf565b8060005b838110156131095781516130f0888261306b565b97506130fb83613ee5565b9250506001810190506130dc565b5085935050505092915050565b61311f81613f42565b82525050565b61312e81613f42565b82525050565b61313d81613f4e565b82525050565b61314c81613f4e565b82525050565b61316361315e82613f4e565b614088565b82525050565b600061317482613eda565b61317e8185613f03565b935061318e818560208601613f9e565b6131978161413b565b840191505092915050565b60006131af601883613f14565b91507f45434453413a20696e76616c6964207369676e617475726500000000000000006000830152602082019050919050565b60006131ef603783613f14565b91507f566572696669636174696f6e52656769737472793a205665726966696361746960008301527f6f6e20636f6e6669726d6174696f6e20657870697265640000000000000000006020830152604082019050919050565b6000613255601f83613f14565b91507f45434453413a20696e76616c6964207369676e6174757265206c656e677468006000830152602082019050919050565b6000613295602683613f14565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132fb600283613f25565b91507f19010000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061333b602e83613f14565b91507f566572696669636174696f6e52656769737472793a2043616c6c65722069732060008301527f6e6f7420612056657269666965720000000000000000000000000000000000006020830152604082019050919050565b60006133a1604483613f14565b91507f566572696669636174696f6e52656769737472793a2043616c6c65722069732060008301527f6e6f7420746865207665726966696572206f662074686520766572696669636160208301527f74696f6e000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b600061342d602283613f14565b91507f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613493602d83613f14565b91507f566572696669636174696f6e52656769737472793a205665726966696572204160008301527f64647265737320457869737473000000000000000000000000000000000000006020830152604082019050919050565b60006134f9603583613f14565b91507f566572696669636174696f6e52656769737472793a205665726966696572204160008301527f64647265737320446f6573204e6f7420457869737400000000000000000000006020830152604082019050919050565b600061355f602283613f14565b91507f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135c5602083613f14565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613605602e83613f14565b91507f566572696669636174696f6e52656769737472793a20556e6b6e6f776e20566560008301527f72696669657220416464726573730000000000000000000000000000000000006020830152604082019050919050565b600061366b604983613f14565b91507f566572696669636174696f6e52656769737472793a2043616c6c65722069732060008301527f6e6f7420746865207665726966696572206f6620746865207265666572656e6360208301527f6564207265636f726400000000000000000000000000000000000000000000006040830152606082019050919050565b60006136f7603683613f14565b91507f566572696669636174696f6e52656769737472793a205369676e65642064696760008301527f6573742063616e6e6f74206265207665726966696564000000000000000000006020830152604082019050919050565b600061375d603983613f14565b91507f566572696669636174696f6e52656769737472793a2043616c6c65722069732060008301527f6e6f7420746865206f726967696e616c207665726966696572000000000000006020830152604082019050919050565b60006137c3602583613f14565b91507f566572696669636174696f6e52656769737472793a20496e76616c696420616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60c0820160008201516138326000850182613134565b5060208201516138456020850182613083565b5060408201516138586040850182613083565b50606082015161386b606085018261397c565b50608082015161387e608085018261397c565b5060a082015161389160a0850182613116565b50505050565b60c0820160008201516138ad6000850182613134565b5060208201516138c06020850182613083565b5060408201516138d36040850182613083565b5060608201516138e6606085018261397c565b5060808201516138f9608085018261397c565b5060a082015161390c60a0850182613116565b50505050565b600060808301600083015161392a6000860182613134565b50602083015184820360208601526139428282613169565b9150506040830151848203604086015261395c8282613169565b91505060608301516139716060860182613083565b508091505092915050565b61398581613f78565b82525050565b61399481613f78565b82525050565b6139ab6139a682613f78565b6140a4565b82525050565b6139ba81613f82565b82525050565b60006139cc82886130a1565b6014820191506139dc82876130a1565b6014820191506139ec828661399a565b6020820191506139fc828561399a565b602082019150613a0c828461399a565b6020820191508190509695505050505050565b6000613a2a826132ee565b9150613a368285613152565b602082019150613a468284613152565b6020820191508190509392505050565b6000602082019050613a6b6000830184613092565b92915050565b6000604082019050613a866000830185613092565b8181036020830152613a988184613912565b90509392505050565b60006020820190508181036000830152613abb81846130b8565b905092915050565b6000602082019050613ad86000830184613125565b92915050565b6000602082019050613af36000830184613143565b92915050565b6000608082019050613b0e6000830187613143565b613b1b6020830186613143565b613b286040830185613092565b613b35606083018461398b565b95945050505050565b600060a082019050613b536000830188613143565b613b606020830187613143565b613b6d6040830186613143565b613b7a606083018561398b565b613b876080830184613092565b9695505050505050565b6000608082019050613ba66000830187613143565b613bb360208301866139b1565b613bc06040830185613143565b613bcd6060830184613143565b95945050505050565b60006020820190508181036000830152613bef816131a2565b9050919050565b60006020820190508181036000830152613c0f816131e2565b9050919050565b60006020820190508181036000830152613c2f81613248565b9050919050565b60006020820190508181036000830152613c4f81613288565b9050919050565b60006020820190508181036000830152613c6f8161332e565b9050919050565b60006020820190508181036000830152613c8f81613394565b9050919050565b60006020820190508181036000830152613caf81613420565b9050919050565b60006020820190508181036000830152613ccf81613486565b9050919050565b60006020820190508181036000830152613cef816134ec565b9050919050565b60006020820190508181036000830152613d0f81613552565b9050919050565b60006020820190508181036000830152613d2f816135b8565b9050919050565b60006020820190508181036000830152613d4f816135f8565b9050919050565b60006020820190508181036000830152613d6f8161365e565b9050919050565b60006020820190508181036000830152613d8f816136ea565b9050919050565b60006020820190508181036000830152613daf81613750565b9050919050565b60006020820190508181036000830152613dcf816137b6565b9050919050565b600060c082019050613deb6000830184613897565b92915050565b60006020820190508181036000830152613e0b8184613912565b905092915050565b6000602082019050613e28600083018461398b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613e5557613e5461410c565b5b8060405250919050565b600067ffffffffffffffff821115613e7a57613e7961410c565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613eaa57613ea961410c565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f3b82613f58565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613fbc578082015181840152602081019050613fa1565b83811115613fcb576000848401525b50505050565b6000613fdc82613f78565b91506000821415613ff057613fef6140ae565b5b600182039050919050565b6000600282049050600182168061401357607f821691505b60208210811415614027576140266140dd565b5b50919050565b600061403882613f78565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561406b5761406a6140ae565b5b600182019050919050565b600061408182614092565b9050919050565b6000819050919050565b600061409d8261414c565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b61416281613f30565b811461416d57600080fd5b50565b61417981613f4e565b811461418457600080fd5b50565b61419081613f78565b811461419b57600080fd5b5056fea2646970667358221220a71820959fb9a41475afcd80ce722b976c7721ad259287b0d3cad460feba674d64736f6c63430008000033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c806394ef2440116100a2578063b9c688a711610071578063b9c688a7146102f1578063ca2dfd0a1461030f578063ed2ffd281461032b578063edaf4b891461035b578063f2fde38b1461038b57610116565b806394ef244014610245578063958c39ff1461027557806399cf1a1d146102a5578063b9209e33146102c157610116565b8063417469a7116100e9578063417469a7146101c95780634e4de26d146101e557806370eba12414610201578063715018a61461021d5780638da5cb5b1461022757610116565b8063059ce95d1461011b5780630e9e848f1461014b5780631f05b3741461017b5780633310521814610199575b600080fd5b61013560048036038101906101309190612f59565b6103a7565b6040516101429190613df1565b60405180910390f35b61016560048036038101906101609190612f59565b61060c565b6040516101729190613aa1565b60405180910390f35b610183610946565b6040516101909190613e13565b60405180910390f35b6101b360048036038101906101ae9190612f59565b610950565b6040516101c09190613ac3565b60405180910390f35b6101e360048036038101906101de9190612f82565b6109a2565b005b6101ff60048036038101906101fa9190612fd6565b610c33565b005b61021b60048036038101906102169190612fd6565b610e29565b005b610225610fbe565b005b61022f611046565b60405161023c9190613a56565b60405180910390f35b61025f600480360381019061025a9190612fd6565b61106f565b60405161026c9190613dd6565b60405180910390f35b61028f600480360381019061028a9190612fff565b611181565b60405161029c9190613dd6565b60405180910390f35b6102bf60048036038101906102ba9190612f82565b6112e4565b005b6102db60048036038101906102d69190612f59565b61158c565b6040516102e89190613ac3565b60405180910390f35b6102f9611828565b6040516103069190613e13565b60405180910390f35b61032960048036038101906103249190612f59565b611832565b005b61034560048036038101906103409190612f59565b611add565b6040516103529190613aa1565b60405180910390f35b61037560048036038101906103709190612fff565b611e17565b6040516103829190613dd6565b60405180910390f35b6103a560048036038101906103a09190612f59565b611e31565b005b6103af612ba3565b6000801b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042e90613d36565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201805461049b90613ffb565b80601f01602080910402602001604051908101604052809291908181526020018280546104c790613ffb565b80156105145780601f106104e957610100808354040283529160200191610514565b820191906000526020600020905b8154815290600101906020018083116104f757829003601f168201915b5050505050815260200160028201805461052d90613ffb565b80601f016020809104026020016040519081016040528092919081815260200182805461055990613ffb565b80156105a65780601f1061057b576101008083540402835291602001916105a6565b820191906000526020600020905b81548152906001019060200180831161058957829003601f168201915b505050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050919050565b6060600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067590613db6565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561070957602002820191906000526020600020905b8154815260200190600101908083116106f5575b505050505090506000815167ffffffffffffffff811115610753577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561078c57816020015b610779612be4565b8152602001906001900390816107715790505b50905060005b825181101561093b576000600460008584815181106107da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff16151515158152505090508083838151811061091c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101819052505080806109339061402d565b915050610792565b508092505050919050565b6000600754905090565b60008060001b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414159050919050565b6109aa611f29565b73ffffffffffffffffffffffffffffffffffffffff166109c8611046565b73ffffffffffffffffffffffffffffffffffffffff1614610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1590613d16565b60405180910390fd5b6000801b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90613d36565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190610b0c929190612c4b565b506040820151816002019080519060200190610b29929190612c4b565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508160026000836060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcf8ca726ba9d58efa48fa96d3184c211fcce84e8b5e9a3c83c10c1ba9fd392c68282604051610c27929190613a71565b60405180910390a15050565b6000801b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290613c56565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5690613d56565b60405180910390fd5b600460008281526020019081526020016000206000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600382016000905560048201600090556005820160006101000a81549060ff021916905550507f9abf56d49e4ef717f3418600d3ed66048ca2ed8e3e630a70b76a71dd2142def581604051610e1e9190613ade565b60405180910390a150565b6000801b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890613c56565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90613d96565b60405180910390fd5b60016004600083815260200190815260200160002060050160006101000a81548160ff0219169083151502179055507f071ad1bb208a373a52e72fe5d8aa7755d658f88e197e666bf1a6d09d0ddb505681604051610fb39190613ade565b60405180910390a150565b610fc6611f29565b73ffffffffffffffffffffffffffffffffffffffff16610fe4611046565b73ffffffffffffffffffffffffffffffffffffffff161461103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103190613d16565b60405180910390fd5b6110446000611f31565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611077612be4565b600460008381526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff1615151515815250509050919050565b611189612be4565b6000801b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890613c56565b60405180910390fd5b61121a83611ff5565b60006112268484611ff8565b90503373ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff161461129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190613c76565b60405180910390fd5b6112a381612284565b7fb13e5e7efcce7bbc67740f0fe050563d4fd1f5cc7096c3a32cb901711c95ab54816040516112d29190613dd6565b60405180910390a18091505092915050565b6112ec611f29565b73ffffffffffffffffffffffffffffffffffffffff1661130a611046565b73ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613d16565b60405180910390fd5b6000801b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90613cb6565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101908051906020019061144d929190612c4b565b50604082015181600201908051906020019061146a929190612c4b565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508160026000836060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919061154a9061402d565b91905055507f57fdb74cb7ec2177b327961b74feef54dcb8102656cf6484ea992a84eb1bb4d08282604051611580929190613a71565b60405180910390a15050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490613db6565b60405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561168857602002820191906000526020600020905b815481526020019060010190808311611674575b5050505050905060005b815181101561181c576000600460008484815181106116da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff16151515158152505090508060a001511580156117f75750428160800151115b156118085760019350505050611823565b5080806118149061402d565b915050611692565b5060009150505b919050565b6000600354905090565b61183a611f29565b73ffffffffffffffffffffffffffffffffffffffff16611858611046565b73ffffffffffffffffffffffffffffffffffffffff16146118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590613d16565b60405180910390fd5b6000801b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d90613cd6565b60405180910390fd5b60026000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160009055600182016000611a529190612cd1565b600282016000611a629190612cd1565b6003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505060036000815480929190611a9e90613fd1565b91905055507f44a3cd4eb5cc5748f6169df057b1cb2ae4c383e87cd94663c430e095d4cba42481604051611ad29190613a56565b60405180910390a150565b6060600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4690613db6565b60405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611bda57602002820191906000526020600020905b815481526020019060010190808311611bc6575b505050505090506000815167ffffffffffffffff811115611c24577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611c5d57816020015b611c4a612be4565b815260200190600190039081611c425790505b50905060005b8251811015611e0c57600060046000858481518110611cab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff161515151581525050905080838381518110611ded577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181905250508080611e049061402d565b915050611c63565b508092505050919050565b611e1f612be4565b611e298383611ff8565b905092915050565b611e39611f29565b73ffffffffffffffffffffffffffffffffffffffff16611e57611046565b73ffffffffffffffffffffffffffffffffffffffff1614611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490613d16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1490613c36565b60405180910390fd5b611f2681611f31565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50565b612000612be4565b600061206a7f10f37c780798f8d6ccc5deba550b287b1ccef3a50b9007536dc9ce57c6f066838560000151805190602001208660200151876040015160405160200161204f9493929190613af9565b60405160208183030381529060405280519060200120612462565b90506000612078828561247c565b90506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a590613d76565b60405180910390fd5b428660400151116121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90613bf6565b60405180910390fd5b60006040518060c001604052806000801b81526020018373ffffffffffffffffffffffffffffffffffffffff168152602001886020015173ffffffffffffffffffffffffffffffffffffffff16815260200142815260200188604001518152602001600015158152509050600061226a826124a3565b905080826000018181525050819550505050505092915050565b600760008154809291906122979061402d565b91905055508060046000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555090505060056000826040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160000151908060018154018082558091505060019003906000526020600020016000909190919091505560066000826020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160000151908060018154018082558091505060019003906000526020600020016000909190919091505550565b600061247561246f6124ed565b83612607565b9050919050565b600080600061248b858561263a565b91509150612498816126bd565b819250505092915050565b600081602001518260400151836060015184608001516007546040516020016124d09594939291906139c0565b604051602081830303815290604052805190602001209050919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561256957507f000000000000000000000000000000000000000000000000000000000000000046145b15612596577f00000000000000000000000000000000000000000000000000000000000000009050612604565b6126017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612a0e565b90505b90565b6000828260405160200161261c929190613a1f565b60405160208183030381529060405280519060200120905092915050565b60008060418351141561267c5760008060006020860151925060408601519150606086015160001a905061267087828585612a48565b945094505050506126b6565b6040835114156126ad5760008060208501519150604085015190506126a2868383612b55565b9350935050506126b6565b60006002915091505b9250929050565b600060048111156126f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612730577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561273b57612a0b565b60016004811115612775577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156127ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156127ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e690613bd6565b60405180910390fd5b60026004811115612829577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612862577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a90613c16565b60405180910390fd5b600360048111156128dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612916577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e90613c96565b60405180910390fd5b600480811115612990577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156129c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0190613cf6565b60405180910390fd5b5b50565b60008383834630604051602001612a29959493929190613b3e565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612a83576000600391509150612b4c565b601b8560ff1614158015612a9b5750601c8560ff1614155b15612aad576000600491509150612b4c565b600060018787878760405160008152602001604052604051612ad29493929190613b91565b6020604051602081039080840390855afa158015612af4573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b4357600060019250925050612b4c565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050612b9587828885612a48565b935093505050935093915050565b6040518060800160405280600080191681526020016060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b6040518060c0016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000151581525090565b828054612c5790613ffb565b90600052602060002090601f016020900481019282612c795760008555612cc0565b82601f10612c9257805160ff1916838001178555612cc0565b82800160010185558215612cc0579182015b82811115612cbf578251825591602001919060010190612ca4565b5b509050612ccd9190612d11565b5090565b508054612cdd90613ffb565b6000825580601f10612cef5750612d0e565b601f016020900490600052602060002090810190612d0d9190612d11565b5b50565b5b80821115612d2a576000816000905550600101612d12565b5090565b6000612d41612d3c84613e5f565b613e2e565b905082815260208101848484011115612d5957600080fd5b612d64848285613f8f565b509392505050565b6000612d7f612d7a84613e8f565b613e2e565b905082815260208101848484011115612d9757600080fd5b612da2848285613f8f565b509392505050565b600081359050612db981614159565b92915050565b600081359050612dce81614170565b92915050565b600082601f830112612de557600080fd5b8135612df5848260208601612d2e565b91505092915050565b600082601f830112612e0f57600080fd5b8135612e1f848260208601612d6c565b91505092915050565b600060608284031215612e3a57600080fd5b612e446060613e2e565b9050600082013567ffffffffffffffff811115612e6057600080fd5b612e6c84828501612dfe565b6000830152506020612e8084828501612daa565b6020830152506040612e9484828501612f44565b60408301525092915050565b600060808284031215612eb257600080fd5b612ebc6080613e2e565b90506000612ecc84828501612dbf565b600083015250602082013567ffffffffffffffff811115612eec57600080fd5b612ef884828501612dfe565b602083015250604082013567ffffffffffffffff811115612f1857600080fd5b612f2484828501612dfe565b6040830152506060612f3884828501612daa565b60608301525092915050565b600081359050612f5381614187565b92915050565b600060208284031215612f6b57600080fd5b6000612f7984828501612daa565b91505092915050565b60008060408385031215612f9557600080fd5b6000612fa385828601612daa565b925050602083013567ffffffffffffffff811115612fc057600080fd5b612fcc85828601612ea0565b9150509250929050565b600060208284031215612fe857600080fd5b6000612ff684828501612dbf565b91505092915050565b6000806040838503121561301257600080fd5b600083013567ffffffffffffffff81111561302c57600080fd5b61303885828601612e28565b925050602083013567ffffffffffffffff81111561305557600080fd5b61306185828601612dd4565b9150509250929050565b6000613077838361381c565b60c08301905092915050565b61308c81613f30565b82525050565b61309b81613f30565b82525050565b6130b26130ad82613f30565b614076565b82525050565b60006130c382613ecf565b6130cd8185613ef2565b93506130d883613ebf565b8060005b838110156131095781516130f0888261306b565b97506130fb83613ee5565b9250506001810190506130dc565b5085935050505092915050565b61311f81613f42565b82525050565b61312e81613f42565b82525050565b61313d81613f4e565b82525050565b61314c81613f4e565b82525050565b61316361315e82613f4e565b614088565b82525050565b600061317482613eda565b61317e8185613f03565b935061318e818560208601613f9e565b6131978161413b565b840191505092915050565b60006131af601883613f14565b91507f45434453413a20696e76616c6964207369676e617475726500000000000000006000830152602082019050919050565b60006131ef603783613f14565b91507f566572696669636174696f6e52656769737472793a205665726966696361746960008301527f6f6e20636f6e6669726d6174696f6e20657870697265640000000000000000006020830152604082019050919050565b6000613255601f83613f14565b91507f45434453413a20696e76616c6964207369676e6174757265206c656e677468006000830152602082019050919050565b6000613295602683613f14565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132fb600283613f25565b91507f19010000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061333b602e83613f14565b91507f566572696669636174696f6e52656769737472793a2043616c6c65722069732060008301527f6e6f7420612056657269666965720000000000000000000000000000000000006020830152604082019050919050565b60006133a1604483613f14565b91507f566572696669636174696f6e52656769737472793a2043616c6c65722069732060008301527f6e6f7420746865207665726966696572206f662074686520766572696669636160208301527f74696f6e000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b600061342d602283613f14565b91507f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613493602d83613f14565b91507f566572696669636174696f6e52656769737472793a205665726966696572204160008301527f64647265737320457869737473000000000000000000000000000000000000006020830152604082019050919050565b60006134f9603583613f14565b91507f566572696669636174696f6e52656769737472793a205665726966696572204160008301527f64647265737320446f6573204e6f7420457869737400000000000000000000006020830152604082019050919050565b600061355f602283613f14565b91507f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135c5602083613f14565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613605602e83613f14565b91507f566572696669636174696f6e52656769737472793a20556e6b6e6f776e20566560008301527f72696669657220416464726573730000000000000000000000000000000000006020830152604082019050919050565b600061366b604983613f14565b91507f566572696669636174696f6e52656769737472793a2043616c6c65722069732060008301527f6e6f7420746865207665726966696572206f6620746865207265666572656e6360208301527f6564207265636f726400000000000000000000000000000000000000000000006040830152606082019050919050565b60006136f7603683613f14565b91507f566572696669636174696f6e52656769737472793a205369676e65642064696760008301527f6573742063616e6e6f74206265207665726966696564000000000000000000006020830152604082019050919050565b600061375d603983613f14565b91507f566572696669636174696f6e52656769737472793a2043616c6c65722069732060008301527f6e6f7420746865206f726967696e616c207665726966696572000000000000006020830152604082019050919050565b60006137c3602583613f14565b91507f566572696669636174696f6e52656769737472793a20496e76616c696420616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60c0820160008201516138326000850182613134565b5060208201516138456020850182613083565b5060408201516138586040850182613083565b50606082015161386b606085018261397c565b50608082015161387e608085018261397c565b5060a082015161389160a0850182613116565b50505050565b60c0820160008201516138ad6000850182613134565b5060208201516138c06020850182613083565b5060408201516138d36040850182613083565b5060608201516138e6606085018261397c565b5060808201516138f9608085018261397c565b5060a082015161390c60a0850182613116565b50505050565b600060808301600083015161392a6000860182613134565b50602083015184820360208601526139428282613169565b9150506040830151848203604086015261395c8282613169565b91505060608301516139716060860182613083565b508091505092915050565b61398581613f78565b82525050565b61399481613f78565b82525050565b6139ab6139a682613f78565b6140a4565b82525050565b6139ba81613f82565b82525050565b60006139cc82886130a1565b6014820191506139dc82876130a1565b6014820191506139ec828661399a565b6020820191506139fc828561399a565b602082019150613a0c828461399a565b6020820191508190509695505050505050565b6000613a2a826132ee565b9150613a368285613152565b602082019150613a468284613152565b6020820191508190509392505050565b6000602082019050613a6b6000830184613092565b92915050565b6000604082019050613a866000830185613092565b8181036020830152613a988184613912565b90509392505050565b60006020820190508181036000830152613abb81846130b8565b905092915050565b6000602082019050613ad86000830184613125565b92915050565b6000602082019050613af36000830184613143565b92915050565b6000608082019050613b0e6000830187613143565b613b1b6020830186613143565b613b286040830185613092565b613b35606083018461398b565b95945050505050565b600060a082019050613b536000830188613143565b613b606020830187613143565b613b6d6040830186613143565b613b7a606083018561398b565b613b876080830184613092565b9695505050505050565b6000608082019050613ba66000830187613143565b613bb360208301866139b1565b613bc06040830185613143565b613bcd6060830184613143565b95945050505050565b60006020820190508181036000830152613bef816131a2565b9050919050565b60006020820190508181036000830152613c0f816131e2565b9050919050565b60006020820190508181036000830152613c2f81613248565b9050919050565b60006020820190508181036000830152613c4f81613288565b9050919050565b60006020820190508181036000830152613c6f8161332e565b9050919050565b60006020820190508181036000830152613c8f81613394565b9050919050565b60006020820190508181036000830152613caf81613420565b9050919050565b60006020820190508181036000830152613ccf81613486565b9050919050565b60006020820190508181036000830152613cef816134ec565b9050919050565b60006020820190508181036000830152613d0f81613552565b9050919050565b60006020820190508181036000830152613d2f816135b8565b9050919050565b60006020820190508181036000830152613d4f816135f8565b9050919050565b60006020820190508181036000830152613d6f8161365e565b9050919050565b60006020820190508181036000830152613d8f816136ea565b9050919050565b60006020820190508181036000830152613daf81613750565b9050919050565b60006020820190508181036000830152613dcf816137b6565b9050919050565b600060c082019050613deb6000830184613897565b92915050565b60006020820190508181036000830152613e0b8184613912565b905092915050565b6000602082019050613e28600083018461398b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613e5557613e5461410c565b5b8060405250919050565b600067ffffffffffffffff821115613e7a57613e7961410c565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613eaa57613ea961410c565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f3b82613f58565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613fbc578082015181840152602081019050613fa1565b83811115613fcb576000848401525b50505050565b6000613fdc82613f78565b91506000821415613ff057613fef6140ae565b5b600182039050919050565b6000600282049050600182168061401357607f821691505b60208210811415614027576140266140dd565b5b50919050565b600061403882613f78565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561406b5761406a6140ae565b5b600182019050919050565b600061408182614092565b9050919050565b6000819050919050565b600061409d8261414c565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b61416281613f30565b811461416d57600080fd5b50565b61417981613f4e565b811461418457600080fd5b50565b61419081613f78565b811461419b57600080fd5b5056fea2646970667358221220a71820959fb9a41475afcd80ce722b976c7721ad259287b0d3cad460feba674d64736f6c63430008000033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/packages/ethereum-dapp/lib/did.ts b/packages/ethereum-dapp/lib/did.ts new file mode 100644 index 000000000..abdf6ca96 --- /dev/null +++ b/packages/ethereum-dapp/lib/did.ts @@ -0,0 +1,92 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +// @ts-ignore +import { randomBytes } from "crypto-browserify" + +import { generate } from "@transmute/did-key.js" +import bs58 from "bs58" +import { EdDSASigner, ES256KSigner } from "did-jwt" +import { Issuer } from "did-jwt-vc" + +type DidKey = { + id: string + type: string + controller: string + publicKeyBase58: string + privateKeyBase58: string +} + +type DidDocument = { + id: string + verificationMethod: Omit[] +} + +type DidGeneration = { didDocument: DidDocument; keys: DidKey[] } + +export const didFactory = async ( + type: "ed25519" | "secp256k1" = "ed25519", + ld = true, + privateKey?: Uint8Array +): Promise => { + const didKey = await generate( + type, + { secureRandom: () => privateKey ?? randomBytes(32) }, + { accept: ld ? "application/did+ld+json" : "application/did+json" } + ) + + return didKey as DidGeneration +} + +/** + * Generate an "Issuer" type (a signer for the JWT) with a randomly selected + * algorithm, either EdDSA or ES256K. + */ +export const signerFactory = async ( + privateKey?: Uint8Array, + alg2?: string +): Promise => { + const alg = alg2 ?? Math.round(Math.random()) ? "EdDSA" : "ES256K" + const did = await didFactory( + alg === "EdDSA" ? "ed25519" : "secp256k1", + true, + privateKey + ) + const privateKey2 = bs58.decode(did.keys[0].privateKeyBase58) + const signer = + alg === "EdDSA" ? EdDSASigner(privateKey2) : ES256KSigner(privateKey2) + + return { + did: did.didDocument.id, + signer, + alg + } +} + +/** + * Generate an "Issuer" type for a predefined private key + */ +export const didIssuer = async (): Promise => { + return signerFactory( + Buffer.from([ + 19, 223, 117, 141, 193, 142, 129, 52, 105, 119, 211, 135, 30, 130, 11, 83, + 16, 183, 86, 198, 138, 26, 117, 175, 170, 39, 1, 247, 38, 102, 205, 115 + ]), + "ES256K" + ) +} diff --git a/packages/ethereum-dapp/next-env.d.ts b/packages/ethereum-dapp/next-env.d.ts new file mode 100644 index 000000000..b5105a495 --- /dev/null +++ b/packages/ethereum-dapp/next-env.d.ts @@ -0,0 +1,23 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/ethereum-dapp/next.config.js b/packages/ethereum-dapp/next.config.js new file mode 100644 index 000000000..48bc7735b --- /dev/null +++ b/packages/ethereum-dapp/next.config.js @@ -0,0 +1,22 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** @type {import('next').NextConfig} */ +module.exports = { + reactStrictMode: true, +}; diff --git a/packages/ethereum-dapp/package.json b/packages/ethereum-dapp/package.json new file mode 100644 index 000000000..1a7aad7d3 --- /dev/null +++ b/packages/ethereum-dapp/package.json @@ -0,0 +1,44 @@ +{ + "name": "ethereum-dapp", + "version": "0.8.2", + "author": "Solana Maintainers ", + "repository": "https://github.com/solana-labs/wallet-adapter", + "license": "Apache-2.0", + "files": [ + "pages", + "public", + "styles", + ".eslintrc.json", + "LICENSE", + "next.config.js", + "next-env.d.ts", + "README.md", + "tsconfig.json" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "clean": "shx rm -rf .next", + "dev": "NODE_OPTIONS='--inspect' next dev", + "build": "npm run clean && next build", + "start": "next start" + }, + "dependencies": { + "@ethersproject/providers": "^5.5.3", + "@web3-react/core": "^6.1.9", + "@web3-react/injected-connector": "^6.0.7", + "next": "12.1.0", + "react": "17.0.2", + "react-dom": "17.0.2" + }, + "devDependencies": { + "@types/node": "17.0.8", + "@types/react": "^17.0.0", + "@types/react-dom": "^17.0.0", + "eslint": "^8.6.0", + "eslint-config-next": "^12.0.7", + "shx": "^0.3.3", + "typescript": "~4.4.4" + } +} diff --git a/packages/ethereum-dapp/pages/index.tsx b/packages/ethereum-dapp/pages/index.tsx new file mode 100644 index 000000000..518f7fcfe --- /dev/null +++ b/packages/ethereum-dapp/pages/index.tsx @@ -0,0 +1,530 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import type { NextPage } from "next" +import { Contract } from "@ethersproject/contracts" +import { FC, useState } from "react" +import { Web3ReactProvider } from "@web3-react/core" +import { Web3Provider } from "@ethersproject/providers" +import { useWeb3React } from "@web3-react/core" +import { InjectedConnector } from "@web3-react/injected-connector" +import { decodeVerifiableCredential } from "verifier" +import { + createVerifiableCredentialJwt, + createVerifiablePresentationJwt, + Issuer +} from "did-jwt-vc" +import { didIssuer, signerFactory } from "../lib/did" + +export const injectedConnector = new InjectedConnector({ + supportedChainIds: [ + 1337 // Localhost + ] +}) + +function getLibrary(provider: any): Web3Provider { + const library = new Web3Provider(provider) + library.pollingInterval = 12000 + return library +} + +export const Wallet = () => { + const { chainId, account, activate, active } = useWeb3React() + + const onClick = () => { + activate(injectedConnector) + } + + return ( +
+
ChainId: {chainId}
+
Account: {account}
+ {active ? ( +
+ ) : ( + + )} +
+ ) +} + +const Content: FC = () => { + const { chainId, account, activate, active } = useWeb3React() + const [issuer, setIssuer] = useState() + const [subject, setSubject] = useState() + const [credential, setCredential] = useState>() + const [credentialJWT, setCredentialJWT] = useState() + const [verificationRequest, setVerificationRequest] = + useState>() + const [verificationOffer, setVerificationOffer] = + useState>() + const [verificationResult, setVerificationResult] = + useState>() + + return ( +
+ + + {issuer ? : null} + {subject ? : null} + {credential ? ( + + ) : null} + {credentialJWT ? ( + + ) : null} + {verificationRequest ? ( + + ) : null} + {verificationOffer ? ( + + ) : null} + {verificationResult ? ( + + ) : null} + + {account && !issuer ? ( + { + console.log("onIssuerGenerated", issuer) + setIssuer(issuer) + window.scroll(0, document.body.scrollHeight) + }} + /> + ) : null} + + {account && issuer && !subject ? ( + { + console.log("onSubjectGenerated", subject) + setSubject(subject) + window.scroll({ + top: document.body.scrollHeight, + behavior: "smooth" + }) + }} + /> + ) : null} + + {account && issuer && subject && !credential ? ( + { + console.log( + "onCredentialIssued", + verifiableCredential, + decodedVerifiableCredential + ) + setCredential(decodedVerifiableCredential) + setCredentialJWT(verifiableCredential) + window.scroll({ + top: document.body.scrollHeight, + behavior: "smooth" + }) + }} + /> + ) : null} + + {account && issuer && subject && credential && !verificationRequest ? ( + { + console.log(response) + setVerificationRequest(response) + window.scroll({ + top: document.body.scrollHeight, + behavior: "smooth" + }) + }} + /> + ) : null} + + {account && + issuer && + subject && + credential && + verificationRequest && + !verificationOffer ? ( + { + console.log("onNewVerificationOffer", response) + setVerificationOffer(response) + window.scroll({ + top: document.body.scrollHeight, + behavior: "smooth" + }) + }} + /> + ) : null} + + {account && + issuer && + subject && + credentialJWT && + verificationRequest && + verificationOffer && + !verificationResult ? ( + { + console.log("onNewVerificationResult", response) + setVerificationResult(response) + window.scroll({ + top: document.body.scrollHeight, + behavior: "smooth" + }) + }} + /> + ) : null} + + {account && verificationResult ? ( + + ) : null} +
+ ) +} + +/** + * Component to generate a new Issuer + */ +type GenerateIssuerParams = { + onIssuerGenerated: ({ issuer }: { issuer: Issuer }) => void +} + +const GenerateIssuer: FC = ({ onIssuerGenerated }) => { + const onClick = async () => { + // Create an Issuer + const issuer = await didIssuer() + + onIssuerGenerated({ issuer }) + } + + return +} + +/** + * Component to generate a new Subject + */ +type GenerateSubjectDidParams = { + onSubjectGenerated: ({ subject }: { subject: Issuer }) => void +} + +const GenerateSubject: FC = ({ + onSubjectGenerated +}) => { + const onClick = async () => { + // Create a subject + const subject = await signerFactory() + + onSubjectGenerated({ subject }) + } + + return +} + +/** + * Component to issue a credential + */ +type IssueCredentialProps = { + issuer: Issuer + subject: string + onCredentialIssued: ({ + verifiableCredential, + decodedVerifiableCredential + }: { + verifiableCredential: string + decodedVerifiableCredential: Record + }) => void +} + +const IssueCredential: FC = ({ + issuer, + subject, + onCredentialIssued +}) => { + const onClick = async () => { + // Credential Payload + const payload = { + sub: subject, + nbf: Math.floor(Date.now() / 1000), + vc: { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://verite.id/identity" + ], + type: ["VerifiableCredential", "KYCAMLAttestation"], + credentialSubject: { + id: subject, + KYCAMLAttestation: { + type: "KYCAMLAttestation", + process: "https://circle.com/schemas/definitions/1.0.0/kycaml/usa", + approvalDate: new Date() + } + }, + issuanceDate: new Date() // now + } + } + + // Create the Verifiable Credential + const verifiableCredential = await createVerifiableCredentialJwt( + payload, + issuer + ) + const decodedVerifiableCredential = await decodeVerifiableCredential( + verifiableCredential + ) + + // Callback for the app + onCredentialIssued({ verifiableCredential, decodedVerifiableCredential }) + } + return ( + <> + + + ) +} + +/** + * Component to render any javascript object + */ +type JSONComponentParams = { + title: string + obj: unknown +} + +const JSONComponent: FC = ({ title, obj }) => { + return ( + <> +
{title}
+
+        {JSON.stringify(obj, null, 4)}
+      
+ + ) +} + +/** + * Component to start the verification flow + */ +type CreateVerificationParams = { + subject: string + onNewVerification: ({ + response + }: { + response: Record + }) => void +} +const CreateVerification: FC = ({ + subject, + onNewVerification +}) => { + const onClick = async () => { + const response = await fetch("http://localhost:3000/verifications", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + network: "ethereum", + chainId: 1337, + subject, + registryAddress: "0x5FbDB2315678afecb367f032d93F642f64180aa3", + name: "VerificationRegistry", + version: "1.0" + }) + }) + onNewVerification({ response: await response.json() }) + } + return ( + <> + + + ) +} + +/** + * Component to fetch the challengeTokenUrl + */ +type FetchVerificationOfferParams = { + challengeTokenUrl: string + onNewVerificationOffer: ({ + response + }: { + response: Record + }) => void +} + +const FetchVerificationOffer: FC = ({ + challengeTokenUrl, + onNewVerificationOffer +}) => { + const onClick = async () => { + const response = await fetch(challengeTokenUrl, { + method: "GET", + headers: { + "Content-Type": "application/json" + } + }) + onNewVerificationOffer({ response: await response.json() }) + } + return ( + <> + + + ) +} + +/** + * Component to submit a credential for verification + */ +type SubmitCredentialParams = { + subject: Issuer + verificationOffer: any + verifiableCredential: string + onNewVerificationResult: ({ + response + }: { + response: Record + }) => void +} + +const SubmitCredential: FC = ({ + subject, + verificationOffer, + verifiableCredential, + onNewVerificationResult +}) => { + const onClick = async () => { + const payload = { + nonce: verificationOffer.body.challenge, + vp: { + "@context": ["https://www.w3.org/2018/credentials/v1"], + type: ["VerifiablePresentation", "CredentialFulfillment"], + holder: subject.did, + verifiableCredential: [verifiableCredential] + }, + presentation_submission: { + id: "b68fda51-21aa-4cdf-84b7-d452b1c9c3cc", // random UUID + definition_id: verificationOffer.body.presentation_definition.id, + descriptor_map: [verifiableCredential].flat().map((_vc, i) => ({ + format: "jwt_vc", + id: "kycaml_input", + path: `$.verifiableCredential[${i}]` + })) + } + } + + const presentation = await createVerifiablePresentationJwt(payload, subject) + + const replyUrl = verificationOffer.reply_url as string + const response = await fetch(replyUrl, { + method: "POST", + headers: { + "Content-Type": "text/plain" + }, + body: presentation + }) + + onNewVerificationResult(await response.json()) + } + return ( + <> + + + ) +} + +/** + * Component to submit a credential for verification + */ +type SubmitVerificationParams = { + verificationResult: Record +} + +const SubmitVerification: FC = ({ + verificationResult +}) => { + const { account, library } = useWeb3React() + // Track status of Ethereum transaction + const [status, setStatus] = useState() + // const wallet = useAnchorWallet() + + /** + * Send a Ethereum transaction with a Verification Result and a signature. If the program does not + * throw an error, it was valid. + */ + const submitVerification = async () => { + setStatus("pending") + + const address = "0x5FbDB2315678afecb367f032d93F642f64180aa3" + const abi = require("../lib/TestRegistry.json") + const contract = new Contract(address, abi.abi, library?.getSigner()) + + console.log( + verificationResult.verificationResult, + verificationResult.signature.substr(0, 64) + ) + + try { + await contract["validate"]( + verificationResult.verificationResult, + verificationResult.signature + ) + } catch (e) { + console.log(e) + setStatus("error") + return + } + setStatus("success") + } + + return ( +
+
+ +
+
Status: {status}
+
+ ) +} + +function App() { + return ( + + + + ) +} + +const Home: NextPage = () => { + return +} + +export default Home diff --git a/packages/ethereum-dapp/public/favicon.ico b/packages/ethereum-dapp/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/packages/ethereum-dapp/public/vercel.svg b/packages/ethereum-dapp/public/vercel.svg new file mode 100644 index 000000000..fbf0e25a6 --- /dev/null +++ b/packages/ethereum-dapp/public/vercel.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/packages/ethereum-dapp/styles/Home.module.css b/packages/ethereum-dapp/styles/Home.module.css new file mode 100644 index 000000000..42d956a2d --- /dev/null +++ b/packages/ethereum-dapp/styles/Home.module.css @@ -0,0 +1,140 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +.container { + padding: 0 2rem; +} + +.main { + min-height: 100vh; + padding: 4rem 0; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.footer { + display: flex; + flex: 1; + padding: 2rem 0; + border-top: 1px solid #eaeaea; + justify-content: center; + align-items: center; +} + +.footer a { + display: flex; + justify-content: center; + align-items: center; + flex-grow: 1; +} + +.title a { + color: #0070f3; + text-decoration: none; +} + +.title a:hover, +.title a:focus, +.title a:active { + text-decoration: underline; +} + +.title { + margin: 0; + line-height: 1.15; + font-size: 4rem; +} + +.title, +.description { + text-align: center; +} + +.walletButtons { + margin-top: 1.5rem; + display: flex; + gap: 2rem; +} + +.description { + margin: 4rem 0; + line-height: 1.5; + font-size: 1.5rem; +} + +.code { + background: #fafafa; + border-radius: 5px; + padding: 0.75rem; + font-size: 1.1rem; + font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, + Bitstream Vera Sans Mono, Courier New, monospace; +} + +.grid { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + max-width: 800px; +} + +.card { + margin: 1rem; + padding: 1.5rem; + text-align: left; + color: inherit; + text-decoration: none; + border: 1px solid #eaeaea; + border-radius: 10px; + transition: color 0.15s ease, border-color 0.15s ease; + max-width: 300px; +} + +.card:hover, +.card:focus, +.card:active { + color: #0070f3; + border-color: #0070f3; +} + +.card h2 { + margin: 0 0 1rem 0; + font-size: 1.5rem; +} + +.card p { + margin: 0; + font-size: 1.25rem; + line-height: 1.5; +} + +.logo { + height: 1em; + margin-left: 0.5rem; +} + +@media (max-width: 600px) { + .grid { + width: 100%; + flex-direction: column; + } +} diff --git a/packages/ethereum-dapp/styles/globals.css b/packages/ethereum-dapp/styles/globals.css new file mode 100644 index 000000000..c72cc1a03 --- /dev/null +++ b/packages/ethereum-dapp/styles/globals.css @@ -0,0 +1,34 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +html, +body { + padding: 0; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, + Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; +} + +a { + color: inherit; + text-decoration: none; +} + +* { + box-sizing: border-box; +} diff --git a/packages/ethereum-dapp/tsconfig.json b/packages/ethereum-dapp/tsconfig.json new file mode 100644 index 000000000..c58173a5c --- /dev/null +++ b/packages/ethereum-dapp/tsconfig.json @@ -0,0 +1,20 @@ +{ + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"], + "compilerOptions": { + "target": "es6", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true + } +} diff --git a/packages/ethereum/.eslintignore b/packages/ethereum/.eslintignore new file mode 100644 index 000000000..6dd99572e --- /dev/null +++ b/packages/ethereum/.eslintignore @@ -0,0 +1,22 @@ +# Items listed in this file are ignored by ESLint + +# Dependencies +node_modules + +# Build artifacts +dist + +# Test +coverage +jest.config.ts + +# ESLint configuration +.eslintrc.js + +# Babel +babel.config.js + +# Hardhat +hardhat.config.ts + +types/** \ No newline at end of file diff --git a/packages/ethereum/.eslintrc.js b/packages/ethereum/.eslintrc.js new file mode 100644 index 000000000..b0053b65f --- /dev/null +++ b/packages/ethereum/.eslintrc.js @@ -0,0 +1,69 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +module.exports = { + root: true, + env: { + es2021: true, + node: true + }, + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + "plugin:import/recommended", + "plugin:import/typescript", + "prettier" + ], + parser: "@typescript-eslint/parser", + parserOptions: { + ecmaVersion: 13, + project: ["./tsconfig.json"], + sourceType: "module", + tsconfigRootDir: __dirname + }, + plugins: ["@typescript-eslint"], + settings: { + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"] + }, + "import/resolver": { + typescript: {} + } + }, + rules: { + /** + * Ensure all imports are alphabetical and grouped by type. + * See: https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md + */ + "import/order": [ + "error", + { + alphabetize: { + order: "asc" + }, + "newlines-between": "always" + } + ], + /** + * Ease the no-empty block rule to allow for empty catch blocks. + * See: https://eslint.org/docs/rules/no-empty + */ + "no-empty": ["error", { allowEmptyCatch: true }] + } +} diff --git a/packages/ethereum/.gitignore b/packages/ethereum/.gitignore new file mode 100644 index 000000000..fd6b1800a --- /dev/null +++ b/packages/ethereum/.gitignore @@ -0,0 +1,6 @@ +#Hardhat files +cache +artifacts + +# Typechain files +typechain-types diff --git a/packages/ethereum/.nvmrc b/packages/ethereum/.nvmrc new file mode 100644 index 000000000..bf79505bb --- /dev/null +++ b/packages/ethereum/.nvmrc @@ -0,0 +1 @@ +v16.14.0 diff --git a/packages/ethereum/.prettierrc.json b/packages/ethereum/.prettierrc.json new file mode 100644 index 000000000..27b720e32 --- /dev/null +++ b/packages/ethereum/.prettierrc.json @@ -0,0 +1,4 @@ +{ + "semi": false, + "trailingComma": "none" +} diff --git a/packages/ethereum/README.md b/packages/ethereum/README.md new file mode 100644 index 000000000..c71b49a9b --- /dev/null +++ b/packages/ethereum/README.md @@ -0,0 +1,72 @@ +# Ethereum Sample Contract + +This package contains a sample Ethereum contract that implements the Verite Smart Contract Patterns as designed by Centre (now Circle). + +The contract is intended to demonstrate this pattern with a minimal solution. The sample `TestRegistry` simply inherits from the `VerificationRegistry` reference contract provided by Verite. Additionally, a single `validate` method is defined, allowing a Dapp to call it with a VerificationResult and the signature, both values returned from the Verifier. + +If the trusted verifier is recovered from the verification result and signature, the method completes successfully. Otherwise, it'll throw an exception. A production system would need to perform these checks ahead of any privileged method call. + +## E2E Demo + +There are two ways to exercise this contract and demonstrate e2e acceptance: + +1. The [`packages/ethereum-dapp`](https://github.com/circlefin/verifier/tree/master/packages/ethereum-dapp) can be used for e2e acceptance. This is a streamlined example that mocks out the issuer and wallet in the browser. +2. You can find instructions for how to [integrate with the Verite samples provided by Centre (now Circle)](https://github.com/circlefin/verifier/blob/master/docs/integrating_with_centre.md). Such integration demonstrates E2E of the verifier, while also demonstrating how it can be seamlessly integrated with an existing issuer, wallet, dapp, and smart contract. + +## Installation + +From the root of the repository: + +``` +npm install +``` + +## Tests + +Hardhat will automatically spin up an Ethereum node for testing in-memory. These tests demonstrate: + +1. Deploying the contract +2. Adding a trusted verifier +3. Using the Circle verifier to generate a VerificationResult and signature +4. Successfully calling the contract with the given VerificationlResult and signature. +5. Unsuccessfully calling the contract with a bad signature + +``` +npm test +``` + +## Deployment and Managing the Registry + +To deploy the contract, we need a running Ethereum node and sufficient Ethereum to pay gas. Hardhat provides us both a running node and 20 accounts with 1,000 ethereum. + +### Run an ethereum node + +From `packages/ethereum`, run: + +```sh +npx hardhat node +``` + +This will start an ethereum node locally and seed some accounts to use. + +### Deploy + +From `packages/ethereum`, run: + +```sh +npx hardhat deploy --network localhost +``` + +This will deploy the contract to the running Ethereum network on localhost. + +### Trusted Verifiers + +The sample `VerificationRegistry` contract includes on-chain persistence of a list of trusted verifiers. The contract owner can add, update, and remove verifiers. + +The demo contract includes a single trusted verifier hard-coded in the deploy script. The project uses the verifier as defined in the verifier package's `.env.example`. + +To get started, the contract owner would need to register Circle's ethereum address as a verifier. This step maps a verifier's ethereum address to a `VerifierInfo` object that includes a name, did, url, and the signer address. The signer must match the Ethereum public key of the signer used for verification. Otherwise, the name, did, and URL are for informational purposes only. + +The contract also includes accessor methods to obtain the `VerifierInfo` object for a given ethereum address. Consequently, verifiers can be contacted out-of-band by authorities in order to provide further data associated with a particular verification. + +You can find more information on the [Verite docs](https://verite.id/verite/patterns/smart-contract-verite#verifier-management) diff --git a/packages/ethereum/babel.config.js b/packages/ethereum/babel.config.js new file mode 100644 index 000000000..8bc6e7f81 --- /dev/null +++ b/packages/ethereum/babel.config.js @@ -0,0 +1,24 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +module.exports = { + presets: [ + ["@babel/preset-env", { targets: { node: "current" } }], + "@babel/preset-typescript" + ] +} diff --git a/packages/ethereum/bin/setup b/packages/ethereum/bin/setup new file mode 100755 index 000000000..507531921 --- /dev/null +++ b/packages/ethereum/bin/setup @@ -0,0 +1,13 @@ +#!/usr/bin/env sh + +# This script sets up the local environment for development. It is safe to +# run this script multiple times. This should be run when you first check +# out the project. + +# Compile test contracts +echo "Compiling Solidity contracts..." +npm run compile + +# Generate type bindings +echo "Generating type bindings for smartcontracts..." +npm run hardhat-typechain diff --git a/packages/ethereum/contracts/IVerificationRegistry.sol b/packages/ethereum/contracts/IVerificationRegistry.sol new file mode 100644 index 000000000..a1b8bac0f --- /dev/null +++ b/packages/ethereum/contracts/IVerificationRegistry.sol @@ -0,0 +1,161 @@ +/** + * SPDX-License-Identifier: MIT + * + * Copyright (c) 2018-2021 CENTRE SECZ + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +pragma solidity ^0.8.0; + +/** +* @dev Info about Verifiers +*/ +struct VerifierInfo { + bytes32 name; + string did; + string url; + address signer; +} + +/** +* @dev A verifier will submit a verification result in this format. +*/ +struct VerificationResult { + string[] schema; // indicator of the type of verification result + address subject; // address of the subject of the verification + uint256 expiration; // expiration of verification (may or may not be expiration of the VC) + string verifier_verification_id; // an id from verifier to identify this result in their system +} + +/** +* @dev The registry will accept VerificationResults submitted to it, +* and if valid, will persist them on-chain as VerificationRecords +*/ +struct VerificationRecord { + bytes32 uuid; // generated in contract, and also enables offchain verifier-persisted info related to verification + address verifier; // address of verifier, can be used to pull VerifierInfo + address subject; // address of the subject, the recipient of a successful verification + uint256 entryTime; // time at which the verification was proven and recorded (not the time of verification) + uint256 expirationTime; // expiration of verification (may or may not be expiration of the VC) + bool revoked; // revoked or valid and active +} + +/** + * @title Interface defining basic VerificationRegistry functionality. + */ +interface IVerificationRegistry { + + /**********************/ + /* EVENT DECLARATIONS */ + /**********************/ + + event VerifierAdded(address verifier, VerifierInfo verifierInfo); + event VerifierUpdated(address verifier, VerifierInfo verifierInfo); + event VerifierRemoved(address verifier); + + event VerificationResultConfirmed(VerificationRecord verificationRecord); + event VerificationRevoked(bytes32 uuid); + event VerificationRemoved(bytes32 uuid); + + /*****************************/ + /* VERIFIER MANAGEMENT LOGIC */ + /*****************************/ + + /** + * @dev The Owner adds a Verifier Delegate to the contract. + */ + function addVerifier(address verifierAddress, VerifierInfo memory verifierInfo) external; + + /** + * @dev Query whether an address is a Verifier Delegate. + */ + function isVerifier(address account) external view returns (bool); + + /** + * @dev Retrieve the number of registered Verifier Delegates + */ + function getVerifierCount() external view returns(uint); + + /** + * @dev Request information about a Verifier based on its signing address. + */ + function getVerifier(address verifierAddress) external view returns (VerifierInfo memory); + + /** + * @dev The onwer updates an existing Verifier Delegate's did, URL, and name. + */ + function updateVerifier(address verifierAddress, VerifierInfo memory verifierInfo) external; + + /** + * @dev The owner can remove a Verifier Delegate from the contract. + */ + function removeVerifier(address verifierAddress) external; + + /**********************/ + /* VERIFICATION LOGIC */ + /**********************/ + + /** + * @dev Retrieve the current total number of registered VerificationRecords + */ + function getVerificationCount() external view returns(uint256); + + /** + * @dev Determine whether the subject address has a verification record that is not expired + */ + function isVerified(address subject) external view returns (bool); + + /** + * @dev Retrieve a specific Verification Record by its uuid + */ + function getVerification(bytes32 uuid) external view returns (VerificationRecord memory); + + /** + * @dev Retrieve all of the verification records associated with this subject address + */ + function getVerificationsForSubject(address subject) external view returns (VerificationRecord[] memory); + + /** + * @dev Retrieve all of the verification records associated with this verifier address + */ + function getVerificationsForVerifier(address verifier) external view returns (VerificationRecord[] memory); + + /** + * @dev Verifiers can revoke Verification Records they previously created + */ + function revokeVerification(bytes32 uuid) external; + + /** + * @dev Verifiers can remove verifications they previously created. Nothing is + * truly 'deleted' from on-chain storage, as the record exists in previous + * state, but this does prevent the record from usage in the future. + */ + function removeVerification(bytes32 uuid) external; + + /** + * @dev A verifier registers a VerificationResult after it has executed a + * successful verification. The contract will validate the result, and + * if it is valid and is signed by this calling verifier's signer, + * then the resulting VerificationRecord will be persisted and returned. + */ + function registerVerification( + VerificationResult memory verificationResult, + bytes memory signature + ) external returns (VerificationRecord memory); +} diff --git a/packages/ethereum/contracts/TestRegistry.sol b/packages/ethereum/contracts/TestRegistry.sol new file mode 100644 index 000000000..22e096b07 --- /dev/null +++ b/packages/ethereum/contracts/TestRegistry.sol @@ -0,0 +1,17 @@ +pragma solidity ^0.8.0; + +import "./VerificationRegistry.sol"; + +/** + * A dummy contract used for testing purposes + */ +contract TestRegistry is VerificationRegistry { + + function validate( + VerificationResult memory verificationResult, + bytes memory signature + ) external view returns (VerificationRecord memory) { + return _validateVerificationResult(verificationResult, signature); + } + +} diff --git a/packages/ethereum/contracts/VerificationRegistry.sol b/packages/ethereum/contracts/VerificationRegistry.sol new file mode 100644 index 000000000..6161a67bc --- /dev/null +++ b/packages/ethereum/contracts/VerificationRegistry.sol @@ -0,0 +1,370 @@ +/** + * SPDX-License-Identifier: MIT + * + * Copyright (c) 2018-2021 CENTRE SECZ + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +pragma solidity ^0.8.0; + +import "./IVerificationRegistry.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol"; +import "hardhat/console.sol"; + +/** + * @title A persistent IVerificationRegistry implementation. + */ +contract VerificationRegistry is Ownable, EIP712("VerificationRegistry", "1.0"), IVerificationRegistry { + + // Verifier addresses mapped to metadata (VerifierInfo) about the Verifiers. + mapping(address => VerifierInfo) private _verifiers; + + // Verifier signing keys mapped to verifier addresses + mapping(address => address) private _signers; + + // Total number of active registered verifiers + uint256 _verifierCount; + + // All verification records keyed by their uuids + mapping(bytes32 => VerificationRecord) private _verifications; + + // Verifications mapped to subject addresses (those who receive verifications) + mapping(address => bytes32[]) private _verificationsForSubject; + + // Verfications issued by a given trusted verifier (those who execute verifications) + mapping(address => bytes32[]) private _verificationsForVerifier; + + // Total verifications registered (mapping keys not being enumerable, countable, etc) + uint256 private _verificationRecordCount; + + /*****************************/ + /* VERIFIER MANAGEMENT LOGIC */ + /*****************************/ + + /** + * @inheritdoc IVerificationRegistry + */ + function addVerifier(address verifierAddress, VerifierInfo memory verifierInfo) external override onlyOwner { + require(_verifiers[verifierAddress].name == 0, "VerificationRegistry: Verifier Address Exists"); + _verifiers[verifierAddress] = verifierInfo; + _signers[verifierInfo.signer] = verifierAddress; + _verifierCount++; + emit VerifierAdded(verifierAddress, verifierInfo); + } + + /** + * @inheritdoc IVerificationRegistry + */ + function isVerifier(address account) external override view returns (bool) { + return _verifiers[account].name != 0; + } + + /** + * @inheritdoc IVerificationRegistry + */ + function getVerifierCount() external override view returns(uint) { + return _verifierCount; + } + + /** + * @inheritdoc IVerificationRegistry + */ + function getVerifier(address verifierAddress) external override view returns (VerifierInfo memory) { + require(_verifiers[verifierAddress].name != 0, "VerificationRegistry: Unknown Verifier Address"); + return _verifiers[verifierAddress]; + } + + /** + * @inheritdoc IVerificationRegistry + */ + function updateVerifier(address verifierAddress, VerifierInfo memory verifierInfo) external override onlyOwner { + require(_verifiers[verifierAddress].name != 0, "VerificationRegistry: Unknown Verifier Address"); + _verifiers[verifierAddress] = verifierInfo; + _signers[verifierInfo.signer] = verifierAddress; + emit VerifierUpdated(verifierAddress, verifierInfo); + } + + /** + * @inheritdoc IVerificationRegistry + */ + function removeVerifier(address verifierAddress) external override onlyOwner { + require(_verifiers[verifierAddress].name != 0, "VerificationRegistry: Verifier Address Does Not Exist"); + delete _signers[_verifiers[verifierAddress].signer]; + delete _verifiers[verifierAddress]; + _verifierCount--; + emit VerifierRemoved(verifierAddress); + } + + /**********************/ + /* VERIFICATION LOGIC */ + /**********************/ + + modifier onlyVerifier() { + require( + _verifiers[msg.sender].name != 0, + "VerificationRegistry: Caller is not a Verifier" + ); + _; + } + + /** + * @inheritdoc IVerificationRegistry + */ + function getVerificationCount() external override view returns(uint256) { + return _verificationRecordCount; + } + + /** + * @inheritdoc IVerificationRegistry + */ + function isVerified(address subject) external override view returns (bool) { + require(subject != address(0), "VerificationRegistry: Invalid address"); + bytes32[] memory subjectRecords = _verificationsForSubject[subject]; + for (uint i=0; i block.timestamp) { + return true; + } + } + return false; + } + + /** + * @inheritdoc IVerificationRegistry + */ + function getVerification(bytes32 uuid) external override view returns (VerificationRecord memory) { + return _verifications[uuid]; + } + + /** + * @inheritdoc IVerificationRegistry + */ + function getVerificationsForSubject(address subject) external override view returns (VerificationRecord[] memory) { + require(subject != address(0), "VerificationRegistry: Invalid address"); + bytes32[] memory subjectRecords = _verificationsForSubject[subject]; + VerificationRecord[] memory records = new VerificationRecord[](subjectRecords.length); + for (uint i=0; i block.timestamp, + "VerificationRegistry: Verification confirmation expired" + ); + + // create a VerificationRecord + VerificationRecord memory verificationRecord = VerificationRecord({ + uuid: 0, + verifier: verifierAddress, + subject: verificationResult.subject, + entryTime: block.timestamp, + expirationTime: verificationResult.expiration, + revoked: false + }); + + // generate a UUID for the record + bytes32 uuid = _createVerificationRecordUUID(verificationRecord); + verificationRecord.uuid = uuid; + + return verificationRecord; + } + + /** + * After validating a Verification Result and generating a Verification Record, + * the registry increments the record count, adds the record to a map based on its uuid, + * and associates the record's uuid with the verifier's and subject's existing record mappings. + */ + function _persistVerificationRecord(VerificationRecord memory verificationRecord) internal { + // persist the record count and the record itself, and map the record to verifier and subject + _verificationRecordCount++; + _verifications[verificationRecord.uuid] = verificationRecord; + _verificationsForSubject[verificationRecord.subject].push(verificationRecord.uuid); + _verificationsForVerifier[verificationRecord.verifier].push(verificationRecord.uuid); + } + + /** + * Generate a UUID for a VerificationRecord. + */ + function _createVerificationRecordUUID(VerificationRecord memory verificationRecord) private view returns (bytes32) { + return + keccak256( + abi.encodePacked( + verificationRecord.verifier, + verificationRecord.subject, + verificationRecord.entryTime, + verificationRecord.expirationTime, + _verificationRecordCount + ) + ); + } +} diff --git a/packages/ethereum/hardhat.config.ts b/packages/ethereum/hardhat.config.ts new file mode 100644 index 000000000..95909860d --- /dev/null +++ b/packages/ethereum/hardhat.config.ts @@ -0,0 +1,82 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { task } from "hardhat/config" +import "@nomiclabs/hardhat-ethers" +import "@typechain/hardhat" + +import secp256k1 from "secp256k1" + +task("deploy", "Deploys the contract", async (taskArgs, hre) => { + // Deploy contract + const Registry = await hre.ethers.getContractFactory("TestRegistry") + const registry = await Registry.deploy() + console.log("Registry deployed to:", registry.address) + + // Add a verifier + const [deployer] = await hre.ethers.getSigners() + const address = deployer.address + + const testVerifierInfo = { + name: hre.ethers.utils.formatBytes32String("Circle"), + did: "did:web:circle.com", + url: "https://circle.com/about", + signer: address + } + + const tx = await registry.addVerifier(address, testVerifierInfo) + await tx.wait() + console.log("Added verifier:", address) +}) + +task("accounts", "Prints the list of accounts", async (taskArgs, hre) => { + const accounts = await hre.ethers.getSigners() + + for (const account of accounts) { + console.log(account.address) + } +}) + +task( + "secp256k1pubkey", + "Prints the uncompressed secp256k1 public key. You can use the resulting value as the verifier in the contract." +) + .addPositionalParam("privatekey", "the private key of a trusted verifier") + .setAction(async (taskArgs, hre) => { + const privateKey = hre.ethers.utils.arrayify(taskArgs.privatekey, { + allowMissingPrefix: true + }) + const pubkey = secp256k1.publicKeyCreate(privateKey, false) + + // The result includes a header, indentifying the pubkey as uncompressed. + // We must strip that out, as the on-chain Solana crate requires a 64-byte + // public key. + console.log("Public Key (uncompressed): ", pubkey.slice(1, 65)) + }) + +/** + * @type import('hardhat/config').HardhatUserConfig + */ +module.exports = { + solidity: "0.8.0", + networks: { + hardhat: { + chainId: 1337 + } + } +} diff --git a/packages/ethereum/package.json b/packages/ethereum/package.json new file mode 100644 index 000000000..a34bd9cfc --- /dev/null +++ b/packages/ethereum/package.json @@ -0,0 +1,36 @@ +{ + "name": "ethereum", + "version": "1.0.0", + "private": true, + "scripts": { + "compile": "npx hardhat compile", + "format": "prettier --write .", + "lint": "eslint . --ext .ts,.js", + "setup": "./bin/setup", + "test": "jest", + "type-check": "tsc --pretty --noEmit", + "hardhat-typechain": "hardhat typechain" + }, + "devDependencies": { + "@babel/preset-typescript": "^7.16.7", + "@nomiclabs/hardhat-ethers": "^2.0.4", + "@openzeppelin/contracts": "^4.4.2", + "@typechain/ethers-v5": "^9.0.0", + "@typechain/hardhat": "^4.0.0", + "@types/jest": "^27.4.0", + "@types/node": "^17.0.16", + "dotenv": "^16.0.0", + "eslint": "^8.4.0", + "eslint-config-prettier": "^8.3.0", + "eslint-import-resolver-typescript": "^2.5.0", + "eslint-plugin-import": "^2.25.3", + "ethers": "^5.5.4", + "hardhat": "^2.8.2", + "jest": "^27.5.0", + "prettier": "^2.5.1", + "ts-node": "^10.5.0", + "typechain": "^7.0.0", + "typescript": "^4.5.5", + "verifier": "*" + } +} diff --git a/packages/ethereum/test/ethereum-solidity.test.ts b/packages/ethereum/test/ethereum-solidity.test.ts new file mode 100644 index 000000000..4580ca4f2 --- /dev/null +++ b/packages/ethereum/test/ethereum-solidity.test.ts @@ -0,0 +1,87 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { config } from "dotenv" +config() +import { ethers } from "hardhat" +import { ethereum } from "verifier" + +test("Ethereum smart contract verifying a signature", async () => { + // Deploy the Registry contract + const Registry = await ethers.getContractFactory("TestRegistry") + const registry = await Registry.deploy() + await registry.deployed() + + // Add a verifier + const verifierPrivateKey = + "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + const verifier = new ethers.Wallet(verifierPrivateKey) + const verifierPublicKey = await verifier.getAddress() + + const verifierInfo = { + name: ethers.utils.formatBytes32String("Circle"), + did: "did:web:circle.com", + url: "https://circle.com", + signer: verifierPublicKey + } + await registry.addVerifier(verifierPublicKey, verifierInfo) + + // Create a signature + const name = "VerificationRegistry" + const version = "1.0" + const expiration = 2588551268 // Expires January 2052 + const subject = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + const verifier_verification_id = "c62af7a4-82d5-42be-bd93-df12955e9a4e" + const schema = [ + "https://verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person", + "https://raw.githubusercontent.com/centrehq/verite/d1b97b3a475aa00cf894f72213f34b7bcb8b3435/packages/docs/static/definitions/processes/kycaml/0.0.1/generic--usa-entity-accinv-all-checks" + ] + + const { verificationResult, signature } = await ethereum({ + subject, + registryAddress: registry.address, + chainId: 1337, + name, + version, + expiration: new Date(expiration * 1000), + privateKey: verifierPrivateKey, + verifier_verification_id, + schema + }) + // Note that contract addresses are deterministic. Since Hardhat by default + // uses a known list of accounts, we know in advance the contract address and + // can assert a signature here. If this assertion fails, it is possible that + // a contract has been deployed to the network prior to the one used in this + // test. + expect(signature).toBe( + "0x33909c3bba46e4b8e66854f9b65de2d0e19a0003f2c8409f26c5bd1a99c7f6ad65539c93c314f31b18e464b04427e9c386278d0fe948b43dfe1afcc202de2ed71b" + ) + + // Call _validateVerificationResult(result, signature) + // The VerificationRegistry contract uses require statements to guarantee the + // validity of a Verification Result. If the function resolves, we know none + // triggered an exception and the Verification Result and signature are valid + expect(registry.validate(verificationResult, signature)).resolves + + // Example of rejected promise with a bad signature + const badSignature = + "0xcf2e7d2184ee84a83fa6b2848aa895b40f46aef3cd9745e4fa964f1a38441f3e23e33b514266da8a9d6ac86bf7e1964014b6ed5f9b3ce8b0c03cfccd5ab4e41d1b" + await expect( + registry.validate(verificationResult, badSignature) + ).rejects.toThrow() +}) diff --git a/packages/ethereum/tsconfig.json b/packages/ethereum/tsconfig.json new file mode 100644 index 000000000..75a27e852 --- /dev/null +++ b/packages/ethereum/tsconfig.json @@ -0,0 +1,108 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + // "incremental": true, /* Enable incremental compilation */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2018" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ + // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + + /* Modules */ + "module": "commonjs" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */, + "paths": {} /* Specify a set of entries that re-map imports to additional lookup locations. */, + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [] /* Specify multiple folders that act like `./node_modules/@types`. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + "resolveJsonModule": true /* Enable importing .json files */, + // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ + // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ + // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": [ + "src/**/*.ts", + "test/**/*.ts", + "examples/**/*.ts", + "./typechain-types" + ], + "files": ["./hardhat.config.ts"] +} diff --git a/packages/examples/.eslintignore b/packages/examples/.eslintignore new file mode 100644 index 000000000..c51a55a34 --- /dev/null +++ b/packages/examples/.eslintignore @@ -0,0 +1,17 @@ +# Items listed in this file are ignored by ESLint + +# Dependencies +node_modules + +# Build artifacts +dist + +# Test +coverage +jest.config.ts + +# ESLint configuration +.eslintrc.js + +# Create DB Script +create-db.js diff --git a/packages/examples/.eslintrc.js b/packages/examples/.eslintrc.js new file mode 100644 index 000000000..47ca0e6bf --- /dev/null +++ b/packages/examples/.eslintrc.js @@ -0,0 +1,31 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +module.exports = { + parserOptions: { + ecmaVersion: 13, + project: ["./tsconfig.json"], + sourceType: "module", + tsconfigRootDir: __dirname + }, + rules: { + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-assignment": "off" + } +} diff --git a/packages/examples/.gitignore b/packages/examples/.gitignore new file mode 100644 index 000000000..f19818a8d --- /dev/null +++ b/packages/examples/.gitignore @@ -0,0 +1,5 @@ +# Dependencies +node_modules + +# Build artifacts +dist diff --git a/packages/examples/README.md b/packages/examples/README.md new file mode 100644 index 000000000..6e052bcc1 --- /dev/null +++ b/packages/examples/README.md @@ -0,0 +1,274 @@ +# End To End Examples + +## Getting Started + +Before you run these examples, be sure to have the Verifier running: + +From the root of the monorepo, run: + +```sh +npm run dev +``` + +To build verifier + +```sh +npm run build -w verifier +``` + +To run the issuer example: + +```sh +npm run issuer -w examples +``` + +To run the verification example: + +```sh +npm run verification -w examples +``` + +## Note on encryption algorithms + +In these examples, we have set up so the Issuer uses ES256K (secp256k1), while +the Verifier uses EdDSA (ed25519). + +## Issuer: Obtaining a Verifiable Credential + +To get started, you will need a Verified Credential issued from an issuer. + +In practice, the Issuer will follow the [Credential Manifest](https://identity.foundation/credential-manifest/) exchange for a wallet (subject) to receive a Verifiable Credential. We are skipping this as it is out of scope for a Verifier. + +The issuer example will output an encoded/decoded Verifiable Credential, as well as an encoded/decoded Verifiable Presentation (Credential Fulfillment) that would be consumed by a Wallet. + +A JWT-encoded Verifiable Credential from an issuer will look like this: + +```text +eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vdmVyaXRlLmlkL2lkZW50aXR5Il0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJLWUNBTUxBdHRlc3RhdGlvbiJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJLWUNBTUxBdHRlc3RhdGlvbiI6eyJAdHlwZSI6IktZQ0FNTEF0dGVzdGF0aW9uIiwicHJvY2VzcyI6Imh0dHBzOi8vY2lyY2xlLmNvbS9zY2hlbWFzL2RlZmluaXRpb25zLzEuMC4wL2t5Y2FtbC91c2EiLCJhcHByb3ZhbERhdGUiOiIyMDIyLTAyLTAyVDE1OjI0OjEzLjA0MloifX19LCJzdWIiOiJkaWQ6a2V5Ono2TWtrRFh0V2ZuWGI1QXdxS0xBUm10R1pLZFU4dFNnem9ERUNOZWZxNFFFVDZaTSIsIm5iZiI6MTY0MzgxNTQ1MywiaXNzIjoiZGlkOmtleTp6Nk1rZ3l2YTRWQXJhaUZRbWp4OGNad1RTZnNUWmltOHliZlllTE5KZFZIZG5NVlAifQ.XB60XN4JsU5-Ob4dwHTcFwS5nUqO2LsLuVMQLdG0BjZIcrFWMfmzpZccvcGOeRvdProlx7gyXQY-i4g3ms2SBw +``` + +A decoded version of the same credential would look like this: + +TODO Fei: Make issuer and subject different https://circlepay.atlassian.net/browse/VR-93 +```json +{ + "credentialSubject": { + "KYCAMLAttestation": { + "type": "KYCAMLAttestation", + "process": "https://circle.com/schemas/definitions/1.0.0/kycaml/usa", + "approvalDate": "2022-02-02T15:24:13.042Z" + }, + "id": "did:key:z6MkkDXtWfnXb5AwqKLARmtGZKdU8tSgzoDECNefq4QET6ZM" + }, + "issuer": { + "id": "did:key:z6Mkgyva4VAraiFQmjx8cZwTSfsTZim8ybfYeLNJdVHdnMVP" + }, + "type": ["VerifiableCredential", "KYCAMLAttestation"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://verite.id/identity" + ], + "issuanceDate": "2022-02-02T15:24:13.000Z", + "proof": { + "type": "JwtProof2020", + "jwt": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vdmVyaXRlLmlkL2lkZW50aXR5Il0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJLWUNBTUxBdHRlc3RhdGlvbiJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJLWUNBTUxBdHRlc3RhdGlvbiI6eyJAdHlwZSI6IktZQ0FNTEF0dGVzdGF0aW9uIiwicHJvY2VzcyI6Imh0dHBzOi8vY2lyY2xlLmNvbS9zY2hlbWFzL2RlZmluaXRpb25zLzEuMC4wL2t5Y2FtbC91c2EiLCJhcHByb3ZhbERhdGUiOiIyMDIyLTAyLTAyVDE1OjI0OjEzLjA0MloifX19LCJzdWIiOiJkaWQ6a2V5Ono2TWtrRFh0V2ZuWGI1QXdxS0xBUm10R1pLZFU4dFNnem9ERUNOZWZxNFFFVDZaTSIsIm5iZiI6MTY0MzgxNTQ1MywiaXNzIjoiZGlkOmtleTp6Nk1rZ3l2YTRWQXJhaUZRbWp4OGNad1RTZnNUWmltOHliZlllTE5KZFZIZG5NVlAifQ.XB60XN4JsU5-Ob4dwHTcFwS5nUqO2LsLuVMQLdG0BjZIcrFWMfmzpZccvcGOeRvdProlx7gyXQY-i4g3ms2SBw" + } +} +``` + +You can use the VC in JWT format or in JSON format, as long as it is not modified (e.g. the `proof` still holds true for the remainder of the credential). + +An example of how to generate a VC is located in `examples/issuer.ts`. You can execute it by running: + +```sh +npm run issuer -w examples +``` + +Once you have that credential, you are ready to use the Verifier service. + +## Verifier: Verifying the Verifiable Credential + +To verify a credential using the Circle Verifier, you must be first running the Circle Verifier service (as well as it's dependencies, such as Postgres): + +```sh +npm run dev +``` + +Once the Verifier service is running, you can initiate a verification request. + +An end-to-end example of how to Verify a credential is located in `examples/verification.ts`, and can be run by executing: + +```sh +npm run verification -w examples +``` + +For a detailed breakdown, the following steps are performed. For the sake of clarity, we will write these requests as Node `fetch` commands: + +### Step 1: Create a verification offer + +A DApp who wants to verify a subject's credentials will first need to initialize a Verification Request with the Verifier service, and provide any relevant information regarding the verification (e.g. Which blockchain, which subject, etc). + +It does this via the `POST /verifications` endpoint: + +```ts +fetch("http://localhost:3000/verifications", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + network: "ethereum", // Assuming this is an Ethereum DApp + subject: "0xB5de987Ccce0BD596c22939B6f1e2a124e62B232" // The client's Ethereum Address + }) +}) +``` + +The response will look like the following: + +```json +{ + "challengeTokenUrl": "http://localhost:3000/verifications/511bba1a-9606-4bb8-9440-47a704fac71a" +} +``` + +The dapp will take this response and present it to the end-user (aka "client" or "subject"), often times as a QR Code. + +This `challengeTokenUrl` (as defined in Verite's [Verification Flow](https://verite.id/docs/patterns/verification-flow#verification-flow) document) contains the instructions for how the client wallet will present their required Verifiable Credentials, as described below: + +### Step 2: Client Wallet fetches the challengeTokenUrl + +In order to submit a credential for verification, the client needs to understand what parameters are required. The Verifier service describes this at the `challengeTokenUrl`. + +It does this via the `GET /verifications/[id]` endpoint: + +```ts +fetch( + "http://localhost:3000/verifications/511bba1a-9606-4bb8-9440-47a704fac71a", // challengeTokenUrl from above + { + method: "GET", + headers: { + "Content-Type": "application/json" + } + } +) +``` + +The response body for this endpoint is a large Verification Offer object, which looks like the following: + +```json +{ + "id": "090ea51c-6802-417e-83c3-8a77081d7a0f", + "type": "https://circle.com/types/VerificationRequest", + "from": "did:web:circle.com", + "created_time": "2022-02-02T16:30:39.554Z", + "expires_time": "2022-03-04T16:30:39.554Z", + "reply_url": "http://localhost:3000/verifications/090ea51c-6802-417e-83c3-8a77081d7a0f", + "body": { + "status_url": "http://localhost:3000/verifications/090ea51c-6802-417e-83c3-8a77081d7a0f/status", + "challenge": "043081eb-67bd-4d38-94e1-cd9c59204cc4", + "presentation_definition": { + "id": "090ea51c-6802-417e-83c3-8a77081d7a0f", + "input_descriptors": [ + { + "id": "kycaml_input", + "name": "Proof of KYC", + "schema": [ + { + "uri": "https://circle.com/schemas/identity/1.0.0/KYCAMLAttestation", + "required": true + } + ], + "purpose": "Please provide a valid credential from a KYC/AML issuer", + "constraints": { + "fields": [ + { + "path": ["$.issuer.id", "$.issuer", "$.vc.issuer", "$.iss"], + "purpose": "The issuer of the credential must be trusted", + "predicate": "required" + }, + { + "path": [ + "$.credentialSubject.KYCAMLAttestation.process", + "$.vc.credentialSubject.KYCAMLAttestation.process", + "$.KYCAMLAttestation.process" + ], + "filter": { + "type": "string" + }, + "purpose": "The process used for KYC/AML.", + "predicate": "required" + }, + { + "path": [ + "$.credentialSubject.KYCAMLAttestation.approvalDate", + "$.vc.credentialSubject.KYCAMLAttestation.approvalDate", + "$.KYCAMLAttestation.approvalDate" + ], + "filter": { + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$" + }, + "purpose": "The date upon which this KYC/AML Attestation was issued.", + "predicate": "required" + } + ], + "statuses": { + "active": { + "directive": "required" + }, + "revoked": { + "directive": "disallowed" + } + }, + "is_holder": [ + { + "field_id": ["subjectId"], + "directive": "required" + } + ] + } + } + ] + } + } +} +``` + +Once the client wallet has this response body, it has all the information it needs to construct a proper submission for verification. + +### Step 3: Submitting a credential + +Once the client wallet has fetched the Verification Offer, it can submit the relevant credential(s) for verification. + +To submit a Verifiable Credential, the subject MUST wrap the Verifiable Credential in a Verifiable Presentation. This achieves two goals: + +1. The Verifiable Credential is preserved (not tampered) with, and the signature is in tact. +2. By signing an outer Presentation, the Client can prove they hold the Verifiable Credential and that it was assigned to them. + +Once the client builds this Verifiable Presentation and signs it, it can submit it for verification as a JWT string. + +It does this via the `POST /verifications/[id]` endpoint: + +```js +fetch(json2.reply_url, { + method: "POST", + headers: { + "Content-Type": "text/plain" + }, + body: verifiablePresentationJWT +}) +``` + +The response for a successful submission will look like the following: + +```json +{ + "status": "success", + "verificationResult": { + "schema": "", + "subject": "0xB5de987Ccce0BD596c22939B6f1e2a124e62B232", + "expiration": 1643906776 + }, + "signature": "0xccaa723d0aba24f5349d928ccfff2c8cda8592e6db9ddc3d6bb5d73a70b2205a38b6927fb068d66ef02169c6dae76263b400dbc22ccd2d65d45cb4d1928e6bfe1c" +} +``` diff --git a/packages/examples/package.json b/packages/examples/package.json new file mode 100644 index 000000000..101ad956f --- /dev/null +++ b/packages/examples/package.json @@ -0,0 +1,32 @@ +{ + "name": "examples", + "version": "1.0.0", + "private": true, + "main": "dist/index.js", + "types": "dist/index.d.js", + "scripts": { + "build": "npm run clean; tsc", + "clean": "rm -rf dist", + "issuer": "ts-node ./src/example-issuer.ts", + "lint": "eslint . --ext .ts,.js", + "type-check": "tsc --pretty --noEmit", + "verification": "ts-node ./src/example-verification.ts" + }, + "dependencies": { + "cross-fetch": "^3.1.4", + "jose": "^4.4.0", + "verifier": "*" + }, + "devDependencies": { + "@types/node": "^16.11.11", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "eslint": "^8.4.0", + "eslint-config-prettier": "^8.3.0", + "eslint-import-resolver-typescript": "^2.5.0", + "eslint-plugin-import": "^2.25.3", + "prettier": "^2.5.1", + "ts-node": "^10.4.0", + "typescript": "^4.5.2" + } +} diff --git a/packages/examples/src/did-documents/issuer-did.json b/packages/examples/src/did-documents/issuer-did.json new file mode 100644 index 000000000..e7a43556e --- /dev/null +++ b/packages/examples/src/did-documents/issuer-did.json @@ -0,0 +1,57 @@ +{ + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU", + "verificationMethod": [ + { + "id": "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU", + "type": "JsonWebKey2020", + "controller": "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU", + "publicKeyJwk": { + "kty": "EC", + "crv": "secp256k1", + "x": "agWS94QIY0J0oNwZ7iJqDR7AOEXHmHMI4m88Qq9J6F8", + "y": "ZawjKP2ycXrPSOuvQdgn0IUdLBcm7Owza8dVzgw-x2Q" + } + } + ], + "assertionMethod": [ + "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU" + ], + "authentication": [ + "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU" + ], + "capabilityInvocation": [ + "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU" + ], + "capabilityDelegation": [ + "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU" + ], + "keyAgreement": [ + "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU" + ] + }, + "keys": [ + { + "id": "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU", + "type": "JsonWebKey2020", + "controller": "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU", + "publicKeyJwk": { + "kty": "EC", + "crv": "secp256k1", + "x": "agWS94QIY0J0oNwZ7iJqDR7AOEXHmHMI4m88Qq9J6F8", + "y": "ZawjKP2ycXrPSOuvQdgn0IUdLBcm7Owza8dVzgw-x2Q" + }, + "privateKeyJwk": { + "kty": "EC", + "crv": "secp256k1", + "x": "agWS94QIY0J0oNwZ7iJqDR7AOEXHmHMI4m88Qq9J6F8", + "y": "ZawjKP2ycXrPSOuvQdgn0IUdLBcm7Owza8dVzgw-x2Q", + "d": "PPkMfPaTKKQ5kgH0vAEo8ts6Jn3NjSBiDHJ7vKPEZdo" + } + } + ] +} diff --git a/packages/examples/src/did-documents/subject-did.json b/packages/examples/src/did-documents/subject-did.json new file mode 100644 index 000000000..9776a6ced --- /dev/null +++ b/packages/examples/src/did-documents/subject-did.json @@ -0,0 +1,80 @@ +{ + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3", + "verificationMethod": [ + { + "id": "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3#z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3", + "type": "JsonWebKey2020", + "controller": "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3", + "publicKeyJwk": { + "kty": "OKP", + "crv": "Ed25519", + "x": "GJSvSoLDvxFAVVy-VjqmyZFDivh4FF4cJJeND_yeA-g" + } + }, + { + "id": "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3#z6LSgAKYaaLhW4VWFtRzQfG5Vg2xvwVfbXKesLVNrQnrURnM", + "type": "JsonWebKey2020", + "controller": "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3", + "publicKeyJwk": { + "kty": "OKP", + "crv": "X25519", + "x": "QqR8aM-WvbddcDAFVo3pRm90wbTMKrAB0En1nl0V4E4" + } + } + ], + "assertionMethod": [ + "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3#z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3" + ], + "authentication": [ + "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3#z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3" + ], + "capabilityInvocation": [ + "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3#z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3" + ], + "capabilityDelegation": [ + "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3#z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3" + ], + "keyAgreement": [ + "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3#z6LSgAKYaaLhW4VWFtRzQfG5Vg2xvwVfbXKesLVNrQnrURnM" + ] + }, + "keys": [ + { + "id": "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3#z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3", + "type": "JsonWebKey2020", + "controller": "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3", + "publicKeyJwk": { + "kty": "OKP", + "crv": "Ed25519", + "x": "GJSvSoLDvxFAVVy-VjqmyZFDivh4FF4cJJeND_yeA-g" + }, + "privateKeyJwk": { + "kty": "OKP", + "crv": "Ed25519", + "x": "GJSvSoLDvxFAVVy-VjqmyZFDivh4FF4cJJeND_yeA-g", + "d": "Ya8vjlfOIO9KhVnCIiUmdL64crEp6R54pTdnLUhFDu0" + } + }, + { + "id": "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3#z6LSgAKYaaLhW4VWFtRzQfG5Vg2xvwVfbXKesLVNrQnrURnM", + "type": "JsonWebKey2020", + "controller": "did:key:z6Mkg7DKxpeoVFciCzXGzAsBCxS2ZtQV7wG7GkFV9D2h8oQ3", + "publicKeyJwk": { + "kty": "OKP", + "crv": "X25519", + "x": "QqR8aM-WvbddcDAFVo3pRm90wbTMKrAB0En1nl0V4E4" + }, + "privateKeyJwk": { + "kty": "OKP", + "crv": "X25519", + "x": "QqR8aM-WvbddcDAFVo3pRm90wbTMKrAB0En1nl0V4E4", + "d": "CMremg9lZH255wynrIkH10uGUgvMk2KXxVIoRZHbEVA" + } + } + ] +} diff --git a/packages/examples/src/example-issuer.ts b/packages/examples/src/example-issuer.ts new file mode 100644 index 000000000..942780374 --- /dev/null +++ b/packages/examples/src/example-issuer.ts @@ -0,0 +1,39 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { performIssuance } from "./issuer" + +/** + * This example will generate a Verifiable Credential and output it to the + * console. It will use the sample subject from `./subject-did.json` and the + * issuer from `./issuer-did.json`. + * + * Usage: + * + * ``` + * npm run issuer -w examples + * ``` + */ +performIssuance() + .then(() => { + process.exit(0) + }) + .catch((e) => { + console.error(e) + process.exit(1) + }) diff --git a/packages/examples/src/example-verification.ts b/packages/examples/src/example-verification.ts new file mode 100644 index 000000000..66dfc27b3 --- /dev/null +++ b/packages/examples/src/example-verification.ts @@ -0,0 +1,39 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { performVerification } from "./verification" + +/** + * This example will perform verification on a Verifiable Credential and output + * the result console. It will use the sample subject from `./subject-did.json` + * and the issuer from `./issuer-did.json`. + * + * Usage: + * + * ``` + * npm run verification -w examples + * ``` + */ +performVerification() + .then(() => { + process.exit(0) + }) + .catch((e) => { + console.error(e) + process.exit(1) + }) diff --git a/packages/examples/src/index.ts b/packages/examples/src/index.ts new file mode 100644 index 000000000..510ef7263 --- /dev/null +++ b/packages/examples/src/index.ts @@ -0,0 +1,20 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from "./issuer" +export * from "./verification" diff --git a/packages/examples/src/issuer.ts b/packages/examples/src/issuer.ts new file mode 100644 index 000000000..f86b2f038 --- /dev/null +++ b/packages/examples/src/issuer.ts @@ -0,0 +1,172 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { importJWK, SignJWT } from "jose" +import { + decodeVerifiableCredential, + decodeVerifiablePresentation +} from "verifier" + +import issuerDidDocument from "./did-documents/issuer-did.json" +import subjectDidDocument from "./did-documents/subject-did.json" + +/** + * Step 1: Generate a VC for the subject + */ +export const generateVerifiableCredential = async (): Promise<{ + verifiableCredential: string + decodedVerifiableCredential: Record +}> => { + const issuerPrivateKey = await importJWK( + issuerDidDocument.keys[0].privateKeyJwk, + "ES256K" + ) + + const verifiableCredentialPayload = { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://verite.id/identity" + ], + type: ["VerifiableCredential", "KYCAMLAttestation"], + credentialSubject: { + id: subjectDidDocument.didDocument.id, + KYCAMLAttestation: { + type: "KYCAMLAttestation", + process: "https://circle.com/schemas/definitions/1.0.0/kycaml/usa", + approvalDate: new Date() + } + }, + issuanceDate: new Date() // now + } + + /** + * The following method is from DIF's `did-jwt-vc` library + * (https://github.com/decentralized-identity/did-jwt-vc). It will validate + * and sign the VC (creating the `proof` object for the VC), and return the VC + * in JWT format. + */ + const signer = new SignJWT(verifiableCredentialPayload) + const verifiableCredential = await signer + .setIssuer(issuerDidDocument.didDocument.id) + .setSubject(subjectDidDocument.didDocument.id) + .setProtectedHeader({ alg: "ES256K" }) + .setExpirationTime("30d") + .sign(issuerPrivateKey) + + const decodedVerifiableCredential = await decodeVerifiableCredential( + verifiableCredential + ) + + return { + verifiableCredential, + decodedVerifiableCredential + } +} + +/** + * Step 2: Wrap the VC in a "Credential Fulfillment" (Verifiable Presentation) + * so a wallet can properly extract the VC. + */ +export const generateCredentialFulfillment = async ( + verifiableCredential: string +) => { + const issuerPrivateKey = await importJWK( + issuerDidDocument.keys[0].privateKeyJwk, + "ES256K" + ) + + const verifiablePresentationPayload = { + // nonce: verificationOffer.body.challenge, + vp: { + "@context": ["https://www.w3.org/2018/credentials/v1"], + type: ["VerifiablePresentation", "CredentialFulfillment"], + holder: issuerDidDocument.didDocument.id, + verifiableCredential: [verifiableCredential] + }, + credential_fulfillment: { + id: "b68fda51-21aa-4cdf-84b7-d452b1c9c3cc", // random UUID + manifest_id: "KYCAMLAttestation", + descriptor_map: [ + { + id: "proofOfIdentifierControlVP", + format: "jwt_vc", + path: "$.presentation.credential[0]" + } + ] + } + } + + const verifiablePresentation = await new SignJWT( + verifiablePresentationPayload + ) + .setIssuer(issuerDidDocument.didDocument.id) + .setSubject(issuerDidDocument.didDocument.id) + .setProtectedHeader({ alg: "ES256K" }) + .sign(issuerPrivateKey) + + const decodedVerifiablePresentation = await decodeVerifiablePresentation( + verifiablePresentation + ) + + return { + verifiablePresentation, + decodedVerifiablePresentation + } +} + +/** + * This method simulates an Issuer, and returns a Verifiable Credential, issued + * by the issuer in `issuer-did.json` for the subject in `subject-did.json`. + * + * The method will return both a JWT-encoded Verifiable Credential, and a + * decoded version of the same Verifiable Credential for easier inspection. + */ +export const performIssuance = async (): Promise => { + /** + * Step 1: Generate a VC for the subject + */ + const { verifiableCredential, decodedVerifiableCredential } = + await generateVerifiableCredential() + console.log("\nStep 1: Generate a VC for the subject") + console.log("JWT format:") + console.log(verifiableCredential) + console.log("\n Decoded:") + console.log(JSON.stringify(decodedVerifiableCredential, null, 4)) + + /** + * Step 2: Wrap the VC in a "Credential Fulfillment" (Verifiable Presentation) + * so a wallet can properly extract the VC. + */ + const { verifiablePresentation, decodedVerifiablePresentation } = + await generateCredentialFulfillment(verifiableCredential) + console.log( + "\nStep 2: Wrap the VC in a Verifiable Presentation (Credential Fulfillment)" + ) + console.log("JWT format:") + console.log(verifiablePresentation) + console.log("\n Decoded:") + console.log(JSON.stringify(decodedVerifiablePresentation, null, 4)) + + /** + * Step 3: The wallet will extract the VC from the Verifiable Presentation, + */ + const decodedVP = await decodeVerifiablePresentation(verifiablePresentation) + const decodedVC = decodedVP.verifiableCredential?.[0] + console.log("\n Decoded Verifiable Credential for the Wallet:") + console.log(JSON.stringify(decodedVC, null, 4)) +} diff --git a/packages/examples/src/verification.ts b/packages/examples/src/verification.ts new file mode 100644 index 000000000..08c191799 --- /dev/null +++ b/packages/examples/src/verification.ts @@ -0,0 +1,168 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +import fetch from "cross-fetch" +import { SignJWT, importJWK } from "jose" + +import subjectDidDocument from "./did-documents/subject-did.json" +import { generateVerifiableCredential } from "./issuer" + +/** + * Step 1: Initialize a new Verification request + * + * A Dapp would call this endpoint and present the response to an end-user + */ +export const initializeVerificationRequest = async () => { + const response1 = await fetch("http://localhost:3000/verifications", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + network: "ethereum", + subject: "0xB5de987Ccce0BD596c22939B6f1e2a124e62B232" + }) + }) + return await response1.json() +} + +/** + * Step 2: Fetch the challengeTokenUrl + * + * A client wallet would fetch this endpoint to determine how to submit a + * credential for verification. + */ +export const fetchVerificationOffer = async (challengeTokenUrl: string) => { + const response2 = await fetch(challengeTokenUrl, { + method: "GET", + headers: { + "Content-Type": "application/json" + } + }) + return response2.json() +} + +/** + * Step 3: Submit a Verifiable Presentation containing the Verifiable Credential + * + * A client wallet would call this endpoint to verify their credential. + * + * NOTE: This endpoint accepts Content type `text/plain`, not json, as it expects + * a JWT-encoded Verifiable Presentation. + */ +export const submitCredential = async ( + verificationOffer: any, + verifiableCredential: string +) => { + const subjectPrivateKey = await importJWK( + subjectDidDocument.keys[0].privateKeyJwk, + "EdDSA" + ) + + const verifiablePresentationPayload = { + nonce: verificationOffer.body.challenge, + vp: { + "@context": ["https://www.w3.org/2018/credentials/v1"], + type: ["VerifiablePresentation", "PresentationSubmission"], + holder: subjectDidDocument.didDocument.id, + verifiableCredential: [verifiableCredential] + }, + presentation_submission: { + id: "b68fda51-21aa-4cdf-84b7-d452b1c9c3cc", // random UUID + definition_id: verificationOffer.body.presentation_definition.id, + descriptor_map: [verifiableCredential].flat().map((_vc, i) => ({ + format: "jwt_vc", + id: "kycaml_input", + path: `$.verifiableCredential[${i}]` + })) + } + } + + const verifiablePresentation = await new SignJWT( + verifiablePresentationPayload + ) + .setIssuer(subjectDidDocument.didDocument.id) + .setSubject(subjectDidDocument.didDocument.id) + .setProtectedHeader({ alg: "EdDSA" }) + .sign(subjectPrivateKey) + + const response3 = await fetch(verificationOffer.reply_url, { + method: "POST", + headers: { + "Content-Type": "text/plain" + }, + body: verifiablePresentation + }) + + return response3.json() +} + +/** + * This method simulates a Client Wallet attempting to perform Verification + * using the Verification Service. The client wallet controls the DID located at + * `subject-did.json`. + * + * This method will perform end-to-end verification of a Verifiable Credential, + * starting by simulating the Issuer to receive a VC, and then submitting that + * credential to the Verification Service. + */ +export const performVerification = async () => { + /** + * Step 0: Fetch a Verifiable Credential from an issuer. In this example, we + * will generate a VC using our example issuer. + */ + const { verifiableCredential, decodedVerifiableCredential } = + await generateVerifiableCredential() + console.log("\nStep 0: Using Verifiable Credential:") + console.log(verifiableCredential) + console.log("\n\n Decoded Verifiable Credential:") + console.log(JSON.stringify(decodedVerifiableCredential, null, 4)) + + /** + * Step 1: Initialize a new Verification request + * + * A Dapp would call this endpoint and present the response to an end-user + */ + const json1 = await initializeVerificationRequest() + console.log("\nStep 1: Create a verification offer") + console.log(JSON.stringify(json1, null, 4)) + + /** + * Step 2: Fetch the challengeTokenUrl + * + * A client wallet would fetch this endpoint to determine how to submit a + * credential for verification. + */ + const json2 = await fetchVerificationOffer(json1.challengeTokenUrl) + console.log("\nStep 2: Client Wallet fetches the challengeTokenUrl") + console.log(JSON.stringify(json2, null, 4)) + + /** + * Step 3: Submit a Verifiable Presentation containing the Verifiable Credential + * + * A client wallet would call this endpoint to verify their credential. + * + * NOTE: This endpoint accepts Content type `text/plain`, not json, as it expects + * a JWT-encoded Verifiable Presentation. + */ + const json3 = await submitCredential(json2, verifiableCredential) + console.log("\nStep 3: Submitting a credential") + console.log(JSON.stringify(json3, null, 4)) +} diff --git a/packages/examples/tsconfig.json b/packages/examples/tsconfig.json new file mode 100644 index 000000000..9212385a8 --- /dev/null +++ b/packages/examples/tsconfig.json @@ -0,0 +1,102 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + // "incremental": true, /* Enable incremental compilation */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ + // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + + /* Modules */ + "module": "commonjs" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */, + "paths": {} /* Specify a set of entries that re-map imports to additional lookup locations. */, + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + "resolveJsonModule": true /* Enable importing .json files */, + // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ + // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ + // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": ["src/**/*.ts"] +} diff --git a/packages/solana-dapp/.gitignore b/packages/solana-dapp/.gitignore new file mode 100644 index 000000000..4d29575de --- /dev/null +++ b/packages/solana-dapp/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/packages/solana-dapp/README.md b/packages/solana-dapp/README.md new file mode 100644 index 000000000..09c3fe912 --- /dev/null +++ b/packages/solana-dapp/README.md @@ -0,0 +1,33 @@ +# Solana E2E Demo + +This project was bootstrapped with [Create React App Starter](https://github.com/solana-labs/wallet-adapter/tree/master/packages/starter/create-react-app-starter). + +## Installation + +From the root of the repository: + +```sh +npm install +``` + +## Setup + +This dapp requires a running validator and the program deployed. You can find [instructions for how to do that](https://github.com/circlefin/verifier/blob/master/packages/solana/README.md#deployment) in the `solana` package. + +You should also start an instance of the verifier on port 3000 (the default) found in [packages/verifier](https://github.com/circlefin/verifier/tree/master/packages/verifier). + +## Anchor + +The Anchor client requires an IDL of the program. It has already been included at `src/idl.json` and the project should work as-is. If you make changes to the contract interface or its program address, the file will need to be updated. If you make no changes, you can ignore these instructions. + +Each time the Anchor project is built, the IDL is updated. It can be found at `/packages/solana/target/idl/verity.json` and should be copied to `/packages/solana-dapp/src/idl.json`. However, the `metadata.address` attribute, identifying the address of the program, is only included after the Anchor project is deployed. If it is not there, you'll need to manually add it back. + +## Run the app + +It is recommended to run it on port 3001 as we'll run the verifier on port 3000. + +```sh +PORT=3001 npm start +``` + +Open [http://localhost:3001](http://locahost:3001) with your browser to try the demo. diff --git a/packages/solana-dapp/config-overrides.js b/packages/solana-dapp/config-overrides.js new file mode 100644 index 000000000..409ada4fa --- /dev/null +++ b/packages/solana-dapp/config-overrides.js @@ -0,0 +1,52 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +const { ProvidePlugin } = require("webpack") + +module.exports = function (config, env) { + return { + ...config, + module: { + ...config.module, + rules: [ + ...config.module.rules, + { + test: /\.(m?js|ts)$/, + enforce: "pre", + use: ["source-map-loader"] + } + ] + }, + plugins: [ + ...config.plugins, + new ProvidePlugin({ + process: "process/browser" + }) + ], + resolve: { + ...config.resolve, + fallback: { + assert: require.resolve("assert"), + buffer: require.resolve("buffer"), + crypto: require.resolve("crypto-browserify"), + stream: require.resolve("stream-browserify") + } + }, + ignoreWarnings: [/Failed to parse source map/] + } +} diff --git a/packages/solana-dapp/package.json b/packages/solana-dapp/package.json new file mode 100644 index 000000000..bf611c082 --- /dev/null +++ b/packages/solana-dapp/package.json @@ -0,0 +1,55 @@ +{ + "private": true, + "name": "solana-dapp", + "version": "0.1.0", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.3", + "@solana/wallet-adapter-react": "^0.15.3", + "@solana/wallet-adapter-react-ui": "^0.9.5", + "@solana/wallet-adapter-wallets": "^0.15.3", + "@solana/web3.js": "^1.33.0", + "crypto-browserify": "^3.12.0", + "did-jwt-vc": "^2.1.9", + "ethers": "^5.5.4", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "web-vitals": "^2.1.4" + }, + "devDependencies": { + "@testing-library/jest-dom": "^5.16.2", + "@testing-library/react": "^12.1.2", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.22", + "@types/react": "^17.0.39", + "@types/react-dom": "^17.0.11", + "process": "^0.11.10", + "react-app-rewired": "^2.1.11", + "react-scripts": "5.0.0", + "source-map-loader": "^3.0.1", + "typescript": "^4.5.5" + }, + "scripts": { + "start": "react-app-rewired start", + "build": "react-app-rewired build", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/packages/solana-dapp/public/favicon.ico b/packages/solana-dapp/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a11777cc471a4344702741ab1c8a588998b1311a GIT binary patch literal 3870 zcma);c{J4h9>;%nil|2-o+rCuEF-(I%-F}ijC~o(k~HKAkr0)!FCj~d>`RtpD?8b; zXOC1OD!V*IsqUwzbMF1)-gEDD=A573Z-&G7^LoAC9|WO7Xc0Cx1g^Zu0u_SjAPB3vGa^W|sj)80f#V0@M_CAZTIO(t--xg= z!sii`1giyH7EKL_+Wi0ab<)&E_0KD!3Rp2^HNB*K2@PHCs4PWSA32*-^7d{9nH2_E zmC{C*N*)(vEF1_aMamw2A{ZH5aIDqiabnFdJ|y0%aS|64E$`s2ccV~3lR!u<){eS` z#^Mx6o(iP1Ix%4dv`t@!&Za-K@mTm#vadc{0aWDV*_%EiGK7qMC_(`exc>-$Gb9~W!w_^{*pYRm~G zBN{nA;cm^w$VWg1O^^<6vY`1XCD|s_zv*g*5&V#wv&s#h$xlUilPe4U@I&UXZbL z0)%9Uj&@yd03n;!7do+bfixH^FeZ-Ema}s;DQX2gY+7g0s(9;`8GyvPY1*vxiF&|w z>!vA~GA<~JUqH}d;DfBSi^IT*#lrzXl$fNpq0_T1tA+`A$1?(gLb?e#0>UELvljtQ zK+*74m0jn&)5yk8mLBv;=@}c{t0ztT<v;Avck$S6D`Z)^c0(jiwKhQsn|LDRY&w(Fmi91I7H6S;b0XM{e zXp0~(T@k_r-!jkLwd1_Vre^v$G4|kh4}=Gi?$AaJ)3I+^m|Zyj#*?Kp@w(lQdJZf4 z#|IJW5z+S^e9@(6hW6N~{pj8|NO*>1)E=%?nNUAkmv~OY&ZV;m-%?pQ_11)hAr0oAwILrlsGawpxx4D43J&K=n+p3WLnlDsQ$b(9+4 z?mO^hmV^F8MV{4Lx>(Q=aHhQ1){0d*(e&s%G=i5rq3;t{JC zmgbn5Nkl)t@fPH$v;af26lyhH!k+#}_&aBK4baYPbZy$5aFx4}ka&qxl z$=Rh$W;U)>-=S-0=?7FH9dUAd2(q#4TCAHky!$^~;Dz^j|8_wuKc*YzfdAht@Q&ror?91Dm!N03=4=O!a)I*0q~p0g$Fm$pmr$ zb;wD;STDIi$@M%y1>p&_>%?UP($15gou_ue1u0!4(%81;qcIW8NyxFEvXpiJ|H4wz z*mFT(qVx1FKufG11hByuX%lPk4t#WZ{>8ka2efjY`~;AL6vWyQKpJun2nRiZYDij$ zP>4jQXPaP$UC$yIVgGa)jDV;F0l^n(V=HMRB5)20V7&r$jmk{UUIe zVjKroK}JAbD>B`2cwNQ&GDLx8{pg`7hbA~grk|W6LgiZ`8y`{Iq0i>t!3p2}MS6S+ zO_ruKyAElt)rdS>CtF7j{&6rP-#c=7evGMt7B6`7HG|-(WL`bDUAjyn+k$mx$CH;q2Dz4x;cPP$hW=`pFfLO)!jaCL@V2+F)So3}vg|%O*^T1j>C2lx zsURO-zIJC$^$g2byVbRIo^w>UxK}74^TqUiRR#7s_X$e)$6iYG1(PcW7un-va-S&u zHk9-6Zn&>T==A)lM^D~bk{&rFzCi35>UR!ZjQkdSiNX*-;l4z9j*7|q`TBl~Au`5& z+c)*8?#-tgUR$Zd%Q3bs96w6k7q@#tUn`5rj+r@_sAVVLqco|6O{ILX&U-&-cbVa3 zY?ngHR@%l{;`ri%H*0EhBWrGjv!LE4db?HEWb5mu*t@{kv|XwK8?npOshmzf=vZA@ zVSN9sL~!sn?r(AK)Q7Jk2(|M67Uy3I{eRy z_l&Y@A>;vjkWN5I2xvFFTLX0i+`{qz7C_@bo`ZUzDugfq4+>a3?1v%)O+YTd6@Ul7 zAfLfm=nhZ`)P~&v90$&UcF+yXm9sq!qCx3^9gzIcO|Y(js^Fj)Rvq>nQAHI92ap=P z10A4@prk+AGWCb`2)dQYFuR$|H6iDE8p}9a?#nV2}LBCoCf(Xi2@szia7#gY>b|l!-U`c}@ zLdhvQjc!BdLJvYvzzzngnw51yRYCqh4}$oRCy-z|v3Hc*d|?^Wj=l~18*E~*cR_kU z{XsxM1i{V*4GujHQ3DBpl2w4FgFR48Nma@HPgnyKoIEY-MqmMeY=I<%oG~l!f<+FN z1ZY^;10j4M4#HYXP zw5eJpA_y(>uLQ~OucgxDLuf}fVs272FaMxhn4xnDGIyLXnw>Xsd^J8XhcWIwIoQ9} z%FoSJTAGW(SRGwJwb=@pY7r$uQRK3Zd~XbxU)ts!4XsJrCycrWSI?e!IqwqIR8+Jh zlRjZ`UO1I!BtJR_2~7AbkbSm%XQqxEPkz6BTGWx8e}nQ=w7bZ|eVP4?*Tb!$(R)iC z9)&%bS*u(lXqzitAN)Oo=&Ytn>%Hzjc<5liuPi>zC_nw;Z0AE3Y$Jao_Q90R-gl~5 z_xAb2J%eArrC1CN4G$}-zVvCqF1;H;abAu6G*+PDHSYFx@Tdbfox*uEd3}BUyYY-l zTfEsOqsi#f9^FoLO;ChK<554qkri&Av~SIM*{fEYRE?vH7pTAOmu2pz3X?Wn*!ROX ztd54huAk&mFBemMooL33RV-*1f0Q3_(7hl$<#*|WF9P!;r;4_+X~k~uKEqdzZ$5Al zV63XN@)j$FN#cCD;ek1R#l zv%pGrhB~KWgoCj%GT?%{@@o(AJGt*PG#l3i>lhmb_twKH^EYvacVY-6bsCl5*^~L0 zonm@lk2UvvTKr2RS%}T>^~EYqdL1q4nD%0n&Xqr^cK^`J5W;lRRB^R-O8b&HENO||mo0xaD+S=I8RTlIfVgqN@SXDr2&-)we--K7w= zJVU8?Z+7k9dy;s;^gDkQa`0nz6N{T?(A&Iz)2!DEecLyRa&FI!id#5Z7B*O2=PsR0 zEvc|8{NS^)!d)MDX(97Xw}m&kEO@5jqRaDZ!+%`wYOI<23q|&js`&o4xvjP7D_xv@ z5hEwpsp{HezI9!~6O{~)lLR@oF7?J7i>1|5a~UuoN=q&6N}EJPV_GD`&M*v8Y`^2j zKII*d_@Fi$+i*YEW+Hbzn{iQk~yP z>7N{S4)r*!NwQ`(qcN#8SRQsNK6>{)X12nbF`*7#ecO7I)Q$uZsV+xS4E7aUn+U(K baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ literal 0 HcmV?d00001 diff --git a/packages/solana-dapp/public/index.html b/packages/solana-dapp/public/index.html new file mode 100644 index 000000000..5915cadc3 --- /dev/null +++ b/packages/solana-dapp/public/index.html @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/packages/solana-dapp/public/logo192.png b/packages/solana-dapp/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/packages/solana-dapp/public/manifest.json b/packages/solana-dapp/public/manifest.json new file mode 100644 index 000000000..f01493ff0 --- /dev/null +++ b/packages/solana-dapp/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/packages/solana-dapp/public/robots.txt b/packages/solana-dapp/public/robots.txt new file mode 100644 index 000000000..e9e57dc4d --- /dev/null +++ b/packages/solana-dapp/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/packages/solana-dapp/src/App.css b/packages/solana-dapp/src/App.css new file mode 100644 index 000000000..949466d4d --- /dev/null +++ b/packages/solana-dapp/src/App.css @@ -0,0 +1,30 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +.App { + min-height: 100vh; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + + color: #fff; + padding: 32px; + max-width: 1024px; + margin: 0 auto; +} diff --git a/packages/solana-dapp/src/App.tsx b/packages/solana-dapp/src/App.tsx new file mode 100644 index 000000000..c9628458d --- /dev/null +++ b/packages/solana-dapp/src/App.tsx @@ -0,0 +1,599 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { BN, Idl, Program, Provider } from "@project-serum/anchor" +import { WalletAdapterNetwork } from "@solana/wallet-adapter-base" +import { + AnchorWallet, + ConnectionProvider, + WalletProvider, + useAnchorWallet +} from "@solana/wallet-adapter-react" +import { + WalletModalProvider, + WalletMultiButton +} from "@solana/wallet-adapter-react-ui" +import { + LedgerWalletAdapter, + PhantomWalletAdapter, + SlopeWalletAdapter, + SolflareWalletAdapter, + SolletExtensionWalletAdapter, + SolletWalletAdapter, + TorusWalletAdapter +} from "@solana/wallet-adapter-wallets" +import { + clusterApiUrl, + Connection, + PublicKey, + Transaction, + SYSVAR_CLOCK_PUBKEY +} from "@solana/web3.js" +import { ethers } from "ethers" +import { decodeVerifiableCredential } from "verifier" +import { + createVerifiableCredentialJwt, + createVerifiablePresentationJwt, + Issuer +} from "did-jwt-vc" +import { FC, ReactNode, useMemo, useState } from "react" + +import idl from "./idl.json" +import { didIssuer, signerFactory } from "./did" + +require("./App.css") +require("@solana/wallet-adapter-react-ui/styles.css") + +// Hardcode a connection to localhost +function getConnection() { + const network = "http://127.0.0.1:8899" + return new Connection(network, "processed") +} + +function getProvider(wallet: AnchorWallet | undefined) { + if (!wallet) { + return + } + + const provider = new Provider( + getConnection(), + // @ts-ignore + wallet, + Provider.defaultOptions() + ) + return provider +} + +const App: FC = () => { + return ( + + + + ) +} +export default App + +const Context: FC<{ children: ReactNode }> = ({ children }) => { + // The network can be set to 'devnet', 'testnet', or 'mainnet-beta'. + // Note We are only using localhost and using a custom Connection, so it doesn't matter what is put here. + const network = WalletAdapterNetwork.Devnet + + // You can also provide a custom RPC endpoint. + const endpoint = useMemo(() => clusterApiUrl(network), [network]) + + // @solana/wallet-adapter-wallets includes all the adapters but supports tree shaking and lazy loading -- + // Only the wallets you configure here will be compiled into your application, and only the dependencies + // of wallets that your users connect to will be loaded. + const wallets = useMemo( + () => [ + new PhantomWalletAdapter(), + new SlopeWalletAdapter(), + new SolflareWalletAdapter({ network }), + new TorusWalletAdapter(), + new LedgerWalletAdapter(), + new SolletWalletAdapter({ network }), + new SolletExtensionWalletAdapter({ network }) + ], + [network] + ) + + return ( + + + {children} + + + ) +} + +const Content: FC = () => { + const wallet = useAnchorWallet() + const [issuer, setIssuer] = useState() + const [subject, setSubject] = useState() + const [credential, setCredential] = useState>() + const [credentialJWT, setCredentialJWT] = useState() + const [verificationRequest, setVerificationRequest] = + useState>() + const [verificationOffer, setVerificationOffer] = + useState>() + const [verificationResult, setVerificationResult] = + useState>() + + return ( +
+

+ Before you begin this demo, be sure your account has sufficient lamports + to pay fees. You can airdrop yourself SOL by running the following + command +

+

+ solana airdrop 1{" "} + {wallet?.publicKey ? wallet.publicKey.toBase58() : <><ADDRESS>} +

+ + + {issuer ? : null} + {subject ? : null} + {credential ? ( + + ) : null} + {credentialJWT ? ( + + ) : null} + {verificationRequest ? ( + + ) : null} + {verificationOffer ? ( + + ) : null} + {verificationResult ? ( + + ) : null} + + {wallet && !issuer ? ( + { + console.log("onIssuerGenerated", issuer) + setIssuer(issuer) + window.scroll(0, document.body.scrollHeight) + }} + /> + ) : null} + + {wallet && issuer && !subject ? ( + { + console.log("onSubjectGenerated", subject) + setSubject(subject) + window.scroll({ + top: document.body.scrollHeight, + behavior: "smooth" + }) + }} + /> + ) : null} + + {wallet && issuer && subject && !credential ? ( + { + console.log( + "onCredentialIssued", + verifiableCredential, + decodedVerifiableCredential + ) + setCredential(decodedVerifiableCredential) + setCredentialJWT(verifiableCredential) + window.scroll({ + top: document.body.scrollHeight, + behavior: "smooth" + }) + }} + /> + ) : null} + + {wallet && issuer && subject && credential && !verificationRequest ? ( + { + console.log(response) + setVerificationRequest(response) + window.scroll({ + top: document.body.scrollHeight, + behavior: "smooth" + }) + }} + /> + ) : null} + + {wallet && + issuer && + subject && + credential && + verificationRequest && + !verificationOffer ? ( + { + console.log("onNewVerificationOffer", response) + setVerificationOffer(response) + window.scroll({ + top: document.body.scrollHeight, + behavior: "smooth" + }) + }} + /> + ) : null} + + {wallet && + issuer && + subject && + credentialJWT && + verificationRequest && + verificationOffer && + !verificationResult ? ( + { + console.log("onNewVerificationResult", response) + setVerificationResult(response) + window.scroll({ + top: document.body.scrollHeight, + behavior: "smooth" + }) + }} + /> + ) : null} + + {wallet && verificationResult ? ( + + ) : null} +
+ ) +} + +/** + * Component to generate a new Issuer + */ +type GenerateIssuerParams = { + onIssuerGenerated: ({ issuer }: { issuer: Issuer }) => void +} + +const GenerateIssuer: FC = ({ onIssuerGenerated }) => { + const onClick = async () => { + // Create an Issuer + const issuer = await didIssuer() + + onIssuerGenerated({ issuer }) + } + + return +} + +/** + * Component to generate a new Subject + */ +type GenerateSubjectDidParams = { + onSubjectGenerated: ({ subject }: { subject: Issuer }) => void +} + +const GenerateSubject: FC = ({ + onSubjectGenerated +}) => { + const onClick = async () => { + // Create a subject + const subject = await signerFactory() + + onSubjectGenerated({ subject }) + } + + return +} + +/** + * Component to issue a credential + */ +type IssueCredentialProps = { + issuer: Issuer + subject: string + onCredentialIssued: ({ + verifiableCredential, + decodedVerifiableCredential + }: { + verifiableCredential: string + decodedVerifiableCredential: Record + }) => void +} + +const IssueCredential: FC = ({ + issuer, + subject, + onCredentialIssued +}) => { + const onClick = async () => { + // Credential Payload + const payload = { + sub: subject, + nbf: Math.floor(Date.now() / 1000), + vc: { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://verite.id/identity" + ], + type: ["VerifiableCredential", "KYCAMLAttestation"], + credentialSubject: { + id: subject, + KYCAMLAttestation: { + type: "KYCAMLAttestation", + process: "https://circle.com/schemas/definitions/1.0.0/kycaml/usa", + approvalDate: new Date() + } + }, + issuanceDate: new Date() // now + } + } + + // Create the Verifiable Credential + const verifiableCredential = await createVerifiableCredentialJwt( + payload, + issuer + ) + const decodedVerifiableCredential = await decodeVerifiableCredential( + verifiableCredential + ) + + // Callback for the app + onCredentialIssued({ verifiableCredential, decodedVerifiableCredential }) + } + return ( + <> + + + ) +} + +/** + * Component to render any javascript object + */ +type JSONComponentParams = { + title: string + obj: unknown +} + +const JSONComponent: FC = ({ title, obj }) => { + return ( + <> +
{title}
+
+        {JSON.stringify(obj, null, 4)}
+      
+ + ) +} + +/** + * Component to start the verification flow + */ +type CreateVerificationParams = { + subject: PublicKey + onNewVerification: ({ + response + }: { + response: Record + }) => void +} +const CreateVerification: FC = ({ + subject, + onNewVerification +}) => { + const onClick = async () => { + const response = await fetch("http://localhost:3000/verifications", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + network: "solana", + chainId: "localnet", + name: "VerificationRegistry", + version: "1.0", + subject: subject.toBase58() + }) + }) + onNewVerification({ response: await response.json() }) + } + return ( + <> + + + ) +} + +/** + * Component to fetch the challengeTokenUrl + */ +type FetchVerificationOfferParams = { + challengeTokenUrl: string + onNewVerificationOffer: ({ + response + }: { + response: Record + }) => void +} + +const FetchVerificationOffer: FC = ({ + challengeTokenUrl, + onNewVerificationOffer +}) => { + const onClick = async () => { + const response = await fetch(challengeTokenUrl, { + method: "GET", + headers: { + "Content-Type": "application/json" + } + }) + onNewVerificationOffer({ response: await response.json() }) + } + return ( + <> + + + ) +} + +/** + * Component to submit a credential for verification + */ +type SubmitCredentialParams = { + subject: Issuer + verificationOffer: any + verifiableCredential: string + onNewVerificationResult: ({ + response + }: { + response: Record + }) => void +} + +const SubmitCredential: FC = ({ + subject, + verificationOffer, + verifiableCredential, + onNewVerificationResult +}) => { + const onClick = async () => { + const payload = { + nonce: verificationOffer.body.challenge, + vp: { + "@context": ["https://www.w3.org/2018/credentials/v1"], + type: ["VerifiablePresentation", "CredentialFulfillment"], + holder: subject.did, + verifiableCredential: [verifiableCredential] + }, + presentation_submission: { + id: "b68fda51-21aa-4cdf-84b7-d452b1c9c3cc", // random UUID + definition_id: verificationOffer.body.presentation_definition.id, + descriptor_map: [verifiableCredential].flat().map((_vc, i) => ({ + format: "jwt_vc", + id: "kycaml_input", + path: `$.verifiableCredential[${i}]` + })) + } + } + + const presentation = await createVerifiablePresentationJwt(payload, subject) + + const replyUrl = verificationOffer.reply_url as string + const response = await fetch(replyUrl, { + method: "POST", + headers: { + "Content-Type": "text/plain" + }, + body: presentation + }) + + onNewVerificationResult(await response.json()) + } + return ( + <> + + + ) +} + +/** + * Component to submit a credential for verification + */ +type SubmitVerificationParams = { + verificationResult: Record +} + +const SubmitVerification: FC = ({ + verificationResult +}) => { + // Track status of Solana transaction + const [status, setStatus] = useState() + const wallet = useAnchorWallet() + + /** + * Send a Solana transaction with a Verification Result and a signature. If the program does not + * throw an error, it was valid. + */ + const submitVerification = async () => { + setStatus("pending") + + // Setup Anchor + const programId = new PublicKey(idl.metadata.address) + const provider = getProvider(wallet) + const program = new Program(idl as Idl, programId, provider) + + const signature = ethers.utils.arrayify(verificationResult.signature) + const subject = new PublicKey(verificationResult.verificationResult.subject) + + try { + const tx = new Transaction() + tx.add( + program.instruction.initialize( + signature.slice(0, 64), + signature[64] - 27, + { + name: "VerificationRegistry", + version: "1.0", + cluster: "localnet", + subject, + expiration: new BN( + verificationResult.verificationResult.expiration + ), + schema: "" + }, + { + accounts: { + subject: subject, + clock: SYSVAR_CLOCK_PUBKEY + } + } + ) + ) + + await provider?.send(tx) + } catch (e) { + console.log(e) + setStatus("error") + return + } + setStatus("success") + } + + return ( +
+
+ +
+
Status: {status}
+
+ ) +} diff --git a/packages/solana-dapp/src/did.ts b/packages/solana-dapp/src/did.ts new file mode 100644 index 000000000..abdf6ca96 --- /dev/null +++ b/packages/solana-dapp/src/did.ts @@ -0,0 +1,92 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +// @ts-ignore +import { randomBytes } from "crypto-browserify" + +import { generate } from "@transmute/did-key.js" +import bs58 from "bs58" +import { EdDSASigner, ES256KSigner } from "did-jwt" +import { Issuer } from "did-jwt-vc" + +type DidKey = { + id: string + type: string + controller: string + publicKeyBase58: string + privateKeyBase58: string +} + +type DidDocument = { + id: string + verificationMethod: Omit[] +} + +type DidGeneration = { didDocument: DidDocument; keys: DidKey[] } + +export const didFactory = async ( + type: "ed25519" | "secp256k1" = "ed25519", + ld = true, + privateKey?: Uint8Array +): Promise => { + const didKey = await generate( + type, + { secureRandom: () => privateKey ?? randomBytes(32) }, + { accept: ld ? "application/did+ld+json" : "application/did+json" } + ) + + return didKey as DidGeneration +} + +/** + * Generate an "Issuer" type (a signer for the JWT) with a randomly selected + * algorithm, either EdDSA or ES256K. + */ +export const signerFactory = async ( + privateKey?: Uint8Array, + alg2?: string +): Promise => { + const alg = alg2 ?? Math.round(Math.random()) ? "EdDSA" : "ES256K" + const did = await didFactory( + alg === "EdDSA" ? "ed25519" : "secp256k1", + true, + privateKey + ) + const privateKey2 = bs58.decode(did.keys[0].privateKeyBase58) + const signer = + alg === "EdDSA" ? EdDSASigner(privateKey2) : ES256KSigner(privateKey2) + + return { + did: did.didDocument.id, + signer, + alg + } +} + +/** + * Generate an "Issuer" type for a predefined private key + */ +export const didIssuer = async (): Promise => { + return signerFactory( + Buffer.from([ + 19, 223, 117, 141, 193, 142, 129, 52, 105, 119, 211, 135, 30, 130, 11, 83, + 16, 183, 86, 198, 138, 26, 117, 175, 170, 39, 1, 247, 38, 102, 205, 115 + ]), + "ES256K" + ) +} diff --git a/packages/solana-dapp/src/idl.json b/packages/solana-dapp/src/idl.json new file mode 100644 index 000000000..3fec924d4 --- /dev/null +++ b/packages/solana-dapp/src/idl.json @@ -0,0 +1,117 @@ +{ + "version": "0.1.0", + "name": "verity", + "instructions": [ + { + "name": "initialize", + "accounts": [ + { + "name": "subject", + "isMut": false, + "isSigner": true + }, + { + "name": "clock", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "signature", + "type": { + "array": [ + "u8", + 64 + ] + } + }, + { + "name": "recoveryId", + "type": "u8" + }, + { + "name": "verificationResult", + "type": { + "defined": "VerificationResult" + } + } + ] + } + ], + "types": [ + { + "name": "VerificationResult", + "type": { + "kind": "struct", + "fields": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "cluster", + "type": "string" + }, + { + "name": "subject", + "type": "publicKey" + }, + { + "name": "expiration", + "type": "i64" + }, + { + "name": "schema", + "type": "string" + } + ] + } + } + ], + "errors": [ + { + "code": 6000, + "name": "NotOk" + }, + { + "code": 6001, + "name": "Invalid" + }, + { + "code": 6002, + "name": "SubjectMismatch" + }, + { + "code": 6003, + "name": "SubjectIsNotSigner" + }, + { + "code": 6004, + "name": "Expired" + }, + { + "code": 6005, + "name": "InvalidSchema" + }, + { + "code": 6006, + "name": "InvalidName" + }, + { + "code": 6007, + "name": "InvalidVersion" + }, + { + "code": 6008, + "name": "InvalidCluster" + } + ], + "metadata": { + "address": "HGzMrtmwPrgSLy9Y9YM9JC1QXSwpJyMVEivm62yqfzcZ" + } +} \ No newline at end of file diff --git a/packages/solana-dapp/src/index.css b/packages/solana-dapp/src/index.css new file mode 100644 index 000000000..cf21cd95b --- /dev/null +++ b/packages/solana-dapp/src/index.css @@ -0,0 +1,32 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +body { + background: #222222; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/packages/solana-dapp/src/index.tsx b/packages/solana-dapp/src/index.tsx new file mode 100644 index 000000000..121586b0d --- /dev/null +++ b/packages/solana-dapp/src/index.tsx @@ -0,0 +1,35 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; + +ReactDOM.render( + + + , + document.getElementById('root') +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/packages/solana-dapp/src/react-app-env.d.ts b/packages/solana-dapp/src/react-app-env.d.ts new file mode 100644 index 000000000..2362b99cf --- /dev/null +++ b/packages/solana-dapp/src/react-app-env.d.ts @@ -0,0 +1,19 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/// diff --git a/packages/solana-dapp/src/reportWebVitals.ts b/packages/solana-dapp/src/reportWebVitals.ts new file mode 100644 index 000000000..223d4b617 --- /dev/null +++ b/packages/solana-dapp/src/reportWebVitals.ts @@ -0,0 +1,33 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ReportHandler } from 'web-vitals'; + +const reportWebVitals = (onPerfEntry?: ReportHandler) => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/packages/solana-dapp/src/setupTests.ts b/packages/solana-dapp/src/setupTests.ts new file mode 100644 index 000000000..9a70e5165 --- /dev/null +++ b/packages/solana-dapp/src/setupTests.ts @@ -0,0 +1,23 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/packages/solana-dapp/tsconfig.json b/packages/solana-dapp/tsconfig.json new file mode 100644 index 000000000..c0555cbc6 --- /dev/null +++ b/packages/solana-dapp/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"] +} diff --git a/packages/solana/.gitignore b/packages/solana/.gitignore new file mode 100644 index 000000000..51448d4da --- /dev/null +++ b/packages/solana/.gitignore @@ -0,0 +1,6 @@ + +.anchor +.DS_Store +target +**/*.rs.bk +node_modules diff --git a/packages/solana/Anchor.toml b/packages/solana/Anchor.toml new file mode 100644 index 000000000..19cdb4177 --- /dev/null +++ b/packages/solana/Anchor.toml @@ -0,0 +1,12 @@ +[programs.localnet] +verity = "HGzMrtmwPrgSLy9Y9YM9JC1QXSwpJyMVEivm62yqfzcZ" + +[registry] +url = "https://anchor.projectserum.com" + +[provider] +cluster = "localnet" +wallet = "~/.config/solana/id.json" + +[scripts] +test = "npx jest" diff --git a/packages/solana/Cargo.lock b/packages/solana/Cargo.lock new file mode 100644 index 000000000..a04c2a48f --- /dev/null +++ b/packages/solana/Cargo.lock @@ -0,0 +1,1315 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom 0.2.4", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "anchor-attribute-access-control" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "105c443a613f29212755fb6c5f946fa82dcf94a80528f643e0faa9d9faeb626b" +dependencies = [ + "anchor-syn", + "anyhow", + "proc-macro2", + "quote", + "regex", + "syn", +] + +[[package]] +name = "anchor-attribute-account" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdae15851aa41972e9c18c987613c50a916c48c88c97ea3316156a5c772e5faa" +dependencies = [ + "anchor-syn", + "anyhow", + "bs58 0.4.0", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "anchor-attribute-constant" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6356865217881d0bbea8aa70625937bec6d9952610f1ba2a2452a8e427000687" +dependencies = [ + "anchor-syn", + "proc-macro2", + "syn", +] + +[[package]] +name = "anchor-attribute-error" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe998ce4e6e0cb0e291d1a1626bd30791cdfdd9d05523111bdf4fd053f08636" +dependencies = [ + "anchor-syn", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "anchor-attribute-event" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5810498a20554c20354f5648b6041172f2035e58d09ad40dc051dc0d1501f80" +dependencies = [ + "anchor-syn", + "anyhow", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "anchor-attribute-interface" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac83f085b2be8b3a3412989cf96cf7f683561db7d357c5aa4aa11d48bbb22213" +dependencies = [ + "anchor-syn", + "anyhow", + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "anchor-attribute-program" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73c56be575d89abcb192afa29deb87b2cdb3c39033abc02f2d16e6af999b23b7" +dependencies = [ + "anchor-syn", + "anyhow", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "anchor-attribute-state" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62ab002353b01fcb4f72cca256d5d62db39f9ff39b1d072280deee9798f1f524" +dependencies = [ + "anchor-syn", + "anyhow", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "anchor-derive-accounts" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e653cdb322078d95221384c4a527a403560e509ac7cb2b53d3bd664b23c4d6" +dependencies = [ + "anchor-syn", + "anyhow", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "anchor-lang" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4815ad6334fd2f561f7ddcc3cfbeed87ed3003724171bd80ebe6383d5173ee8f" +dependencies = [ + "anchor-attribute-access-control", + "anchor-attribute-account", + "anchor-attribute-constant", + "anchor-attribute-error", + "anchor-attribute-event", + "anchor-attribute-interface", + "anchor-attribute-program", + "anchor-attribute-state", + "anchor-derive-accounts", + "arrayref", + "base64 0.13.0", + "bincode", + "borsh", + "bytemuck", + "solana-program", + "thiserror", +] + +[[package]] +name = "anchor-syn" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be7bfb6991d79cce3495fb6ce0892f58a5c75a74c8d1c2fc6f62926066eb9f4" +dependencies = [ + "anyhow", + "bs58 0.3.1", + "heck", + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "serde", + "serde_json", + "sha2", + "syn", + "thiserror", +] + +[[package]] +name = "anyhow" +version = "1.0.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "blake3" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "digest 0.10.1", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03588e54c62ae6d763e2a80090d50353b785795361b4ff5b3bf0a5097fc31c0b" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "borsh" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +dependencies = [ + "borsh-derive", + "hashbrown", +] + +[[package]] +name = "borsh-derive" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +dependencies = [ + "borsh-derive-internal", + "borsh-schema-derive-internal", + "proc-macro-crate", + "proc-macro2", + "syn", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bs58" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "bumpalo" +version = "3.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" + +[[package]] +name = "bv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" +dependencies = [ + "feature-probe", + "serde", +] + +[[package]] +name = "bytemuck" +version = "1.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439989e6b8c38d1b6570a384ef1e49c8848128f5a97f3914baef02920842712f" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e215f8c2f9f79cb53c8335e687ffd07d5bfcb6fe5fc80723762d0be46e7cc54" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "cc" +version = "1.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "console_log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" +dependencies = [ + "log", + "web-sys", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cpufeatures" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d6b536309245c849479fba3da410962a43ed8e51c26b729208ec0ac2798d0" +dependencies = [ + "generic-array", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b697d66081d42af4fba142d56918a3cb21dc8eb63372c6b85d14f44fb9c5979b" +dependencies = [ + "block-buffer 0.10.1", + "crypto-common", + "generic-array", + "subtle", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "env_logger" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "feature-probe" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" + +[[package]] +name = "generic-array" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +dependencies = [ + "serde", + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.10.2+wasi-snapshot-preview1", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "itertools" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + +[[package]] +name = "js-sys" +version = "0.3.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keccak" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" + +[[package]] +name = "libsecp256k1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" +dependencies = [ + "arrayref", + "base64 0.12.3", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand", + "serde", + "sha2", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "lock_api" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "memmap2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe3179b85e1fd8b14447cbebadb75e45a1002f541b925f0bfec366d56a81c56d" +dependencies = [ + "libc", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml", +] + +[[package]] +name = "proc-macro2" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "proc-macro2-diagnostics" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "version_check", + "yansi", +] + +[[package]] +name = "quote" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core", +] + +[[package]] +name = "redox_syscall" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "semver" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0486718e92ec9a68fbed73bb5ef687d71103b142595b406835649bebd33f72c7" + +[[package]] +name = "serde" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d23c1ba4cf0efd44be32017709280b32d1cea5c3f1275c3b6d9e8bc54f758085" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + +[[package]] +name = "smallvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" + +[[package]] +name = "solana-frozen-abi" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb58e258da28e714904b62a1e8b7de5b01d349420a88409c84cb57264699021" +dependencies = [ + "bs58 0.4.0", + "bv", + "generic-array", + "log", + "memmap2", + "rustc_version", + "serde", + "serde_derive", + "sha2", + "solana-frozen-abi-macro", + "solana-logger", + "thiserror", +] + +[[package]] +name = "solana-frozen-abi-macro" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9c141ee23138a001bf94a9850fff3c8804e52fa36c151a8a4699f60bd55f74" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn", +] + +[[package]] +name = "solana-logger" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b63b04c1a2077f2eadb3c63988a14bc4fa4419f291fea7112a9c595db1e63b" +dependencies = [ + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "solana-program" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c41b2af0be4fc039852c74926a8a026e97f9b1d7c02c15610bb6a614268a4ea" +dependencies = [ + "base64 0.13.0", + "bincode", + "bitflags", + "blake3", + "borsh", + "borsh-derive", + "bs58 0.4.0", + "bv", + "bytemuck", + "console_error_panic_hook", + "console_log", + "curve25519-dalek", + "getrandom 0.1.16", + "itertools", + "js-sys", + "lazy_static", + "libsecp256k1", + "log", + "num-derive", + "num-traits", + "parking_lot", + "rand", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "sha2", + "sha3", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-logger", + "solana-sdk-macro", + "thiserror", + "wasm-bindgen", +] + +[[package]] +name = "solana-sdk-macro" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "238b93350286f73c2bd94c1a307bb0226a2f78070937bcf273bf968859f8cc39" +dependencies = [ + "bs58 0.4.0", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "termcolor" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "toml" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +dependencies = [ + "serde", +] + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "unicode-segmentation" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "verity" +version = "0.1.0" +dependencies = [ + "anchor-lang", + "solana-program", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wasm-bindgen" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" + +[[package]] +name = "web-sys" +version = "0.3.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "yansi" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71" + +[[package]] +name = "zeroize" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c88870063c39ee00ec285a2f8d6a966e5b6fb2becc4e8dac77ed0d370ed6006" diff --git a/packages/solana/Cargo.toml b/packages/solana/Cargo.toml new file mode 100644 index 000000000..a60de986d --- /dev/null +++ b/packages/solana/Cargo.toml @@ -0,0 +1,4 @@ +[workspace] +members = [ + "programs/*" +] diff --git a/packages/solana/README.md b/packages/solana/README.md new file mode 100644 index 000000000..1781a06e6 --- /dev/null +++ b/packages/solana/README.md @@ -0,0 +1,77 @@ +# Solana + +This package contains a Solana program that demonstrates how an on-chain program can verify a Verification Result that was verified off-chain. + +Similar to EIP-712, a verifier will sign a message using secp256k1, including both a Verification Result and a domain separator. The on-chain program can then recover the public key of the signer. If the recovered address is a known verifier, the given Verification Result can be trusted. The program performs several checks including 1) the subject is a signer, 2) the result is not expired, 3) the schema is for KYC, and 4) the domain separator is correct. + +## Installation + +From the root of the repository: + +``` +npm install +``` + +You must install rust, solana, and anchor. You can find instructions at the [Anchor Book](https://book.anchor-lang.com/chapter_2/installation.html). The Anchor Book is a new project, so if the link is broken you might try their old guide on [Installing Dependencies](https://project-serum.github.io/anchor/getting-started/installation.html). Note that the Anchor project prefers Yarn, but this project uses npm. + +## Tests + +``` +anchor test +``` + +## Deployment + +To deploy the program, we need a running validator and sufficient SOL to pay transaction fees. + +### Run a validator + +```sh +solana-test-validator +``` + +### Request SOL from Faucet + +Deploying the program will cost SOL in transaction fees. You can only request a few at a time, so run this command a few times to get a good amount. + +```sh +solana airdrop 2 +``` + +### Deploy + +Deploy the program. You can deploy repeatedly at the same address, so run this as often as you wish. + +```sh +npm run deploy -w solana +``` + +## Trusted Verifiers + +The demo program includes a single trusted verifier hard-coded in the program. A registry, at its choosing, could store a list of trusted verifiers on-chain with instructions to manage its state. + +The project uses the verifier as defined in the verifier package's `.env.example`. If you wanted to use a different validator, we have provided a Hardhat task to generate an appropriate secp256k1 public key for the Solana contract. You will need to run the following command from the `/packages/ethereum` directory. Simply provide the private key, with or without the hex prefix, to the `secp256k1pubkey` task to return the result. Below is an example. + +``` +[/verifier/packages/ethereum] npx hardhat secp256k1pubkey 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 +Public Key (uncompressed): Uint8Array(64) [ + 131, 24, 83, 91, 84, 16, 93, 74, 122, 174, 96, + 192, 143, 196, 95, 150, 135, 24, 27, 79, 223, 198, + 37, 189, 26, 117, 63, 167, 57, 127, 237, 117, 53, + 71, 241, 28, 168, 105, 102, 70, 242, 243, 172, 176, + 142, 49, 1, 106, 250, 194, 62, 99, 12, 93, 17, + 245, 159, 97, 254, 245, 123, 13, 42, 165 +] +``` + +## Expiration + +Expiration is enforced using the [Clock Sysvar](https://docs.solana.com/developing/runtime-facilities/sysvars#clock). It includes an estimated wall-clock as a unix timestamp. It is important to note that javascript uses millisecond precision wheras unix timestamps are in seconds. + +## Domain Separator + +The sample Solana program includes a domain separator including a name, version, and cluster. The program enforces all three values, however the fields are optional and should be implemented as appropriate by contract authors. The cluster property is highly recommended so as to ensure that verification results from a test environment cannot be escalated to a production one. + +EIP-712 includes the chainId in the domain descriminator to define the network. It is formally defined in [EIP-155](https://eips.ethereum.org/EIPS/eip-155). There is no formal definition of the different clusters on Solana so it is up to verifiers, program authors, and the community to define things. However, localnet, devnet, testnet, and mainnet-beta might be good choices. + +You can read more about domain separators on [EIP-712](https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator). diff --git a/packages/solana/babel.config.js b/packages/solana/babel.config.js new file mode 100644 index 000000000..8bc6e7f81 --- /dev/null +++ b/packages/solana/babel.config.js @@ -0,0 +1,24 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +module.exports = { + presets: [ + ["@babel/preset-env", { targets: { node: "current" } }], + "@babel/preset-typescript" + ] +} diff --git a/packages/solana/migrations/deploy.ts b/packages/solana/migrations/deploy.ts new file mode 100644 index 000000000..01a43eb60 --- /dev/null +++ b/packages/solana/migrations/deploy.ts @@ -0,0 +1,30 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +// Migrations are an early feature. Currently, they're nothing more than this +// single deploy script that's invoked from the CLI, injecting a provider +// configured from the workspace's Anchor.toml. + +const anchor = require("@project-serum/anchor"); + +module.exports = async function (provider) { + // Configure client to use the provider. + anchor.setProvider(provider); + + // Add your deploy script here. +} diff --git a/packages/solana/package.json b/packages/solana/package.json new file mode 100644 index 000000000..ae019041a --- /dev/null +++ b/packages/solana/package.json @@ -0,0 +1,18 @@ +{ + "scripts": { + "compile": "anchor build", + "deploy": "anchor deploy" + }, + "dependencies": { + "@project-serum/anchor": "^0.20.1" + }, + "devDependencies": { + "@babel/core": "^7.17.0", + "@babel/preset-env": "^7.16.11", + "@babel/preset-typescript": "^7.16.7", + "@types/jest": "^27.4.0", + "ethers": "^5.5.4", + "jest": "^27.5.0", + "typescript": "^4.3.5" + } +} diff --git a/packages/solana/programs/verity/Cargo.toml b/packages/solana/programs/verity/Cargo.toml new file mode 100644 index 000000000..378db73e2 --- /dev/null +++ b/packages/solana/programs/verity/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "verity" +version = "0.1.0" +description = "Created with Anchor" +edition = "2018" + +[lib] +crate-type = ["cdylib", "lib"] +name = "verity" + +[features] +no-entrypoint = [] +no-idl = [] +no-log-ix-name = [] +cpi = ["no-entrypoint"] +default = [] + +[dependencies] +anchor-lang = "0.20.1" +solana-program = "1.9.4" \ No newline at end of file diff --git a/packages/solana/programs/verity/Xargo.toml b/packages/solana/programs/verity/Xargo.toml new file mode 100644 index 000000000..475fb71ed --- /dev/null +++ b/packages/solana/programs/verity/Xargo.toml @@ -0,0 +1,2 @@ +[target.bpfel-unknown-unknown.dependencies.std] +features = [] diff --git a/packages/solana/programs/verity/src/lib.rs b/packages/solana/programs/verity/src/lib.rs new file mode 100644 index 000000000..62d733892 --- /dev/null +++ b/packages/solana/programs/verity/src/lib.rs @@ -0,0 +1,131 @@ +// Copyright 2024 Circle Internet Group, Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// SPDX-License-Identifier: Apache-2.0 + +use anchor_lang::prelude::*; + +use solana_program::{ + keccak, + secp256k1_recover::{secp256k1_recover, Secp256k1Pubkey}, +}; + +declare_id!("HGzMrtmwPrgSLy9Y9YM9JC1QXSwpJyMVEivm62yqfzcZ"); + +#[derive(AnchorSerialize, AnchorDeserialize, Debug)] +pub struct VerificationResult { + name: String, + version: String, + cluster: String, + subject: Pubkey, + expiration: i64, + schema: String, +} + +#[program] +pub mod verity { + use super::*; + pub fn initialize( + ctx: Context, + signature: [u8; 64], + recovery_id: u8, + verification_result: VerificationResult, + ) -> ProgramResult { + msg!("Recover id: {}", recovery_id); + + // Require the domain separator name + require!( + verification_result.name == "VerificationRegistry", + ErrorCode::InvalidName + ); + + // Require the domain separator version + require!( + verification_result.version == "1.0", + ErrorCode::InvalidVersion + ); + + // Require the domain separator cluster be "localnet". + // This value is hardcoded and should be changed before deploying to a + // different cluster. This will ensure a Verification Result intended + // for localnet, or for testing, cannot be elevated to a production + // environment. You can find more details in the README. + // https://github.com/circlefin/verifier/tree/master/packages/solana#domain-separator + require!( + verification_result.cluster == "localnet", + ErrorCode::InvalidCluster + ); + // Require that the subject account is the subject + require!( + ctx.accounts.subject.key() == verification_result.subject, + ErrorCode::SubjectMismatch + ); + + // Require that the subject account signs the transaction + require!( + ctx.accounts.subject.is_signer, + ErrorCode::SubjectIsNotSigner + ); + + // Require that the message is not expired + require!( + ctx.accounts.clock.unix_timestamp < verification_result.expiration, + ErrorCode::Expired + ); + + // Require that the schema is KYC + require!( + verification_result.schema == "", + ErrorCode::InvalidSchema + ); + + // Recover the address that signed the signature + let mut message = Vec::new(); + verification_result.serialize(&mut message).unwrap(); + let hash = keccak::hash(message.as_ref()); + let result = secp256k1_recover(hash.as_ref(), recovery_id, signature.as_ref()); + + // Hardcode a verifier. + let pubkey = Secp256k1Pubkey([ + 131, 24, 83, 91, 84, 16, 93, 74, 122, 174, 96, 192, 143, 196, 95, 150, 135, 24, 27, 79, + 223, 198, 37, 189, 26, 117, 63, 167, 57, 127, 237, 117, 53, 71, 241, 28, 168, 105, 102, + 70, 242, 243, 172, 176, 142, 49, 1, 106, 250, 194, 62, 99, 12, 93, 17, 245, 159, 97, + 254, 245, 123, 13, 42, 165, + ]); + // Require the recovered public key is the verifer + let result2 = result.unwrap(); + require!(result2 == pubkey, ErrorCode::Invalid); + Ok(()) + } +} + +#[derive(Accounts)] +#[instruction(signature: [u8; 64], recovery_id: u8, verification_result: VerificationResult)] +pub struct Initialize<'info> { + pub subject: Signer<'info>, + pub clock: Sysvar<'info, Clock>, +} + +#[error] +pub enum ErrorCode { + NotOk, + Invalid, + SubjectMismatch, + SubjectIsNotSigner, + Expired, + InvalidSchema, + InvalidName, + InvalidVersion, + InvalidCluster, +} diff --git a/packages/solana/tests/verity.test.ts b/packages/solana/tests/verity.test.ts new file mode 100644 index 000000000..9ba342f80 --- /dev/null +++ b/packages/solana/tests/verity.test.ts @@ -0,0 +1,186 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { expect, jest, test } from "@jest/globals" +import * as anchor from "@project-serum/anchor" +import { Program } from "@project-serum/anchor" +import * as borsh from "@project-serum/borsh" +import { Keypair } from "@solana/web3.js" +import { ethers } from "ethers" +import { keccak_256 } from "js-sha3" +import { ecdsaRecover, ecdsaSign, publicKeyConvert } from "secp256k1" + +import { Verity } from "../target/types/verity" + +/** + * Construct an Ethereum address from a secp256k1 public key buffer. + * @param {Buffer} publicKey a 64 byte secp256k1 public key buffer + * Source: https://github.com/solana-labs/solana/blob/e3b137066d89c303ad75a1073b90b9e2e32fd23d/web3.js/src/secp256k1-program.ts#L76-L95 + */ +const publicKeyToEthAddress = ( + publicKey: Buffer | Uint8Array | Array +): Buffer => { + const ETHEREUM_ADDRESS_BYTES = 20 + return Buffer.from(keccak_256.update(publicKey).digest()).slice( + -ETHEREUM_ADDRESS_BYTES + ) +} + +type Message = { + name: string + version: number + cluster: string + subject: anchor.web3.PublicKey + expiration: anchor.BN + schema: string +} + +const LAYOUT: borsh.Layout = borsh.struct([ + borsh.str("name"), + borsh.u8("version"), + borsh.str("cluster"), + borsh.publicKey("subject"), + borsh.i64("expiration"), + borsh.str("schema") +]) + +describe("verity", () => { + // Configure the client to use the local cluster. + anchor.setProvider(anchor.Provider.env()) + + const program = anchor.workspace.Verity as Program + + /** + * This test is to demonstrate how one can sign the Verification Result and + * subsequently recover the public key in the javascript runtime. + */ + it("verifies with javascript runtime", async () => { + // Setup Verification Result + const subject = Keypair.fromSecretKey( + Buffer.from([ + 227, 80, 186, 154, 55, 145, 36, 72, 120, 28, 132, 63, 128, 109, 38, 37, + 182, 90, 114, 36, 161, 3, 185, 206, 219, 248, 127, 56, 0, 70, 178, 70, + 208, 60, 226, 246, 39, 234, 14, 186, 106, 58, 173, 49, 250, 196, 52, + 154, 159, 52, 216, 41, 180, 86, 13, 119, 82, 99, 173, 92, 28, 219, 109, + 15 + ]) + ) + const verificationResult = { + name: "VerificationRegistry", + version: 1, + cluster: "localnet", + subject: subject.publicKey, + expiration: new anchor.BN(2644257401), + schema: "" + } + + // Serialize the verification result using Borsh. + const message = Buffer.alloc(24 + 1 + 12 + 32 + 8 + 25 + 4) + LAYOUT.encode(verificationResult, message) + + // Hash the message using keccak 256. + const messageHash = Buffer.from(keccak_256.update(message).digest()) + + // This is the verifier's secret key + const secretKey = ethers.utils.arrayify( + new ethers.Wallet( + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + ).privateKey + ) + + // Sign + const { signature, recid } = ecdsaSign(messageHash, secretKey) + + // Recover + const recovered = ecdsaRecover(signature, recid, messageHash) + + // Recovery id of this signature is 0 + expect(recid).toBe(0) + + // ecdsaRecover returns a compressed public key. We must convert it to an + // uncompressed public key in order to convert to an ETH address. + const publicKey = publicKeyConvert(recovered, false).slice(1) + + const recoveredEthAddress = publicKeyToEthAddress(publicKey) + + // Confirm the verifier's public key + const wallet = new ethers.Wallet(secretKey) + expect("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266").toBe(wallet.address) + + // Confirm the recovered key matches. We use ethers to get the checksum address + expect(wallet.address).toBe( + ethers.utils.getAddress(ethers.utils.hexlify(recoveredEthAddress)) + ) + }) + + /** + * This test is to demonstrate how one can sign the Verification Result in + * the javascript runtime and call the Solana program. + */ + it("can verify on Solana", async () => { + // Setup Verification Result + const subject = Keypair.fromSecretKey( + Buffer.from([ + 227, 80, 186, 154, 55, 145, 36, 72, 120, 28, 132, 63, 128, 109, 38, 37, + 182, 90, 114, 36, 161, 3, 185, 206, 219, 248, 127, 56, 0, 70, 178, 70, + 208, 60, 226, 246, 39, 234, 14, 186, 106, 58, 173, 49, 250, 196, 52, + 154, 159, 52, 216, 41, 180, 86, 13, 119, 82, 99, 173, 92, 28, 219, 109, + 15 + ]) + ) + const verificationResult = { + name: "VerificationRegistry", + version: 1, + cluster: "localnet", + subject: subject.publicKey, + expiration: new anchor.BN(2644257401), + schema: "" + } + + // Serialize the verification result using Borsh. + const message = Buffer.alloc(24 + 1 + 12 + 32 + 8 + 25 + 4) + LAYOUT.encode(verificationResult, message) + + // Hash the message using keccak 256. + const messageHash = Buffer.from(keccak_256.update(message).digest()) + + // This is the verifier's secret key + const secretKey = ethers.utils.arrayify( + new ethers.Wallet( + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + ).privateKey + ) + + // Sign + const { signature, recid } = ecdsaSign(messageHash, secretKey) + expect(ethers.utils.hexlify(signature)).toBe( + "0xc68f486da1a249f46534a439e1b382080e17695ebfde09ca3cbf5ec29d915b721e47f247c8df2e076a73f6b99dbe304ff898f9b40aa376a5e423591efdcef77f" + ) + expect(recid).toBe(0) + console.log(ethers.utils.hexlify(signature)) + + // Send transaction + await program.rpc.initialize(signature, recid, verificationResult, { + accounts: { + subject: subject.publicKey, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY + }, + signers: [subject] + }) + }) +}) diff --git a/packages/solana/tsconfig.json b/packages/solana/tsconfig.json new file mode 100644 index 000000000..cd5d2e3d0 --- /dev/null +++ b/packages/solana/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/packages/verifier/.env b/packages/verifier/.env new file mode 100644 index 000000000..d99f29b9a --- /dev/null +++ b/packages/verifier/.env @@ -0,0 +1,51 @@ +# Environment variables declared in this file are automatically made available + +# to the app. To learn more see https://www.npmjs.com/package/dotenv + +# By default, if there is a variable in .env file which collides with one that already exists in your environment, + +# then that variable will be skipped. + +# Debug settings. + +# NOTE: This should not be set in production, or set to an empty string + +DEBUG="prisma:\*" + +# Database Settings + +# This should be a full postgres connection string to the database + +DB_HOST=localhost +DB_USER=verifier +DB_PASSWORD=TestPassWord!! +PI_RO_PASSWORD=TestPassWord!! +DB_DATABASE=verifier +DB_SCHEMA=verifier +DATABASE_URL="postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:5432/${DB_DATABASE}?schema=${DB_SCHEMA}" + +# Host settings + +HOST="http://localhost:3000" +PORT="3000" + +# Environment settings + +# This should be set to `production` in a production environment + +NODE_ENV="development" +ENV="dev" +SERVICE_NAME="verifier" +AWS_REGION="us-east-1" +APP_TEAM="platform" + +# Ethereum + +REGISTRY_ADDRESS="0x5FbDB2315678afecb367f032d93F642f64180aa3" +VERIFIER_PRIVATE_KEY="ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + +# Trusted Issuers (Regexp conforming to the `pattern` field for an InputDescriptor: https://identity.foundation/presentation-exchange/#input-descriptor) + +# This list contains the issuer from the `examples` package. + +TRUSTED_ISSUERS="^did:web:circle.com$|^did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU$|^did:key:zQ3shaWBKgKfo2yk2nncahcpXjdrKVxE2VB3CzEu2MhJwWcZX$|^did:web:assets.circle.com$" diff --git a/packages/verifier/.eslintignore b/packages/verifier/.eslintignore new file mode 100644 index 000000000..c51a55a34 --- /dev/null +++ b/packages/verifier/.eslintignore @@ -0,0 +1,17 @@ +# Items listed in this file are ignored by ESLint + +# Dependencies +node_modules + +# Build artifacts +dist + +# Test +coverage +jest.config.ts + +# ESLint configuration +.eslintrc.js + +# Create DB Script +create-db.js diff --git a/packages/verifier/.eslintrc.js b/packages/verifier/.eslintrc.js new file mode 100644 index 000000000..ecbc3c5cd --- /dev/null +++ b/packages/verifier/.eslintrc.js @@ -0,0 +1,27 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +module.exports = { + parserOptions: { + ecmaVersion: 13, + project: ["./tsconfig.json"], + sourceType: "module", + tsconfigRootDir: __dirname + }, + ignorePatterns: ["**/*.js"] +} diff --git a/packages/verifier/.gitignore b/packages/verifier/.gitignore new file mode 100644 index 000000000..3a6744820 --- /dev/null +++ b/packages/verifier/.gitignore @@ -0,0 +1,8 @@ +# Dependencies +node_modules + +# Build artifacts +dist + +# Test output +coverage diff --git a/packages/verifier/README.md b/packages/verifier/README.md new file mode 100644 index 000000000..7f8209a28 --- /dev/null +++ b/packages/verifier/README.md @@ -0,0 +1,201 @@ +# Verification Service + +The Verification Service is built in TypeScript. + +## Getting Started + +### Requirements + +- Node.js +- PostgreSQL + +### Quick Start + +To get started quickly, simply run: + +```sh +npm run setup +``` + +This will install dependencies, create and migrate the development database, and compile test solidity contracts. At that point you can simply run the server. + +### Installation + +```sh +npm install +``` + +### Environment Variables + +In local development, environment variables are stored in an `.env`, which is generated with the `npm run setup` command. This file is not committed to version control and is safe for storing local environment settings. + +For a production deployment, the following environment variables must be set: + +- `DATABASE_URL`: A postgres connection string connecting to the database. +- `TRUSTED_ISSUERS`: A regexp of trusted issuers (for example: `^did:web:circle.com$`) +- `VERIFIER_PRIVATE_KEY`: A private key for signing Verification Results +- `NODE_ENV`: The node environment, should be `production` +- `HOST`: the host where this app is located. For example: `https://verifier.circle.com` +- `PORT`: the port where this app will listen. + +NOTE: these variables are also defined in the `.env.example` file. + +### Building the project + +This project is written in Typescript and uses tsc to compile the code to the `./dist` directory. + +To build the project, run the following command: + +```sh +npm run build +``` + +### Production + +1. Ensure the proper [environment variables are set](#environment-variables). +2. Then you should [build the app](#building-the-project). (`npm run build`) +3. Ensure the [production database is migrated](#migrate-the-database-in-production). (`npx prisma migrate deploy`) +4. Finally, run the server: `npm start` + +### Development + +You do not need to rebuild the project when developing, instead we use [nodemon](https://nodemon.io/) for automatic recompilation. + +To run the project in development mode, run the following command: + +```sh +npm run dev +``` + +### Database + +This project uses [Prisma](https://www.prisma.io/) to access PostgreSQL and manage migrations. + +#### Migrate the database in development + +```sh +npx prisma migrate dev +``` + +#### Migrate the database in production + +```sh +npx prisma migrate deploy +``` + +#### Viewing the database + +```sh +npx prisma studio +``` + + +#### Creating a new migration + +You will need to make sure the DB_USER has the `CREATEDB` role. Easiest way is to recreate the DB and assign the user the role in `create-db.js`. + +```sh +npx prisma migrate dev --create-only +``` + +### Linting the codebase + +This project uses ESLint to lint the codebase. It is set up to use the following configurations: + +| Configuration | Description | +| ----------------------------------------------------------------------- | ------------------------------------------------------------- | +| [eslint:recommended](https://eslint.org/docs/rules/) | The recommended rules for ESLint | +| [@typescript-eslint/recommended](https://typescript-eslint.io/rules/) | The recommended rules for TypeScript, with type-aware linting | +| [import/recommended](https://github.com/import-js/eslint-plugin-import) | The recommended rules for `eslint-plugin-import` | + +To lint the codebase with `eslint`, run the following command: + +```sh +npm run lint +``` + +To auto-fix as many issues as possible, run the following command: + +```sh +npm run lint -- --fix +``` + +### Code style + +This project is configured to use [Prettier](https://prettier.io) for consistent code styles. Prettier is configured to use double quotes, no semicolons (other than where required), and no trailing commas. + +To format the codebase with Prettier, run the following command: + +```sh +npm run format +``` + +### Visual Studio Code + +The project has a set of recommended VSCode settings and extensions to automatically format and lint the codebase while you are developing. When opening the project in VSCode, you'll be prompted to install the recommended extensions. It is highly recommended that you install these extensions. + +The recommended extensions are: + +| Extension | Description | +| ------------------------------------------------------------------------------------------- | --------------------------------------- | +| [ESLint plugin](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) | Automatic linting with ESLint | +| [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) | Automatic code formatting with Prettier | + +And the default settings are: + +```json +{ + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" +} +``` + +## Testing + +The project is configured to use [Jest](https://jestjs.io/) for testing. The tests live in the `./test` directory, and +coverage reports are output to the `./coverage` directory. + +To run the test suite, run the following command: + +```sh +npm test +``` + +After tests are run, you can examine the coverage report by opening the `./coverage/lcov-report/index.html` file. + +```sh +open ./coverage/lcov-report/index.html +``` + +## Continuous Integration + +Github Actions are set up to run whenever code is merged or pull requested into the `main` branch. + +The Github Actions are located in `.github/workflows`. + +In order to test the verifier package, the verite package must be built and the prisma migrations run. + +## API Endpoints + +See [docs/API.md](https://github.com/circlefin/verifier/tree/master/docs/API.md) + +## Generating a Verifier Private Key + +A verifier is no different than any other Ethereum wallet. + +The project comes packaged with an example verifier. The private key is generated with the mnemonic `test test test test test test test test test test test junk` and should not be used. + +You will want to generate one according to your company's best practices. The private key is a secret and should be handled accordingly. For deployment, your private key should be added as an [environment variable](https://github.com/circlefin/verifier/tree/master/packages/verifier#environment-variables). + +Below is an example of generating a random wallet using ethers: + +```sh +> const ethers = require("ethers") +undefined +> const w = ethers.Wallet.createRandom() +undefined +> w._signingKey().privateKey +'0x56d5b6e2a7156cf09b9d0e0c3b94f16627027729e94928326616c0e4424ab20e' +> w.address +'0x1Ba7A47c2AaaDff2a75070440e80BdffCfAdf840' +``` diff --git a/packages/verifier/build-web.sh b/packages/verifier/build-web.sh new file mode 100755 index 000000000..b130ba757 --- /dev/null +++ b/packages/verifier/build-web.sh @@ -0,0 +1,25 @@ +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +mkdir -p dist/views + +cp -r src/views/css dist/views +cp -r src/views/img dist/views +cp -r src/views/pages dist/views +cp -r src/views/partials dist/views + +mkdir -p dist/views/js +minify src/views/js/index.js > dist/views/js/index.js diff --git a/packages/verifier/jest.config.ts b/packages/verifier/jest.config.ts new file mode 100644 index 000000000..c7a982796 --- /dev/null +++ b/packages/verifier/jest.config.ts @@ -0,0 +1,224 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * For a detailed explanation regarding each configuration property and type check, visit: + * https://jestjs.io/docs/configuration + */ + +export default { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "/private/var/folders/qq/tdtkz8294l5_hblg6t7_49540000gn/T/jest_dx", + + // Automatically clear mock calls, instances and results before every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + collectCoverage: true, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + // collectCoverageFrom: undefined, + + // The directory where Jest should output its coverage files + coverageDirectory: "coverage", + + // An array of regexp pattern strings used to skip coverage collection + coveragePathIgnorePatterns: [ + "/node_modules/", + "/test", + "src/app.ts", + "hardhat.config.ts" + ], + + // Indicates which provider should be used to instrument code for coverage + // coverageProvider: "v8", + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: undefined, + + // A path to a custom dependency extractor + // dependencyExtractor: undefined, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: undefined, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: undefined, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. + // maxWorkers: "50%", + + // An array of directory names to be searched recursively up from the requiring module's location + // moduleDirectories: [ + // "node_modules" + // ], + + // An array of file extensions your modules use + // moduleFileExtensions: [ + // "js", + // "jsx", + // "ts", + // "tsx", + // "json", + // "node" + // ], + + // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module + // moduleNameMapper: {}, + moduleNameMapper: {}, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + // preset: undefined, + + // Run tests from one or more projects + // projects: undefined, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state before every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: undefined, + + // Automatically restore mock state and implementation before every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: undefined, + + // A list of paths to directories that Jest should use to search for files in + // roots: [ + // "" + // ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + setupFiles: ["dotenv/config"], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + setupFilesAfterEnv: ["/test/setup.ts"], + + // The number of seconds after which a test is considered as slow and reported as such in the results. + // slowTestThreshold: 5, + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + testEnvironment: "node", + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + // testMatch: [ + // "**/__tests__/**/*.[jt]s?(x)", + // "**/?(*.)+(spec|test).[tj]s?(x)" + // ], + testMatch: ["/test/**/*.test.[jt]s?(x)"], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + testPathIgnorePatterns: ["/dist", "/node_modules/"], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: undefined, + + // This option allows use of a custom test runner + // testRunner: "jest-circus/runner", + + // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href + // testURL: "http://localhost", + + // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" + // timers: "real", + + // A map from regular expressions to paths to transformers + // transform: undefined, + transform: { + "^.+\\.[t|j]s$": [ + "ts-jest", + { + sourceMaps: true + } + ] + } + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "/node_modules/", + // "\\.pnp\\.[^\\/]+$" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: undefined, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +} diff --git a/packages/verifier/package.json b/packages/verifier/package.json new file mode 100644 index 000000000..970b5f3ea --- /dev/null +++ b/packages/verifier/package.json @@ -0,0 +1,102 @@ +{ + "name": "verifier", + "version": "1.0.0", + "private": true, + "main": "dist/index.js", + "types": "dist/index.d.js", + "scripts": { + "build": "npm run clean; prisma generate; tsc -p ./tsconfig.build.json; ./build-web.sh", + "clean": "rm -rf dist", + "createdb": "node ./prisma/create-db.js", + "dev": "nodemon ./src/server.ts", + "debug": "nodemon --exec \"node --inspect-brk=0.0.0.0:9229 --require ts-node/register ./src/server.ts\"", + "format": "prettier --write .", + "lint": "eslint . --ext .ts,.js", + "prisma:migrate:resolve:applied": "prisma migrate resolve --applied", + "prisma:migrate:deploy": "prisma migrate deploy", + "prisma:migrate:dev": "npx prisma migrate dev", + "start": "node ./dist/server.js", + "start:tracing": "node --interpreted-frames-native-stack --perf-basic-prof-only-functions --require dotenv/config --require './dist/lib/tracing/index.js' ./dist/server.js", + "start:tracing:inspect": "node --interpreted-frames-native-stack --perf-basic-prof-only-functions --require './dist/lib/tracing/index.js' --inspect ./dist/server.js", + "start:local:tracing,": "node --interpreted-frames-native-stack --require dotenv/config --require './dist/lib/tracing/index.js' ./dist/server.js", + "start:local:tracing:inspect": "node --interpreted-frames-native-stack --require './dist/lib/tracing/index.js' --inspect ./dist/server.js", + "test": "jest --runInBand --forceExit", + "type-check": "tsc --pretty --noEmit" + }, + "dependencies": { + "@aws-sdk/client-ssm": "^3.603.0", + "@prisma/client": "^5.16.1", + "@project-serum/borsh": "^0.2.5", + "@solana/web3.js": "^1.93.3", + "@transmute/did-key.js": "^0.3.0-unstable.10", + "@types/node-fetch": "^2.6.11", + "ajv": "^8.16.0", + "bit-buffers": "^1.0.2", + "bn.js": "^5.2.1", + "body-parser": "^1.20.2", + "cors": "^2.8.5", + "cross-fetch": "^4.0.0", + "did-jwt": "^8.0.4", + "did-jwt-vc": "^4.0.4", + "did-resolver": "^4.1.0", + "ejs": "^3.1.10", + "ethers": "^6.13.1", + "express": "^4.19.2", + "express-async-handler": "^1.2.0", + "helmet": "^7.1.0", + "hot-shots": "^10.0.0", + "js-sha3": "^0.9.3", + "jsonpath": "^1.1.1", + "lodash": "^4.17.21", + "minify": "^11.2.1", + "morgan": "^1.10.0", + "pg": "^8.12.0", + "pkh-did-resolver": "^2.0.0", + "secp256k1": "^5.0.0", + "uuid": "^10.0.0", + "web-did-resolver": "^2.0.27", + "winston": "^3.13.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.47.1", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "^0.52.1", + "@opentelemetry/instrumentation": "^0.52.1", + "@opentelemetry/resources": "^1.25.1", + "@opentelemetry/sdk-node": "^0.52.1", + "@opentelemetry/semantic-conventions": "^1.25.1", + "@opentelemetry/tracing": "^0.24.0", + "@prisma/instrumentation": "^5.16.1" + }, + "devDependencies": { + "@types/bs58": "^4.0.4", + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/jest": "^29.5.12", + "@types/jsonpath": "^0.2.4", + "@types/lodash": "^4.17.6", + "@types/mocha": "^10.0.7", + "@types/morgan": "^1.9.9", + "@types/node": "^20.14.9", + "@types/supertest": "^6.0.2", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^7.14.1", + "@typescript-eslint/parser": "^7.14.1", + "bs58": "^6.0.0", + "dotenv": "^16.4.5", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.1", + "jest": "^29.7.0", + "nock": "^13.5.4", + "nodemon": "^3.1.4", + "npm-run-all": "^4.1.5", + "prettier": "^3.3.2", + "prisma": "^5.16.1", + "regenerator-runtime": "^0.14.1", + "supertest": "^7.0.0", + "ts-jest": "^29.1.5", + "ts-node": "^10.9.2", + "typescript": "^5.5.2" + } +} diff --git a/packages/verifier/prisma/create-db.js b/packages/verifier/prisma/create-db.js new file mode 100644 index 000000000..d741929a6 --- /dev/null +++ b/packages/verifier/prisma/create-db.js @@ -0,0 +1,129 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +const { Client } = require("pg") + +const dbConfig = { + host: process.env.DB_HOST, + port: process.env.DB_PORT || 5432, + user: process.env.MIGRATE_DB_USER, + password: process.env.MIGRATE_DB_PASSWORD +} + +const verifierDB = process.env.DB_DATABASE +const dbUser = process.env.DB_USER +const dbPassword = process.env.DB_PASSWORD +const dbSchema = process.env.DB_SCHEMA + +setupVerifierDatabase(dbConfig, verifierDB, dbUser, dbPassword, dbSchema).catch( + (err) => { + console.log(err) + process.exit(1) + } +) + +/*** + * Creates verifier database, schema, and user + * + * @param config The database connection info + * @param database Name of database to create + * @param user The verifier user + * @param password The password for the verifier user + * @param schema The schema for the verifier database + */ +async function setupVerifierDatabase(config, database, user, password, schema) { + if (!database || !user || !password || !schema) { + console.log("Database, username, password, and schema are required!") + process.exit(1) + } + + const createConfig = Object.assign({ database: "postgres" }, config) + const createClient = new Client(createConfig) + await createClient.connect() + + let result = await createClient.query( + `SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower($1);`, + [database] + ) + + if (result?.rowCount !== 0) { + console.log(`Database already exists. Database=${database}`) + } else { + try { + await createClient.query(`CREATE DATABASE ${database}`) + console.log(`Database created successfully. Database=${database}`) + } catch (err) { + console.log("Failed to create database!") + throw err + } + } + createClient.end() + + // Now create the schema and roles. + const rolesDbConfig = Object.assign({ database: database }, config) + const rolesClient = new Client(rolesDbConfig) + await rolesClient.connect() + + // Create verifier user + await createUser(rolesClient, user, password) + + // Create PI RO user + const piRoUser = "pi_ro_dbuser" + await createUser(rolesClient, piRoUser, process.env.PI_RO_PASSWORD) + + const protractorUser = "protractor_dbuser" + await createUser(rolesClient, protractorUser, process.env.PI_RO_PASSWORD) + + try { + await rolesClient.query(`CREATE SCHEMA IF NOT EXISTS ${schema};`) + console.log(`Schema created successfully. Schema=${schema}`) + } catch (err) { + console.log(`Failed to create schema. Schema=${schema}`) + throw err + } + + // Permission for verifier user + await rolesClient.query(`GRANT CONNECT ON DATABASE ${database} TO ${user};`) + await rolesClient.query(`GRANT USAGE ON SCHEMA ${schema} TO ${user};`) + await rolesClient.query(`ALTER USER ${user} SET search_path TO '${schema}';`) + + // Permission for pi RO user + await rolesClient.query(`GRANT USAGE ON SCHEMA ${schema} TO ${piRoUser};`) + + rolesClient.end() +} + +async function createUser(rolesClient, user, password, opt = {}) { + const result = await rolesClient.query( + "SELECT * FROM pg_catalog.pg_user WHERE usename = $1;", + [user] + ) + if (result?.rowCount !== 0) { + console.log(`User already exists. User=${user}`) + } else { + try { + await rolesClient.query( + `CREATE ROLE ${user} LOGIN PASSWORD '${password}';` + ) + console.log(`Role created successfully. Role=${user}`) + } catch (err) { + console.log(`Failed to create role. Role=${user}`) + throw err + } + } +} diff --git a/packages/verifier/prisma/migrations/20211209212712_create_schema/migration.sql b/packages/verifier/prisma/migrations/20211209212712_create_schema/migration.sql new file mode 100644 index 000000000..2fe3952f0 --- /dev/null +++ b/packages/verifier/prisma/migrations/20211209212712_create_schema/migration.sql @@ -0,0 +1,38 @@ +-- Copyright 2024 Circle Internet Group, Inc. All rights reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +CREATE EXTENSION IF NOT EXISTS pgcrypto; + +-- CreateTable +CREATE TABLE "verifications" ( + "id" UUID NOT NULL DEFAULT gen_random_uuid(), + "challenge" UUID NOT NULL DEFAULT gen_random_uuid(), + "network" TEXT NOT NULL, + "chain_id" INTEGER NOT NULL DEFAULT 1, + "registry_address" TEXT, + "subject" TEXT NOT NULL, + "presentation_definition" JSONB NOT NULL, + "credential_submission" JSONB, + "verification_result" JSONB, + "signature" TEXT, + "status" TEXT NOT NULL DEFAULT E'created', + "status_detail" TEXT, + "offered_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "submitted_at" TIMESTAMP(3), + "verified_at" TIMESTAMP(3), + + CONSTRAINT "verifications_pkey" PRIMARY KEY ("id") +); diff --git a/packages/verifier/prisma/migrations/20220201144934_grant_access/migration.sql b/packages/verifier/prisma/migrations/20220201144934_grant_access/migration.sql new file mode 100644 index 000000000..551365293 --- /dev/null +++ b/packages/verifier/prisma/migrations/20220201144934_grant_access/migration.sql @@ -0,0 +1,17 @@ +-- Copyright 2024 Circle Internet Group, Inc. All rights reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +GRANT INSERT, SELECT, UPDATE, DELETE ON "verifier"."verifications" TO verifier; diff --git a/packages/verifier/prisma/migrations/20220224170112_add_name_and_version_to_verifications/migration.sql b/packages/verifier/prisma/migrations/20220224170112_add_name_and_version_to_verifications/migration.sql new file mode 100644 index 000000000..4eed58a41 --- /dev/null +++ b/packages/verifier/prisma/migrations/20220224170112_add_name_and_version_to_verifications/migration.sql @@ -0,0 +1,19 @@ +-- Copyright 2024 Circle Internet Group, Inc. All rights reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +-- AlterTable +ALTER TABLE "verifications" ADD COLUMN "name" TEXT NOT NULL DEFAULT E'VerificationRegistry', +ADD COLUMN "version" TEXT NOT NULL DEFAULT E'1.0'; diff --git a/packages/verifier/prisma/migrations/20220224192853_make_name_and_version_optional/migration.sql b/packages/verifier/prisma/migrations/20220224192853_make_name_and_version_optional/migration.sql new file mode 100644 index 000000000..b2fd02222 --- /dev/null +++ b/packages/verifier/prisma/migrations/20220224192853_make_name_and_version_optional/migration.sql @@ -0,0 +1,21 @@ +-- Copyright 2024 Circle Internet Group, Inc. All rights reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +-- AlterTable +ALTER TABLE "verifications" ALTER COLUMN "name" DROP NOT NULL, +ALTER COLUMN "name" DROP DEFAULT, +ALTER COLUMN "version" DROP NOT NULL, +ALTER COLUMN "version" DROP DEFAULT; diff --git a/packages/verifier/prisma/migrations/20220224194132_make_chainid_optional/migration.sql b/packages/verifier/prisma/migrations/20220224194132_make_chainid_optional/migration.sql new file mode 100644 index 000000000..20a6fcc68 --- /dev/null +++ b/packages/verifier/prisma/migrations/20220224194132_make_chainid_optional/migration.sql @@ -0,0 +1,19 @@ +-- Copyright 2024 Circle Internet Group, Inc. All rights reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +-- AlterTable +ALTER TABLE "verifications" ALTER COLUMN "chain_id" DROP NOT NULL, +ALTER COLUMN "chain_id" DROP DEFAULT; diff --git a/packages/verifier/prisma/migrations/20220923172241_datadog_permissions/migration.sql b/packages/verifier/prisma/migrations/20220923172241_datadog_permissions/migration.sql new file mode 100644 index 000000000..b83ba609d --- /dev/null +++ b/packages/verifier/prisma/migrations/20220923172241_datadog_permissions/migration.sql @@ -0,0 +1,61 @@ +-- Copyright 2024 Circle Internet Group, Inc. All rights reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +-- Create datadog schema. +CREATE SCHEMA IF NOT EXISTS datadog; + +-- Create datadog db user +-- In smokebox/sandbox/stg/prod the user _should_ already exist. +-- The CREATE ROLE is here to avoid problems in dev and QA. +-- The password doesn't matter, so we'll reuse the one that already exists. +DO +$$ + BEGIN + IF NOT EXISTS( + SELECT * + FROM pg_catalog.pg_user + WHERE usename = 'datadog') + THEN + CREATE ROLE datadog LOGIN PASSWORD '${DB_PASSWORD}'; + END IF; + END +$$; + +-- Grants for datadog user to all appropriate schemas. +GRANT USAGE ON SCHEMA public TO datadog; +GRANT USAGE ON SCHEMA datadog TO datadog; +GRANT USAGE ON SCHEMA verifier TO datadog; + +-- Grant pg_monitor to datadog user. +GRANT pg_monitor TO datadog; + +-- Load pg_stat_statements extension in current database. +CREATE EXTENSION IF NOT EXISTS pg_stat_statements; + +-- Add function to generate explain plans. +CREATE OR REPLACE FUNCTION datadog.explain_statement ( + l_query text, + out explain JSON +) +RETURNS SETOF JSON AS +$$ + BEGIN + RETURN QUERY EXECUTE 'EXPLAIN (FORMAT JSON) ' || l_query; + END; +$$ +LANGUAGE 'plpgsql' +RETURNS NULL ON NULL INPUT +SECURITY DEFINER; diff --git a/packages/verifier/prisma/migrations/20221014212934_grant_access_pi_ro_user/migration.sql b/packages/verifier/prisma/migrations/20221014212934_grant_access_pi_ro_user/migration.sql new file mode 100644 index 000000000..455d24b3b --- /dev/null +++ b/packages/verifier/prisma/migrations/20221014212934_grant_access_pi_ro_user/migration.sql @@ -0,0 +1,29 @@ +-- Copyright 2024 Circle Internet Group, Inc. All rights reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +-- Grant select to pi_ro_dbuser +DO +$$ + BEGIN + IF EXISTS( + SELECT * + FROM pg_catalog.pg_user + WHERE usename = 'pi_ro_dbuser') + THEN + GRANT SELECT ON "verifier"."verifications" TO pi_ro_dbuser; + END IF; + END +$$; diff --git a/packages/verifier/prisma/migrations/20221027163943_added_api_clients_table/migration.sql b/packages/verifier/prisma/migrations/20221027163943_added_api_clients_table/migration.sql new file mode 100644 index 000000000..ccb4d07dd --- /dev/null +++ b/packages/verifier/prisma/migrations/20221027163943_added_api_clients_table/migration.sql @@ -0,0 +1,49 @@ +-- Copyright 2024 Circle Internet Group, Inc. All rights reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +-- CreateTable +CREATE TABLE "api_clients" ( + "id" UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY, + "did" TEXT NOT NULL, + "apiToken" TEXT NOT NULL, + "legalTermVersion" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "expiresInSeconds" INTEGER NOT NULL, + "revokedAt" TIMESTAMP(3), + "revokedReason" VARCHAR(200), + "revokedBy" TEXT +); + +-- CreateIndex +CREATE INDEX "api_clients_did_idx" ON "api_clients"("did"); +CREATE INDEX "api_clients_revokedAt_idx" ON "api_clients"("revokedAt"); + + +-- GrantAccess +GRANT INSERT, SELECT, UPDATE, DELETE ON "verifier"."api_clients" TO verifier; + +DO +$$ + BEGIN + IF EXISTS( + SELECT * + FROM pg_catalog.pg_user + WHERE usename = 'pi_ro_dbuser') + THEN + GRANT SELECT ON "verifier"."api_clients" TO pi_ro_dbuser; + END IF; + END +$$; diff --git a/packages/verifier/prisma/migrations/20221114055711_create_users_table/migration.sql b/packages/verifier/prisma/migrations/20221114055711_create_users_table/migration.sql new file mode 100644 index 000000000..b31466429 --- /dev/null +++ b/packages/verifier/prisma/migrations/20221114055711_create_users_table/migration.sql @@ -0,0 +1,53 @@ +-- Copyright 2024 Circle Internet Group, Inc. All rights reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +/* + Warnings: + + - You are about to drop the column `apiToken` on the `api_clients` table. All the data in the column will be lost. + - You are about to drop the column `legalTermVersion` on the `api_clients` table. All the data in the column will be lost. + +*/ +-- AlterTable +ALTER TABLE "api_clients" DROP COLUMN "apiToken", +DROP COLUMN "legalTermVersion"; + +-- CreateTable +CREATE TABLE "users" ( + "did" TEXT NOT NULL PRIMARY KEY, + "legalTermVersion" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "acceptedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- AddForeignKey +ALTER TABLE "api_clients" ADD CONSTRAINT "api_clients_did_fkey" FOREIGN KEY ("did") REFERENCES "users"("did") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- GrantAccess +GRANT INSERT, SELECT, UPDATE, DELETE ON "verifier"."users" TO verifier; + +DO +$$ + BEGIN + IF EXISTS( + SELECT * + FROM pg_catalog.pg_user + WHERE usename = 'pi_ro_dbuser') + THEN + GRANT SELECT ON "verifier"."users" TO pi_ro_dbuser; + END IF; + END +$$; diff --git a/packages/verifier/prisma/migrations/20231030081328_grant_access_protractor/migration.sql b/packages/verifier/prisma/migrations/20231030081328_grant_access_protractor/migration.sql new file mode 100644 index 000000000..971d24679 --- /dev/null +++ b/packages/verifier/prisma/migrations/20231030081328_grant_access_protractor/migration.sql @@ -0,0 +1,31 @@ +-- Copyright 2024 Circle Internet Group, Inc. All rights reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +-- Grant select to protractor_user +DO +$$ + BEGIN + IF EXISTS( + SELECT * + FROM pg_catalog.pg_user + WHERE usename = 'protractor_user') + THEN + GRANT SELECT, INSERT, UPDATE ON "verifier"."verifications" TO protractor_user; + GRANT SELECT, INSERT, UPDATE ON "verifier"."api_clients" TO protractor_user; + GRANT SELECT, INSERT, UPDATE ON "verifier"."users" TO protractor_user; + END IF; + END +$$; diff --git a/packages/verifier/prisma/migrations/20231109105816_fix_grant_access_protractor/migration.sql b/packages/verifier/prisma/migrations/20231109105816_fix_grant_access_protractor/migration.sql new file mode 100644 index 000000000..62398e21d --- /dev/null +++ b/packages/verifier/prisma/migrations/20231109105816_fix_grant_access_protractor/migration.sql @@ -0,0 +1,31 @@ +-- Copyright 2024 Circle Internet Group, Inc. All rights reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +-- Grant select to protractor_user +DO +$$ + BEGIN + IF EXISTS( + SELECT * + FROM pg_catalog.pg_user + WHERE usename = 'protractor_dbuser') + THEN + GRANT SELECT, INSERT, UPDATE ON "verifier"."verifications" TO protractor_dbuser; + GRANT SELECT, INSERT, UPDATE ON "verifier"."api_clients" TO protractor_dbuser; + GRANT SELECT, INSERT, UPDATE ON "verifier"."users" TO protractor_dbuser; + END IF; + END +$$; diff --git a/packages/verifier/prisma/migrations/migration_lock.toml b/packages/verifier/prisma/migrations/migration_lock.toml new file mode 100644 index 000000000..fbffa92c2 --- /dev/null +++ b/packages/verifier/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/packages/verifier/prisma/schema.prisma b/packages/verifier/prisma/schema.prisma new file mode 100644 index 000000000..0388b8fe0 --- /dev/null +++ b/packages/verifier/prisma/schema.prisma @@ -0,0 +1,62 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +generator client { + provider = "prisma-client-js" + previewFeatures = ["tracing"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +// todo Fei: chainId (or chainIdReference) is not necessarily a number. Please refer to https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-2.md#specification. Ticket: https://circlepay.atlassian.net/browse/VR-195. +model Verification { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + challenge String @default(dbgenerated("gen_random_uuid()")) @map("challenge") @db.Uuid + network String + chainId Int? @map("chain_id") + registryAddress String? @map("registry_address") + name String? + version String? + subject String + presentationDefinition Json @map("presentation_definition") + credentialSubmission Json? @map("credential_submission") + verificationResult Json? @map("verification_result") + signature String? + status String @default("created") + statusDetail String? @map("status_detail") + offeredAt DateTime @default(now()) @map("offered_at") + submittedAt DateTime? @map("submitted_at") + verifiedAt DateTime? @map("verified_at") + + @@map("verifications") +} + +model User { + @@map("users") + + did String @id + legalTermVersion Int + createdAt DateTime @default(now()) + acceptedAt DateTime @default(now()) + clients ApiClient[] +} + +model ApiClient { + @@map("api_clients") + + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + user User @relation(fields: [did], references: [did]) + did String + createdAt DateTime @default(now()) + expiresInSeconds Int + revokedAt DateTime? + revokedReason String? @db.VarChar(200) + revokedBy String? + + @@index(did) + @@index(revokedAt) +} + diff --git a/packages/verifier/src/api/apiClients/createApiClient.ts b/packages/verifier/src/api/apiClients/createApiClient.ts new file mode 100644 index 000000000..5f92e64a0 --- /dev/null +++ b/packages/verifier/src/api/apiClients/createApiClient.ts @@ -0,0 +1,58 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import asyncHandler from "express-async-handler" + +import { BadRequestError } from "../../lib/errors" +import { generateApiClient } from "../../lib/utils/api-clients" +import { logger } from "../../logger" + +type Body = { + did: string +} + +function validateDid(body: Body) { + const { did } = body + + if (!did) { + throw new BadRequestError("Cannot create API client without DID") + } + + return body +} + +export default asyncHandler(async (req, res) => { + logger.info("CreateApiClient", req.body as Body) + + try { + const { did } = validateDid(req.body as Body) + + const { id, createdAt } = await generateApiClient({ did }) + res.status(200).json({ + id, + did, + createdAt + }) + } catch (err) { + if (err instanceof BadRequestError) { + err.additionalLoggingDetails = JSON.stringify(req.body as Body) + } + + throw err + } +}) diff --git a/packages/verifier/src/api/apiClients/getClients.ts b/packages/verifier/src/api/apiClients/getClients.ts new file mode 100644 index 000000000..88d1dac21 --- /dev/null +++ b/packages/verifier/src/api/apiClients/getClients.ts @@ -0,0 +1,45 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import asyncHandler from "express-async-handler" + +import { BadRequestError } from "../../lib/errors" +import { getApiClients, maskApiToken } from "../../lib/utils/api-clients" + +type Query = { + did: string +} + +function validateBody(query: Query) { + const { did } = query + + if (!did) { + throw new BadRequestError("Missing DID") + } + + return query +} + +export default asyncHandler(async (req, res) => { + const { did } = validateBody(req.query as Query) + + const clients = (await getApiClients({ did })).map((c) => ({ + id: maskApiToken(c.id) + })) + res.status(200).json(clients) +}) diff --git a/packages/verifier/src/api/apiClients/revoke.ts b/packages/verifier/src/api/apiClients/revoke.ts new file mode 100644 index 000000000..be5be164d --- /dev/null +++ b/packages/verifier/src/api/apiClients/revoke.ts @@ -0,0 +1,68 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { Response } from "express" +import asyncHandler from "express-async-handler" + +import { BadRequestError } from "../../lib/errors" +import { revokeApiClient } from "../../lib/utils/api-clients" +import { logger } from "../../logger" + +type Body = { + revokedReason?: string +} + +function validateBody(body: Body) { + const { revokedReason } = body + + if (revokedReason && revokedReason.length > 200) { + throw new BadRequestError("Revoked reason cannot exceed 200 char") + } + + return body +} + +export default asyncHandler(async (req, res: Response) => { + const id = res.locals["id"] as string + logger.info("Revoke", { + id, + ...(req.body as Body) + }) + + try { + const { revokedReason } = validateBody(req.body as Body) + + const { revokedAt, revokedBy } = await revokeApiClient({ + id, + revokedReason + }) + + res.status(200).json({ + id, + revokedAt, + revokedReason, + revokedBy + }) + } catch (err) { + if (err instanceof BadRequestError) { + err.additionalLoggingDetails = JSON.stringify(req.body as Body) + } + + throw err + } +}) diff --git a/packages/verifier/src/api/ping.ts b/packages/verifier/src/api/ping.ts new file mode 100644 index 000000000..411266b5a --- /dev/null +++ b/packages/verifier/src/api/ping.ts @@ -0,0 +1,28 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import asyncHandler from "express-async-handler" + +/** + * GET /ping + * + * Healthcheck endpoint. Will always respond with a 200 status code. + */ +export default asyncHandler((_req, res) => { + res.status(200).json({ status: "ok" }) +}) diff --git a/packages/verifier/src/api/users/createUser.ts b/packages/verifier/src/api/users/createUser.ts new file mode 100644 index 000000000..140160947 --- /dev/null +++ b/packages/verifier/src/api/users/createUser.ts @@ -0,0 +1,66 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import asyncHandler from "express-async-handler" + +import { BadRequestError } from "../../lib/errors" +import { createNewUser } from "../../lib/utils/user" +import { logger } from "../../logger" + +const DOMAIN_REGEX = new RegExp( + "^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z]{2,})+$" +) + +type Body = { + did: string +} + +function validateBody(body: Body) { + const { did } = body + + const parts = (did || "").split(":") + if (parts.length < 3 || parts[0] != "did") { + throw new BadRequestError("Sign up with an invalid did") + } + + if (parts[1] != "web") { + throw new BadRequestError("Sign up only supports did:web") + } + + if (parts[2].length > 253 || !DOMAIN_REGEX.test(parts[2])) { + throw new BadRequestError("Sign up with an invalid domain") + } + + if (/(circle.com)/gi.test(parts[2])) { + throw new BadRequestError("Cannot use Circle DID") + } + + return body +} + +export default asyncHandler(async (req, res) => { + logger.info("CreateUser", req.body as Body) + + const { did } = validateBody(req.body as Body) + + const user = await createNewUser({ did }) + + res.status(200).json({ + did: user.did + }) +}) diff --git a/packages/verifier/src/api/users/getUser.ts b/packages/verifier/src/api/users/getUser.ts new file mode 100644 index 000000000..12296b87d --- /dev/null +++ b/packages/verifier/src/api/users/getUser.ts @@ -0,0 +1,40 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import asyncHandler from "express-async-handler" + +import { getExistingUser, isOnLatestLegalTerm } from "../../lib/utils/user" +import { logger } from "../../logger" + +type Params = { + did: string +} + +export default asyncHandler(async (req, res) => { + logger.info("GetUser", req.params as Params) + + const { did } = req.params as Params + + const user = await getExistingUser({ did }) + const hasAcceptedLegalTerms = isOnLatestLegalTerm(user) + + res.status(200).json({ + did: user.did, + hasAcceptedLegalTerms + }) +}) diff --git a/packages/verifier/src/api/verifications/create.ts b/packages/verifier/src/api/verifications/create.ts new file mode 100644 index 000000000..4a9e958f7 --- /dev/null +++ b/packages/verifier/src/api/verifications/create.ts @@ -0,0 +1,220 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import assert from "assert" + +import { PublicKey } from "@solana/web3.js" +import { isAddress } from "ethers/lib/utils" +import asyncHandler from "express-async-handler" + +import { createVerification } from "../../lib/database/verifications" +import { BadRequestError } from "../../lib/errors" +import { buildPresentationDefinition } from "../../lib/presentation-definition" +import { convertClusterToChainId, SOLANA_CHAINS } from "../../lib/solana" +import { url } from "../../lib/url-fns" +import { logger } from "../../logger" + +const SUPPORTED_NETWORKS = ["ethereum"] + +type Body = { + network: string + subject: string + name?: string + version?: string + chainId?: number | string + registryAddress?: string +} + +/** + * Validate the network parameter + */ +const validateNetwork = (network?: string) => { + if (!network) { + throw new BadRequestError("network is required") + } + + if (!SUPPORTED_NETWORKS.includes(network)) { + throw new BadRequestError(`Unsupported network: ${network}`) + } +} + +/** + * Validate the subject address for the given network + */ +const validateSubjectAddress = (network: string, subject?: string) => { + if (!subject) { + throw new BadRequestError("subject is required") + } + + try { + if (network === "ethereum") { + assert(isAddress(subject)) + } + + if (network === "solana") { + const publicKey = new PublicKey(subject) + assert(PublicKey.isOnCurve(publicKey.toBuffer())) + } + } catch (e) { + throw new BadRequestError(`Invalid subject address for ${network}`) + } +} + +/** + * Validate the chainId parameter for the given network + */ +const validateChainId = ( + network: string, + chainId?: string | number +): number | undefined => { + if (!chainId) { + return + } + + if (network === "ethereum") { + if (typeof chainId !== "number") { + throw new BadRequestError("chainId must be a number") + } + + if (chainId < 1) { + throw new BadRequestError("chainId must be greater than 0") + } + + return chainId + } + + if (network === "solana") { + if (typeof chainId !== "string") { + throw new BadRequestError("chainId must be a string") + } + + if (!SOLANA_CHAINS.includes(chainId)) { + throw new BadRequestError("Invalid chainId") + } + + return convertClusterToChainId(chainId) + } +} + +/** + * Validate the name parameter + */ +const validateName = (name?: string) => { + if (!name) { + return + } + + if (typeof name !== "string") { + throw new BadRequestError("name must be a string") + } +} + +/** + * Validate the version parameter + */ +const validateVersion = (version?: string) => { + if (!version) { + return + } + + if (typeof version !== "string") { + throw new BadRequestError("version must be a string") + } +} + +export const _exportedForUnitTests = { + validateSubjectAddress, + validateChainId, + validateName, + validateVersion +} + +/** + * POST /verifications + * + * Create a new verification offer. This is the first step in the Presentation + * Exchange. This endpoint is called by a 3rd party service and will return a + * "challengeTokenUrl" for their end-user to fetch. The challengeTokenUrl will + * contain the verification offer for the end-user to access. + * + * Params: + * - `subject`: the subject address. Required. + * - `network`: the network to use for verification ('solana' or 'ethereum') Required. + * - `chainId`: the chainId for ethereum. if not set, it defaults to 1. + * - `registryAddress`: the registry address for ethereum. Usually this will be the address of the smart contract, which inherits VerificationRegistry. + */ +export default asyncHandler(async (req, res) => { + const { + network, + subject, + name, + version, + chainId: rawChainId, + registryAddress + } = req.body as Body + logger.info("Create: start to create new verification") + + let chainId + try { + validateNetwork(network) + logger.debug("Create: validated network") + + validateSubjectAddress(network, subject) + logger.debug("Create: validated network address") + + chainId = validateChainId(network, rawChainId) + logger.debug("Create: validated chain ID") + + validateName(name) + logger.debug("Create: validated name") + + validateVersion(version) + logger.debug("Create: validated version") + } catch (err) { + if (err instanceof BadRequestError) { + err.additionalLoggingDetails = JSON.stringify(req.body as Body) + } + throw err + } + + const presentationDefinition = buildPresentationDefinition({ + trustedIssuers: process.env.TRUSTED_ISSUERS + }) + + logger.info("Create: built presentation") + + const verification = await createVerification({ + network, + subject, + chainId, + registryAddress, + name, + version, + presentationDefinition + }) + + logger.info("Create: created verification", { + subject, + verifId: verification.id + }) + + const challengeTokenUrl = url(`/api/v1/verifications/${verification.id}`) + const statusUrl = url(`/api/v1/verifications/${verification.id}/status`) + + res.status(201).json({ challengeTokenUrl, statusUrl }) +}) diff --git a/packages/verifier/src/api/verifications/show.ts b/packages/verifier/src/api/verifications/show.ts new file mode 100644 index 000000000..d9c43196f --- /dev/null +++ b/packages/verifier/src/api/verifications/show.ts @@ -0,0 +1,56 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import asyncHandler from "express-async-handler" + +import { findVerification } from "../../lib/database/verifications" +import { PresentationDefinition } from "../../lib/presentation-definition" +import { url } from "../../lib/url-fns" +import { logger } from "../../logger" + +const ONE_MONTH = 1000 * 60 * 60 * 24 * 30 + +/** + * GET /verifications/:id + * + * Load the Verification from the database and respond with a verification + * offer. + */ +export default asyncHandler(async (req, res) => { + const verification = await findVerification(req.params.id) + logger.info("Show: start show endpoint", { + verifId: verification.id + }) + + const offer = { + id: verification.id, + type: "https://circle.com/types/VerificationRequest", + from: "did:web:circle.com", + created_time: new Date(verification.offeredAt).toISOString(), + expires_time: new Date( + verification.offeredAt.getTime() + ONE_MONTH + ).toISOString(), + reply_url: url(`/api/v1/verifications/${verification.id}`), + body: { + status_url: url(`/api/v1/verifications/${verification.id}/status`), + challenge: verification.challenge + } + } + + res.status(200).json(offer) +}) diff --git a/packages/verifier/src/api/verifications/status.ts b/packages/verifier/src/api/verifications/status.ts new file mode 100644 index 000000000..189f0d89f --- /dev/null +++ b/packages/verifier/src/api/verifications/status.ts @@ -0,0 +1,52 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import asyncHandler from "express-async-handler" + +import { findVerification } from "../../lib/database/verifications" + +const isApproved = (status: string) => status === "approved" +const isRejected = (status: string) => status === "rejected" + +/** + * GET /verifications/:id/status + * + * Load the Verification from the database and respond with the current status. + * + * If the Verification was successful, respond with the verification result. + * If the Verification was unsuccessful, respond with the failure reason. + */ +export default asyncHandler(async (req, res) => { + const { status, statusDetail, verificationResult, signature } = + await findVerification(req.params.id) + + if (isApproved(status)) { + res.status(200).json({ + status, + verificationResult, + signature + }) + } else if (isRejected(status)) { + res.status(400).json({ + status, + message: statusDetail + }) + } else { + res.status(200).json({ status }) + } +}) diff --git a/packages/verifier/src/api/verifications/submit.ts b/packages/verifier/src/api/verifications/submit.ts new file mode 100644 index 000000000..b3682ee05 --- /dev/null +++ b/packages/verifier/src/api/verifications/submit.ts @@ -0,0 +1,124 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import asyncHandler from "express-async-handler" + +import { + findVerification, + saveSubmission +} from "../../lib/database/verifications" +import { statsd } from "../../lib/monitoring" +import type { PresentationDefinition } from "../../lib/presentation-definition" +import { ethereum, solana } from "../../lib/results" +import { verify } from "../../lib/verifier" +import { logger } from "../../logger" + +import { CredentialSubmission } from "src/types/presentation" + +/** + * POST /verifications/ + * + * Submit a verification submission. This is the step when a 3rd party service, + * such as a wallet, submits credentials necessary to complete verification. + */ +export default asyncHandler(async (req, res) => { + const verification = await findVerification(req.params.id) + logger.info("Submit: start submit endpoint", { + verifId: verification.id + }) + + const beforeVerify = new Date() + const presentationDefinition = + verification.presentationDefinition as PresentationDefinition + const subject = verification.subject + const { presentation } = await verify( + presentationDefinition, + req.body as string, + subject, + verification.challenge + ) + statsd.timing("submit_verify", beforeVerify) + + const beforeSigning = new Date() + const chainId = verification.chainId + const registryAddress = verification.registryAddress + const name = verification.name + const version = verification.version + const verifId = verification.id + + const idToSchemasMap = presentationDefinition.input_descriptors.reduce( + (acc: Record, input) => { + acc[input.id] = input.schema.map((s) => s.uri) + return acc + }, + {} + ) + const schema: Array = + ( + presentation as CredentialSubmission + ).presentation_submission?.descriptor_map.reduce( + (acc: Array, desc) => { + acc = [...acc, ...idToSchemasMap[desc.id]] + return acc + }, + [] + ) ?? [] + + const result = + verification.network === "solana" + ? await solana({ + subject, + chainId, + name, + version, + verifier_verification_id: verifId, + schema + }) + : await ethereum({ + subject, + chainId, + registryAddress, + name, + version, + verifier_verification_id: verifId, + schema + }) + statsd.timing("submit_signing", beforeSigning) + + logger.info("Submit: verified network", { + verifId: verification.id, + network: verification.network + }) + + const { verificationResult, signature } = result + + const beforeSavingSubmission = new Date() + await saveSubmission({ + verification, + submission: presentation, + verificationResult, + signature, + status: "approved" + }) + statsd.timing("submit_savingSubmission", beforeSavingSubmission) + + logger.info("Submit: saved submission", { + verifId: verification.id + }) + res.status(201).json({ status: "success", verificationResult, signature }) +}) diff --git a/packages/verifier/src/app.ts b/packages/verifier/src/app.ts new file mode 100644 index 000000000..1a564ec3d --- /dev/null +++ b/packages/verifier/src/app.ts @@ -0,0 +1,90 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import path from "path" + +import bodyParser from "body-parser" +import cors from "cors" +import express, { Request, Response, static as s } from "express" +import helmet from "helmet" +import morgan from "morgan" + +import { errorHandler } from "./lib/errors" +import { statsDMiddleware } from "./lib/monitoring" +import { routes } from "./lib/routes" +import { loadPrivateKey } from "./lib/utils/key-management-client" +import { logger } from "./logger" + +export const app = express() + +app.set("view engine", "ejs") +app.use(s(path.join(__dirname + "views"))) +app.use("/css", s(path.join(__dirname, "views/css"))) +app.use("/img", s(path.join(__dirname, "views/img"))) +app.use("/js", s(path.join(__dirname, "views/js"))) + +if (process.env.NODE_ENV !== "test") { + // refer to https://github.com/expressjs/morgan#tokens for the tokens + const morganFormat: morgan.FormatFn = function ( + tokens, + req, + res + ) { + const log = { + contentLength: tokens.res(req, res, "content-length"), + logger: "accessLog", + method: tokens.method(req, res), + protocol: tokens["http-version"](req, res), + service: `${process.env.ENV ?? "unknown"}.${ + process.env.SERVICE_NAME ?? "service" + }`, + status: tokens.status(req, res), + timestamp: tokens.date(req, res, "iso"), // does not support timestamp out of the box + uri: tokens.url(req, res), + userAgent: tokens["user-agent"] + } + return JSON.stringify(log) + } + // refer to https://github.com/expressjs/morgan#options + const morganOptions: morgan.Options = { + immediate: false + } + app.use(morgan(morganFormat, morganOptions)) +} // disable for unit tests +app.use(cors()) +app.use( + helmet({ + crossOriginEmbedderPolicy: false + }) +) +app.use(bodyParser.text()) +app.use(bodyParser.json()) +app.use(statsDMiddleware()) + +if (process.env.NODE_ENV === "production") { + // Only load from Secret Manager if production + loadPrivateKey() + .then(() => { + app.use(routes) + app.use(errorHandler()) + }) + .catch((err) => logger.error(err)) +} else { + app.use(routes) + app.use(errorHandler()) +} diff --git a/packages/verifier/src/index.ts b/packages/verifier/src/index.ts new file mode 100644 index 000000000..79c2771a7 --- /dev/null +++ b/packages/verifier/src/index.ts @@ -0,0 +1,23 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +// Verification Results +export * from "./lib/results" + +// Encoding / Decoding VCs +export * from "./lib/coder" diff --git a/packages/verifier/src/lib/apiAuth.ts b/packages/verifier/src/lib/apiAuth.ts new file mode 100644 index 000000000..612927d03 --- /dev/null +++ b/packages/verifier/src/lib/apiAuth.ts @@ -0,0 +1,58 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { NextFunction, Request, Response } from "express" +import asyncHandler from "express-async-handler" + +import { logger } from "../logger" + +import { routeNameMapping } from "./routes" +import { isValidAuth } from "./utils/auth" + +export default asyncHandler( + async (req: Request, res: Response, next: NextFunction) => { + const id = (req.header("X-API-Key") as string) || "" + + try { + // eslint-disable-next-line + const method = req.method?.toLowerCase() + // eslint-disable-next-line + const path: string = req.route?.path + const routeKey = `${method}_${path}` + const namedRoute = routeNameMapping[routeKey] + + if (!["create", "show", "submit", "status"].includes(namedRoute)) { + // Enforce in https://circlepay.atlassian.net/browse/VR-199 + const apiClient = await isValidAuth({ id }) + logger.info(`${namedRoute} request with ${apiClient.did}`) + } + + // Next request can access the parsed DID + res.locals["id"] = id + } catch (err) { + if (next) { + next(err) + return + } + } + + if (next) { + next() + } + } +) diff --git a/packages/verifier/src/lib/coder.ts b/packages/verifier/src/lib/coder.ts new file mode 100644 index 000000000..16eef7fbd --- /dev/null +++ b/packages/verifier/src/lib/coder.ts @@ -0,0 +1,142 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { decodeJWT } from "did-jwt" +import type { Verifiable, W3CPresentation } from "did-jwt-vc" +import { + verifyCredential, + verifyPresentation, + verifyPresentationPayloadOptions, + normalizePresentation, + validatePresentationPayload +} from "did-jwt-vc" +import type { + JwtPresentationPayload, + VerifyPresentationOptions +} from "did-jwt-vc/src/types" +import { UnsecuredJWT } from "jose" + +import { logger } from "../logger" +import type { + RevocableCredential, + VerifiableCredential, + VerifiablePresentation +} from "../types/credentials" + +import { didResolver } from "./did" +import { BadRequestError } from "./errors" +import { errLog } from "./utils/catch-err" + +type JWT = string + +/** + * Decode a JWT with a Verifiable Presentation payload. + * Verifies and validates a VerifiablePresentation that is encoded as a JWT according to the W3C spec. + * + * @throws BadRequestError if the JWT is invalid + */ +export const decodeVerifiablePresentation = async ( + submission: JWT, + options?: VerifyPresentationOptions +): Promise => { + try { + logger.info("Verifying JWT VP") + const res = await verifyPresentation(submission, didResolver, options) + return res.verifiablePresentation + } catch (err) { + const [message, context] = errLog("JWT VP verification failed", err) + logger.info(message, context) + throw new BadRequestError( + `Input isn't a valid Verifiable Presentation. ${context.errMsg || ""}` + ) + } +} + +/** + * Verify and normalize a plaintext Verifiable Presentation payload. + * + * @throws BadRequestError if the JWT is invalid + */ +export const verifyVerifiablePresentation = ( + submission: JWT, + options?: VerifyPresentationOptions +): VerifiablePresentation => { + try { + logger.info("Verifying plaintext VP") + let presentation + try { + presentation = decodeJWT(submission).payload as JwtPresentationPayload + } catch (err) { + const [message, context] = errLog( + "decodeJWT failed, falling back to UnsecuredJWT", + err + ) + logger.info(message, context) + presentation = UnsecuredJWT.decode(submission) + .payload as JwtPresentationPayload + } + + verifyPresentationPayloadOptions(presentation, options || {}) + const normalizedPresentation: Verifiable = + normalizePresentation(presentation) + validatePresentationPayload(normalizedPresentation) + return normalizedPresentation + } catch (err) { + const [message, context] = errLog("Plaintext VP verification failed", err) + logger.info(message, context) + if ( + context.errMsg?.startsWith( + "Presentation does not contain the mandatory challenge" + ) + ) { + throw new BadRequestError( + "Input isn't a valid Verifiable Presentation. Nonce is invalid." + ) + } else { + throw new BadRequestError( + `Input isn't a valid Verifiable Presentation. ${context.errMsg || ""}` + ) + } + } +} + +/** + * Decoded a JWT with a Verifiable Credential payload. + * + * @throws BadRequestError if the JWT is invalid + */ +export const decodeVerifiableCredential = async ( + vcJWT: JWT +): Promise => { + try { + const res = await verifyCredential(vcJWT, didResolver) + return res.verifiableCredential + } catch (err) { + const [message, context] = errLog("VC decode failed", err) + logger.info(message, context) + if (context.errMsg && context.errMsg.includes("invalid_signature")) { + throw new BadRequestError( + "Input isn't a valid Verifiable Credential. Invalid signature." + ) + } else { + throw new BadRequestError( + `Input isn't a valid Verifiable Credential. ${context.errMsg || ""}` + ) + } + } +} diff --git a/packages/verifier/src/lib/database/apiClient.ts b/packages/verifier/src/lib/database/apiClient.ts new file mode 100644 index 000000000..7707c79d4 --- /dev/null +++ b/packages/verifier/src/lib/database/apiClient.ts @@ -0,0 +1,98 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ApiClient, User } from "@prisma/client" + +import prisma from "./prisma" + +type CreateApiClientParams = { + did: string + expiresInSeconds: number +} + +type FindActiveApiClientParams = { + did: string +} + +type FindApiClientParams = { + id: string +} + +type UpdateApiClientParams = { + id: string + data: { + revokedAt?: Date + revokedReason?: string + revokedBy?: string + } +} + +export const createApiClient = async ({ + did, + expiresInSeconds +}: CreateApiClientParams): Promise => { + return await prisma.apiClient.create({ + data: { + user: { + connect: { + did + } + }, + expiresInSeconds + } + }) +} + +export const findActiveApiClients = async ({ + did +}: FindActiveApiClientParams): Promise => { + return await prisma.apiClient.findMany({ + where: { + did, + revokedAt: null + } + }) +} + +export const findApiClient = async ( + { id }: FindApiClientParams, + includeUser = false +): Promise => { + return await prisma.apiClient.findUnique({ + where: { + id + }, + rejectOnNotFound: true, + include: { + user: includeUser + } + }) +} + +export const updateApiClient = async ({ id, data }: UpdateApiClientParams) => { + if (Object.keys(data).length === 0) { + throw new Error("Updating without new data") + } + + return await prisma.apiClient.update({ + where: { + id + }, + data + }) +} diff --git a/packages/verifier/src/lib/database/prisma.ts b/packages/verifier/src/lib/database/prisma.ts new file mode 100644 index 000000000..f9fb0a96f --- /dev/null +++ b/packages/verifier/src/lib/database/prisma.ts @@ -0,0 +1,42 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { PrismaClient } from "@prisma/client" + +/** + * Initialize the prisma database client. + * + * In development, we hot-reload the code when files have changed. However, this + * can cause unwanted excess connections to the development database. To fix this, + * we store `PrismaClient` in development environments only, as global variables + * are not reloaded. + */ + +type GlobalThis = typeof globalThis +interface CustomNodeJsGlobal extends GlobalThis { + prisma: PrismaClient +} +declare const global: CustomNodeJsGlobal + +const prisma = global.prisma || new PrismaClient() + +if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") { + global.prisma = prisma +} + +export default prisma diff --git a/packages/verifier/src/lib/database/user.ts b/packages/verifier/src/lib/database/user.ts new file mode 100644 index 000000000..be1c286bc --- /dev/null +++ b/packages/verifier/src/lib/database/user.ts @@ -0,0 +1,51 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { User } from "@prisma/client" + +import prisma from "./prisma" + +type CreateUserParams = { + did: string + legalTermVersion: number +} + +type GetUserParams = { + did: string +} + +export const createUser = async ({ + did, + legalTermVersion +}: CreateUserParams): Promise => { + return await prisma.user.create({ + data: { + did, + legalTermVersion + } + }) +} + +export const getUser = async ({ did }: GetUserParams): Promise => { + return await prisma.user.findUnique({ + where: { + did + }, + rejectOnNotFound: true + }) +} diff --git a/packages/verifier/src/lib/database/verifications.ts b/packages/verifier/src/lib/database/verifications.ts new file mode 100644 index 000000000..96e338680 --- /dev/null +++ b/packages/verifier/src/lib/database/verifications.ts @@ -0,0 +1,142 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import type { Verification } from "@prisma/client" +import { validate } from "uuid" + +import type { VerifiablePresentation } from "../../types/credentials" +import type { VerificationResult } from "../../types/verification-result" +import { env } from "../env" +import { BadRequestError, NotFoundError } from "../errors" +import type { PresentationDefinition } from "../presentation-definition" + +import prisma from "./prisma" + +/** + * Parameters for the `createVerification` method + */ +type CreateVerificationParams = { + network: string + subject: string + name?: string + version?: string + chainId?: number + registryAddress?: string + presentationDefinition: PresentationDefinition +} + +/** + * Parameters for the `saveSubmission` method + */ +type SaveSubmissionParams = { + verification: Verification + submission: VerifiablePresentation + verificationResult?: VerificationResult + signature?: string + status: string + statusDetail?: string +} + +/** + * Create and persist a new Verification record for an end-user. + * + * This method is the first step in the verification process. The end-user will + * be presented with a challengeTokenUrl which they will use to fetch this + * verification offer. + */ +export const createVerification = async ({ + network, + subject, + chainId, + registryAddress, + name, + version, + presentationDefinition +}: CreateVerificationParams): Promise => { + return prisma.verification.create({ + data: { + id: presentationDefinition.id, + network, + subject, + name, + version, + chainId, + registryAddress, + presentationDefinition + } + }) +} + +/** + * Find a Verification record in the database by its `id`. + * + * @throws NotFoundError if the verification is not found + */ +export const findVerification = async (id: string): Promise => { + if (!validate(id)) { + throw new NotFoundError(`Verification not found for ${id}`) + } + + try { + return await prisma.verification.findUnique({ + where: { + id + }, + rejectOnNotFound: true + }) + } catch (_err) { + throw new NotFoundError(`Verification not found for ${id}`) + } +} + +// Force updating an already completed verification. This is mainly used for the load test. +const forceUpdateCompletedVerification: boolean = + env("FORCE_UPDATE_COMPLETED_VERIFICATION", "false").toLowerCase() === "true" + +/** + * Store an end-user submission in the database. If the record already contains + * a end-user submission, an error will be thrown. + * + * @throws BadRequestError if the submission has already been stored + */ +export const saveSubmission = async ({ + verification, + submission, + verificationResult, + signature, + status, + statusDetail +}: SaveSubmissionParams) => { + if (!forceUpdateCompletedVerification && verification.credentialSubmission) { + throw new BadRequestError("Verification already complete") + } + + return await prisma.verification.update({ + where: { + id: verification.id + }, + data: { + credentialSubmission: submission, + verificationResult, + signature, + status, + statusDetail, + verifiedAt: new Date() + } + }) +} diff --git a/packages/verifier/src/lib/did/index.ts b/packages/verifier/src/lib/did/index.ts new file mode 100644 index 000000000..6f8658697 --- /dev/null +++ b/packages/verifier/src/lib/did/index.ts @@ -0,0 +1,41 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * This module contains the logic for did:key and di:web resolution. + * + * It can easily be extended to support other did methods. + */ +import { Resolver } from "did-resolver" + +import { didKeyResolver } from "./key" +import { pkhResolver } from "./pkh" +import { didWebResolver } from "./web" + +/** + * A DID resolver that handles did:web and did:key resolution. + */ +export const didResolver = new Resolver({ + ...didKeyResolver, + ...didWebResolver +}) + +/** + * A did:pkh resolver + */ +export const didPkhResolver = new Resolver(pkhResolver) diff --git a/packages/verifier/src/lib/did/key.ts b/packages/verifier/src/lib/did/key.ts new file mode 100644 index 000000000..99dc89145 --- /dev/null +++ b/packages/verifier/src/lib/did/key.ts @@ -0,0 +1,52 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { resolve } from "@transmute/did-key.js" +import type { DIDResolutionResult, DIDResolver } from "did-resolver" + +/** + * A did:key resolver factory to be used when building a `did-resolver` + * compatible resolver, namely modifying to match types and to properly catch + * thrown errors. + */ +const getKeyResolver = (): Record => { + async function key(did: string): Promise { + try { + const result = await resolve(did, { accept: "application/did+ld+json" }) + return result as DIDResolutionResult + } catch (e) { + return { + didDocument: null, + didDocumentMetadata: {}, + didResolutionMetadata: { + error: "notFound", + message: `resolver_error: ${(e as Error).message}` + } + } + } + } + + return { key } +} + +/** + * A did:key resolver that adheres to the `did-resolver` API. + * + * This resolver is used to verify the signature of a did:key JWT. + */ +export const didKeyResolver = getKeyResolver() diff --git a/packages/verifier/src/lib/did/pkh.ts b/packages/verifier/src/lib/did/pkh.ts new file mode 100644 index 000000000..d28314abf --- /dev/null +++ b/packages/verifier/src/lib/did/pkh.ts @@ -0,0 +1,31 @@ +/* + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + * SPDX-License-Identifier: Apache-2.0 + */ + +import pkhDidResolver from "pkh-did-resolver" + +/** + * A did:pkh resolver that adheres to the `did-resolver` API. + * + * This resolver is used to verify the signature of a did:pkh. + * + * Reference: + * https://github.com/ceramicnetwork/js-ceramic/tree/develop/packages/pkh-did-resolver + * https://github.com/w3c-ccg/did-pkh/blob/main/did-pkh-method-draft.md + */ + +export const pkhResolver = pkhDidResolver.getResolver() diff --git a/packages/verifier/src/lib/did/web.ts b/packages/verifier/src/lib/did/web.ts new file mode 100644 index 000000000..1a784ec7f --- /dev/null +++ b/packages/verifier/src/lib/did/web.ts @@ -0,0 +1,26 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { getResolver } from "web-did-resolver" + +/** + * A did:web resolver that adheres to the `did-resolver` API. + * + * This resolver is used to verify the signature of a did:web JWT. + */ +export const didWebResolver = getResolver() diff --git a/packages/verifier/src/lib/env.ts b/packages/verifier/src/lib/env.ts new file mode 100644 index 000000000..060bc95b1 --- /dev/null +++ b/packages/verifier/src/lib/env.ts @@ -0,0 +1,35 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Returns the value for a given environment variable, otherwise returns the defaultValue if given or throws. + * + * @param variable name of the environment variable + * @param defaultValue optional value to return if the variable is not found + * @returns the environment variable, defaultValue, or throws + */ +export const env = (variable: string, defaultValue?: string) => { + const value = process.env[variable] + if (value === undefined) { + if (defaultValue) { + return defaultValue + } + throw new Error(`Missing environment variable: ${variable}`) + } + return value +} diff --git a/packages/verifier/src/lib/errors.ts b/packages/verifier/src/lib/errors.ts new file mode 100644 index 000000000..7ea1ff688 --- /dev/null +++ b/packages/verifier/src/lib/errors.ts @@ -0,0 +1,147 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ErrorRequestHandler } from "express" + +import { logger } from "../logger" + +import { errLog } from "./utils/catch-err" + +/** + * An abstract base Error class which contains an HTTP status code. + */ +abstract class ErrorWithStatus extends Error { + httpStatus = 500 + details?: string + additionalLoggingDetails?: string + + constructor( + message?: string, + details?: string, + additionalLoggingDetails?: string + ) { + super(message) + this.details = details + this.additionalLoggingDetails = additionalLoggingDetails + } +} + +/** + * An Error class which is used when a request is made to a resource which does + * not exist. + */ +export class NotFoundError extends ErrorWithStatus { + httpStatus = 404 +} + +/** + * An Error class which is used when a bad request is made by the client. + */ +export class BadRequestError extends ErrorWithStatus { + httpStatus = 400 +} + +export class UnauthorizedError extends ErrorWithStatus { + httpStatus = 401 +} + +export class InternalServerError extends ErrorWithStatus { + httpStatus = 500 + message = "Internal server error" +} + +/** + * Errors from body-parser + * + * https://github.com/expressjs/body-parser/blob/master/README.md#errors + */ +type BodyParserError = Error & { + statusCode: number + type: string + expose: boolean +} + +const isBodyParserError = (err: unknown): err is BodyParserError => { + return ( + err instanceof Error && + "statusCode" in err && + "type" in err && + "expose" in err + ) +} + +/** + * Error Handling middleware which will catch all errors thrown by the application, + * and respond with a consistent JSON message. + * + * Read more about Express error handling here: + * https://expressjs.com/en/guide/error-handling.html + */ +export const errorHandler = (): ErrorRequestHandler => { + return (err, _req, res, next) => { + if (res.headersSent) { + return next(err) + } + + const shouldLog = process.env.NODE_ENV !== "test" + + if (err instanceof ErrorWithStatus) { + res.status(err.httpStatus).json({ + status: err.httpStatus, + errors: [{ message: err.message, details: err.details }] + }) + if (shouldLog) { + if (err.httpStatus == 500) { + logger.error("Internal server error", { + errMsg: err.message, + errDetails: err.details, + additionalDetails: err.additionalLoggingDetails, + stack: err.stack + }) + } else { + logger.info( + `Returning http status ${err.httpStatus}. ${err.message}`, + { + errDetails: err.details, + additionalDetails: err.additionalLoggingDetails + } + ) + } + } + } else if (isBodyParserError(err) && err.expose) { + res.status(err.statusCode).json({ + status: err.statusCode, + errors: [{ message: err.message }] + }) + } else { + if (shouldLog) { + const [message, context] = errLog("Internal server error", err) + logger.error(message, context) + } + + res.status(500).json({ + status: 500, + errors: [ + { + message: "Internal Server Error" + } + ] + }) + } + } +} diff --git a/packages/verifier/src/lib/ethers.ts b/packages/verifier/src/lib/ethers.ts new file mode 100644 index 000000000..66c827c30 --- /dev/null +++ b/packages/verifier/src/lib/ethers.ts @@ -0,0 +1,33 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { Wallet } from "ethers" + +import { env } from "./env" + +/** + * Returns a Wallet for a given private key, otherwise fallback to key defined + * in the VERIFIER_PRIVATE_KEY environment variable. + * + * @param privateKey wallet private key + * @returns + */ +export const buildWallet = (privateKey?: string): Wallet => { + const key = privateKey ?? env("VERIFIER_PRIVATE_KEY") + return new Wallet(key) +} diff --git a/packages/verifier/src/lib/monitoring/config.ts b/packages/verifier/src/lib/monitoring/config.ts new file mode 100644 index 000000000..0cb2d39e3 --- /dev/null +++ b/packages/verifier/src/lib/monitoring/config.ts @@ -0,0 +1,35 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ClientOptions } from "hot-shots" + +export const statsDConfig: ClientOptions = { + host: process.env.STATSD_HOST || "localhost", + port: 8125, + prefix: "verite.verifier.", + mock: !["prod", "sandbox", "stg", "smokebox", "testing"].includes( + process.env.ENV || "" + ), + globalTags: { + app_name: process.env.SERVICE_NAME || "unknown" + }, + cacheDns: true, + cacheDnsTtl: 5000, + tcpGracefulRestartRateLimit: 90000, + udsGracefulRestartRateLimit: 90000 +} diff --git a/packages/verifier/src/lib/monitoring/index.ts b/packages/verifier/src/lib/monitoring/index.ts new file mode 100644 index 000000000..007d79594 --- /dev/null +++ b/packages/verifier/src/lib/monitoring/index.ts @@ -0,0 +1,20 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './statsd'; +export * from './config' diff --git a/packages/verifier/src/lib/monitoring/statsd.ts b/packages/verifier/src/lib/monitoring/statsd.ts new file mode 100644 index 000000000..fd4f1302c --- /dev/null +++ b/packages/verifier/src/lib/monitoring/statsd.ts @@ -0,0 +1,80 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { Request, Response, NextFunction } from "express" +import { StatsD } from "hot-shots" + +import { logger } from "../../logger" +import { routeNameMapping } from "../routes" + +import { statsDConfig } from "./config" + +export const statsd = new StatsD({ + ...statsDConfig, + errorHandler: function (error) { + logger.warn("Socket errors caught here: ", error) + } +}) + +export function statsDMiddleware() { + return function (req: Request, res: Response, next: NextFunction) { + const startTime = new Date().getTime() + + // Function called on response finish that sends stats to statsd + function sendStats() { + // eslint-disable-next-line + const method = req.method?.toLowerCase() + // eslint-disable-next-line + const path: string = req.route?.path + const routeKey = `${method}_${path}` + const namedRoute = routeNameMapping[routeKey] + // only for the routes we defined + if (namedRoute) { + const key = `${method}_${namedRoute}` + // Status Code + const statusCode = res.statusCode || "unknown_status" + statsd.increment(`${key}_status_code_${statusCode}`) + + // Response Time + const duration = new Date().getTime() - startTime + statsd.timing(`${key}_response_time`, duration) + } + cleanup() + } + + // Function to clean up the listeners we've added + function cleanup() { + res.removeListener("finish", sendStats) + res.removeListener("error", cleanup) + res.removeListener("close", cleanup) + if (statsDConfig.mock) { + // mockBuffer keeps increasing if not cleared https://github.com/brightcove/hot-shots + statsd.mockBuffer = [] + } + } + + // Add response listeners + res.once("finish", sendStats) + res.once("error", cleanup) + res.once("close", cleanup) + + if (next) { + next() + } + } +} diff --git a/packages/verifier/src/lib/presentation-definition.ts b/packages/verifier/src/lib/presentation-definition.ts new file mode 100644 index 000000000..2e598b15c --- /dev/null +++ b/packages/verifier/src/lib/presentation-definition.ts @@ -0,0 +1,277 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { v4 as uuidv4 } from "uuid" + +export type InputDescriptorField = { + path: string[] + id?: string + purpose?: string + filter?: InputDescriptorConstraintFilter + predicate?: "required" | "preferred" +} + +/** + * This defines the type for an Input Descriptor, which defines the information + * a Verifier requires of the Holder. All input descriptors must be satisfied + * by the Holder in order to pass verification. + * + * See more: https://identity.foundation/presentation-exchange/#input-descriptor + */ +export type InputDescriptor = { + id: string + schema: { + uri: string + required?: boolean + }[] + group?: string + name?: string + purpose?: string + constraints?: { + statuses?: { + active?: { + directive: "required" | "allowed" | "disallowed" + } + suspended?: { + directive: "required" | "allowed" | "disallowed" + } + revoked?: { + directive: "required" | "allowed" | "disallowed" + } + } + is_holder?: { + field_id: string[] + directive: "required" | "preferred" + }[] + fields?: InputDescriptorField[] + } +} + +type InputDescriptorConstraintFilter = { + type: string + format?: string + pattern?: string + minimum?: string | number + minLength?: number + maxLength?: number + exclusiveMinimum?: string | number + exclusiveMaximum?: string | number + maximum?: string | number + const?: string | number + enum?: string[] | number[] + not?: InputDescriptorConstraintFilter +} + +/** + * This defines the type for a Presentation Definition, which articulates which + * proofs are required for the Verifier. + * + * See more: https://identity.foundation/presentation-exchange/#presentation-definition + */ +export type PresentationDefinition = { + id: string + input_descriptors: InputDescriptor[] + format: { + jwt?: { + alg: string[] + } + jwt_vc?: { + alg: string[] + } + jwt_vp?: { + alg: string[] + } + } + name?: string + purpose?: string +} + +type PresentationDefinitionOptions = { + trustedIssuers?: string +} + +/** + * Descriptor ID -> credential type + */ +export const DES_ID_TO_CRED_TYPE: { [x: string]: string } = { + kybpaml_input: "KYBPAMLAttestation", + accinv_input: "EntityAccInvAttestation" +} + +/** + * Generate a Presentation Definition which defines the required proofs for the + * Holder of the Attestation to pass verification. + * + * See more: https://identity.foundation/presentation-exchange/#presentation-definition + * + * Note that, our input_descriptors works slightly different to the above DIF document: + * For our verifier, it always only verifies whatever the Dapp submitted. + * In DIF, verifier is supposed to tell the Dapp what to upload for this verification, and only expect those data in the submission. + */ +export const buildPresentationDefinition = ({ + trustedIssuers +}: PresentationDefinitionOptions = {}): PresentationDefinition => { + return { + id: uuidv4(), + format: { + jwt: { + alg: ["EdDSA", "ES256K"] + }, + jwt_vc: { + alg: ["EdDSA", "ES256K"] + }, + jwt_vp: { + alg: ["EdDSA", "ES256K"] + } + }, + input_descriptors: [ + { + id: "kybpaml_input", + name: "Proof of KYBP", + purpose: "Please provide a valid credential from a KYBP/AML issuer", + schema: [ + { + uri: "https://verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person", + required: true + } + ], + constraints: { + statuses: { + active: { + directive: "required" + }, + revoked: { + directive: "disallowed" + } + }, + is_holder: [ + { + field_id: ["subjectId"], + directive: "required" + } + ], + fields: [ + { + path: ["$.issuer.id", "$.issuer", "$.vc.issuer", "$.iss"], + purpose: "The issuer of the credential must be trusted", + predicate: "required", + filter: trustedIssuers + ? { + pattern: trustedIssuers, + type: "string" + } + : undefined + }, + { + path: [ + `$.credentialSubject.${DES_ID_TO_CRED_TYPE["kybpaml_input"]}.process`, + `$.vc.credentialSubject.${DES_ID_TO_CRED_TYPE["kybpaml_input"]}.process`, + `$.${DES_ID_TO_CRED_TYPE["kybpaml_input"]}.process` + ], + purpose: `The process used for KYBP/AML.`, + predicate: "required", + filter: { + type: "string" + } + }, + { + path: [ + `$.credentialSubject.${DES_ID_TO_CRED_TYPE["kybpaml_input"]}.approvalDate`, + `$.vc.credentialSubject.${DES_ID_TO_CRED_TYPE["kybpaml_input"]}.approvalDate`, + `$.${DES_ID_TO_CRED_TYPE["kybpaml_input"]}.approvalDate` + ], + purpose: `The date upon which this KYBP/AML Attestation was issued.`, + predicate: "required", + filter: { + type: "string", + pattern: + "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$" + } + } + ] + } + }, + { + id: "accinv_input", + name: "Proof of Accredited Investor from Circle", + purpose: "Please provide a valid credential from a Accredited Investor", + schema: [ + { + uri: "https://raw.githubusercontent.com/centrehq/verite/d1b97b3a475aa00cf894f72213f34b7bcb8b3435/packages/docs/static/definitions/processes/kycaml/0.0.1/generic--usa-entity-accinv-all-checks", + required: true + } + ], + constraints: { + statuses: { + active: { + directive: "required" + }, + revoked: { + directive: "disallowed" + } + }, + is_holder: [ + { + field_id: ["subjectId"], + directive: "required" + } + ], + fields: [ + { + path: ["$.issuer.id", "$.issuer", "$.vc.issuer", "$.iss"], + purpose: "The issuer of the credential must be trusted", + predicate: "required", + filter: trustedIssuers + ? { + pattern: trustedIssuers, + type: "string" + } + : undefined + }, + { + path: [ + `$.credentialSubject.${DES_ID_TO_CRED_TYPE["accinv_input"]}.process`, + `$.vc.credentialSubject.${DES_ID_TO_CRED_TYPE["accinv_input"]}.process`, + `$.${DES_ID_TO_CRED_TYPE["accinv_input"]}.process` + ], + purpose: `The process used for analysing Accredited Investor.`, + predicate: "required", + filter: { + type: "string" + } + }, + { + path: [ + `$.credentialSubject.${DES_ID_TO_CRED_TYPE["accinv_input"]}.approvalDate`, + `$.vc.credentialSubject.${DES_ID_TO_CRED_TYPE["accinv_input"]}.approvalDate`, + `$.${DES_ID_TO_CRED_TYPE["accinv_input"]}.approvalDate` + ], + purpose: `The date upon which this Accredited Investor Attestation was issued.`, + predicate: "required", + filter: { + type: "string", + pattern: + "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$" + } + } + ] + } + } + ] + } +} diff --git a/packages/verifier/src/lib/results/defaults.ts b/packages/verifier/src/lib/results/defaults.ts new file mode 100644 index 000000000..c9b8177fd --- /dev/null +++ b/packages/verifier/src/lib/results/defaults.ts @@ -0,0 +1,23 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +const ONE_DAY = 24 * 60 * 60 * 1000 + +export const defaultExpiration = (): Date => { + return new Date(Date.now() + ONE_DAY) +} diff --git a/packages/verifier/src/lib/results/ethereum.ts b/packages/verifier/src/lib/results/ethereum.ts new file mode 100644 index 000000000..7c315d1ad --- /dev/null +++ b/packages/verifier/src/lib/results/ethereum.ts @@ -0,0 +1,158 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ethers } from "ethers" + +import { logger } from "../../logger" +import { VerificationResult } from "../../types/verification-result" +import { buildWallet } from "../ethers" + +import { defaultExpiration } from "./defaults" + +type Options = { + subject: string + chainId: number | null + name: string | null + version: string | null + registryAddress: string | null + expiration?: Date + privateKey?: string + verifier_verification_id: string + schema: Array +} + +type DomainSeparator = { + name?: string + version?: string + verifyingContract?: string + chainId?: number +} + +// Structured Types used for Verification Results +const types = { + VerificationResult: [ + { name: "schema", type: "string[]" }, + { name: "subject", type: "address" }, + { name: "expiration", type: "uint256" }, + { name: "verifier_verification_id", type: "string" } + ] +} + +/** + * Generate an Ethereum-based VerificationRecord + * + * Uses EIP-712 to generate a VerificationRecord for use on the Ethereum + * blockchain. + * + * See also: https://eips.ethereum.org/EIPS/eip-712 + */ +export const ethereum = async ({ + subject, + chainId, + registryAddress, + name, + version, + verifier_verification_id, + schema, + ...options +}: Options): Promise<{ + verificationResult: VerificationResult + signature: string +}> => { + const domain = domainSeparator({ name, version, registryAddress, chainId }) + const expiration = Math.floor( + (options.expiration ?? defaultExpiration()).getTime() / 1000 + ) + + const verificationResult: VerificationResult = { + schema, + subject, + expiration, + verifier_verification_id + } + + const wallet = buildWallet(options.privateKey) + + logger.info(`wallet addres: ${wallet.address}`) + + const signature = await wallet._signTypedData( + domain, + types, + verificationResult + ) + + const rcvAddr = ethers.utils.verifyTypedData( + domain, + types, + verificationResult, + signature + ) + logger.info(`recovered address: ${rcvAddr}`) + + return { + verificationResult, + signature + } +} + +/** + * Generate an EIP-712 domain separator + * + * A domain separator ensures that a given VerificationResult can only be used + * on the given chain and for the given address. E.g. a verification for the + * Ropsten network will be rejected if used on mainnet. + * + * Definition: https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator + * Rationale: https://eips.ethereum.org/EIPS/eip-712#rationale-for-domainseparator + * + * @param verifyingContract registry address + * @param chainId EIP-155 chain id + * + * @returns EIP-712 domain separator + */ +const domainSeparator = ({ + name, + version, + registryAddress, + chainId +}: { + name: string | null + version: string | null + registryAddress: string | null + chainId: number | null +}): DomainSeparator => { + const separator: DomainSeparator = {} + + if (name) { + separator.name = name + } + + if (version) { + separator.version = version + } + + if (registryAddress) { + separator.verifyingContract = registryAddress + } + + if (chainId) { + separator.chainId = chainId + } + + return separator +} diff --git a/packages/verifier/src/lib/results/index.ts b/packages/verifier/src/lib/results/index.ts new file mode 100644 index 000000000..9efdd120b --- /dev/null +++ b/packages/verifier/src/lib/results/index.ts @@ -0,0 +1,20 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from "./ethereum" +export * from "./solana" diff --git a/packages/verifier/src/lib/results/solana.ts b/packages/verifier/src/lib/results/solana.ts new file mode 100644 index 000000000..7476eab8e --- /dev/null +++ b/packages/verifier/src/lib/results/solana.ts @@ -0,0 +1,174 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { + publicKey, + i64, + str, + struct, + Layout, + array +} from "@project-serum/borsh" +import { PublicKey } from "@solana/web3.js" +import BN from "bn.js" +import { ethers } from "ethers" +import { keccak_256 } from "js-sha3" +import { ecdsaSign } from "secp256k1" + +import type { VerificationResult } from "../../types/verification-result" +import { buildWallet } from "../ethers" +import { convertChainIdToCluster } from "../solana" + +import { defaultExpiration } from "./defaults" + +type Options = { + subject: string + chainId: number | null + name: string | null + version: string | null + expiration?: Date + privateKey?: string + verifier_verification_id: string + schema: Array +} + +type Message = { + name: string | null + version: string | null + cluster: string | null + expiration: BN + schema: Array + subject: PublicKey + verifier_verification_id: string +} + +/** + * Generate a Solana-based VerificationRecord + */ +export const solana = async ({ + subject, + chainId, + name, + version, + verifier_verification_id, + schema, + ...options +}: Options): Promise<{ + verificationResult: VerificationResult + signature: string +}> => { + const expiration = Math.floor( + (options.expiration ?? defaultExpiration()).getTime() / 1000 + ) + + const cluster = convertChainIdToCluster(chainId) || null + + const verificationResult: VerificationResult = { + schema, + subject, + expiration, + verifier_verification_id + } + + /** + * Use the buildWallet function to get the same fallback mechanism in case + * a verifier is not defined. + */ + const wallet = buildWallet(options.privateKey) + + /** + * Allocate buffer for the message and borsh encode the data. The + * verification result consists of a public key (32 bytes), a signed 64 bit + * number (8 bytes), and the schema (4 bytes + length), and UUID string. + */ + let bufferLength = + schema.reduce((acc, s) => acc + s.length + 4, 0) + + 32 + + 8 + + verifier_verification_id.length + + 4 + + /** + * Include optional domain discriminators, order matters here for borsh + * serialization. If all values given, should be in order of name, version, + * cluster, subject, expiration, and schema. + */ + const layouts = [ + publicKey("subject"), + i64("expiration"), + array(str(), schema.length, "schema"), + str("verifier_verification_id") + ] + + if (cluster) { + verificationResult.cluster = cluster + bufferLength += cluster.length + 4 + layouts.unshift(str("cluster")) + } + + if (version) { + verificationResult.version = version + bufferLength += version.length + 4 + layouts.unshift(str("version")) + } + + if (name) { + verificationResult.name = name + bufferLength += name.length + 4 + layouts.unshift(str("name")) + } + + const message = Buffer.alloc(bufferLength) + + const data = { + name, + version, + cluster, + schema, + subject: new PublicKey(subject), + expiration: new BN(expiration), + verifier_verification_id + } + + // BufferLayout has no types and causes a lot of typing issues here. + // It can safely be disabled + + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + const LAYOUT: Layout = struct(layouts) as Layout + + LAYOUT.encode(data, message) + + // Create Signature from the message + const messageHash = Buffer.from(keccak_256.update(message).digest()) + const { signature, recid: recoveryId } = ecdsaSign( + messageHash, + ethers.utils.arrayify(wallet.privateKey) + ) + + // ECDSA signatures have an extra byte appended to identify the recovery id + // https://bitcoin.stackexchange.com/a/38909 + const r = new Uint8Array(65) + r.set(signature, 0) + r[64] = 27 + recoveryId + const signatureHex = ethers.utils.hexlify(r) + + return Promise.resolve({ + verificationResult, + signature: signatureHex + }) +} diff --git a/packages/verifier/src/lib/routes.ts b/packages/verifier/src/lib/routes.ts new file mode 100644 index 000000000..3afc01883 --- /dev/null +++ b/packages/verifier/src/lib/routes.ts @@ -0,0 +1,90 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { randomBytes } from "crypto" +import path from "path" + +import { Router } from "express" + +import createApiClient from "../api/apiClients/createApiClient" +import getClients from "../api/apiClients/getClients" +import revoke from "../api/apiClients/revoke" +import ping from "../api/ping" +import createUser from "../api/users/createUser" +import getUser from "../api/users/getUser" +import create from "../api/verifications/create" +import show from "../api/verifications/show" +import status from "../api/verifications/status" +import submit from "../api/verifications/submit" + +import apiAuth from "./apiAuth" + +export const routes = Router() +const PING_ROUTE = "/ping" +const CREATE_VERIFICATIONS_ROUTE = "/api/v1/verifications" +const SHOW_VERIFICATIONS_ROUTE = "/api/v1/verifications/:id" +const SUBMIT_VERIFICATIONS_ROUTE = "/api/v1/verifications/:id" +const VERIFICATIONS_STATUS_ROUTE = "/api/v1/verifications/:id/status" +const CREATE_USERS_ROUTE = "/api/v1/users" +const GET_USERS_ROUTE = "/api/v1/users/:did" +const API_CLIENTS_ROUTE = "/api/v1/apiClients" + +interface RouteNameMap { + [name: string]: string +} + +// Express does not provide this out of box +// Cannot rely on handler name since they are wrapped async handlers +export const routeNameMapping: RouteNameMap = { + [`post_${CREATE_VERIFICATIONS_ROUTE}`]: "create", + [`get_${SHOW_VERIFICATIONS_ROUTE}`]: "show", + [`post_${SUBMIT_VERIFICATIONS_ROUTE}`]: "submit", + [`get_${VERIFICATIONS_STATUS_ROUTE}`]: "status", + [`post_${CREATE_USERS_ROUTE}`]: "createUser", + [`get_${GET_USERS_ROUTE}`]: "getUser", + [`post_${API_CLIENTS_ROUTE}`]: "createApiClient", + [`patch_${API_CLIENTS_ROUTE}`]: "revoke", + [`get_${API_CLIENTS_ROUTE}`]: "getClients", + [`get_${PING_ROUTE}`]: "ping" +} + +routes.get(PING_ROUTE, ping) +routes.post(CREATE_VERIFICATIONS_ROUTE, create) +routes.get(SHOW_VERIFICATIONS_ROUTE, show) +routes.post(SUBMIT_VERIFICATIONS_ROUTE, submit) +routes.get(VERIFICATIONS_STATUS_ROUTE, status) +routes.post(CREATE_USERS_ROUTE, createUser) +routes.get(GET_USERS_ROUTE, getUser) +routes.post(API_CLIENTS_ROUTE, createApiClient) +routes.get(API_CLIENTS_ROUTE, getClients) +routes.patch(API_CLIENTS_ROUTE, apiAuth, revoke) + +routes.get("/", (_req, res) => { + if (["prod", "sandbox"].includes(process.env.ENV || "")) { + res.end() + return + } + + // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce + const nonce = randomBytes(16).toString("base64") + res.setHeader("Content-Security-Policy", `script-src 'self' 'nonce-${nonce}'`) + res.render(path.join(__dirname + "/../views/pages/index.ejs"), { + nonce, + baseUrl: process.env.HOST + }) +}) diff --git a/packages/verifier/src/lib/schemas/EntityAccInvAttestation.ts b/packages/verifier/src/lib/schemas/EntityAccInvAttestation.ts new file mode 100644 index 000000000..5c4bcb6ca --- /dev/null +++ b/packages/verifier/src/lib/schemas/EntityAccInvAttestation.ts @@ -0,0 +1,41 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +export const EntityAccInvAttestationSchema = { + $ref: "#/definitions/EntityAccInvAttestation", + $schema: "http://json-schema.org/draft-07/schema#", + definitions: { + EntityAccInvAttestation: { + additionalProperties: false, + properties: { + type: { + const: "EntityAccInvAttestation", + type: "string" + }, + process: { + type: "string" + }, + approvalDate: { + type: "string" + } + }, + required: ["type", "process", "approvalDate"], + type: "object" + } + } +} diff --git a/packages/verifier/src/lib/schemas/KYBPAMLAttestation.ts b/packages/verifier/src/lib/schemas/KYBPAMLAttestation.ts new file mode 100644 index 000000000..d841789ed --- /dev/null +++ b/packages/verifier/src/lib/schemas/KYBPAMLAttestation.ts @@ -0,0 +1,41 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +export const KYBPAMLAttestationSchema = { + $ref: "#/definitions/KYBPAMLAttestation", + $schema: "http://json-schema.org/draft-07/schema#", + definitions: { + KYBPAMLAttestation: { + additionalProperties: false, + properties: { + type: { + const: "KYBPAMLAttestation", + type: "string" + }, + process: { + type: "string" + }, + approvalDate: { + type: "string" + } + }, + required: ["type", "process", "approvalDate"], + type: "object" + } + } +} diff --git a/packages/verifier/src/lib/schemas/KYCAMLAttestation.ts b/packages/verifier/src/lib/schemas/KYCAMLAttestation.ts new file mode 100644 index 000000000..d29e9de90 --- /dev/null +++ b/packages/verifier/src/lib/schemas/KYCAMLAttestation.ts @@ -0,0 +1,41 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +export const KYCAMLAttestationSchema = { + $ref: "#/definitions/KYCAMLAttestation", + $schema: "http://json-schema.org/draft-07/schema#", + definitions: { + KYCAMLAttestation: { + additionalProperties: false, + properties: { + type: { + const: "KYCAMLAttestation", + type: "string" + }, + process: { + type: "string" + }, + approvalDate: { + type: "string" + } + }, + required: ["type", "process", "approvalDate"], + type: "object" + } + } +} diff --git a/packages/verifier/src/lib/solana.ts b/packages/verifier/src/lib/solana.ts new file mode 100644 index 000000000..619cba2f4 --- /dev/null +++ b/packages/verifier/src/lib/solana.ts @@ -0,0 +1,66 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +export const SOLANA_CHAINS = ["mainnet-beta", "testnet", "devnet", "localnet"] + +export enum SolanaNetwork { + MainnetBeta = 1, + Devnet, + Testnet, + Localnet = 1337 +} + +/** + * Convert a cluster string to a chainId number + */ +export const convertClusterToChainId = ( + cluster: string +): SolanaNetwork | undefined => { + switch (cluster) { + case "mainnet-beta": + return SolanaNetwork.MainnetBeta + case "devnet": + return SolanaNetwork.Devnet + case "testnet": + return SolanaNetwork.Testnet + case "localnet": + return SolanaNetwork.Localnet + default: + return + } +} + +/** + * Convert a chainId number to a solana cluster string + */ +export const convertChainIdToCluster = ( + chainId: SolanaNetwork | undefined | null +): string | undefined => { + switch (chainId) { + case SolanaNetwork.MainnetBeta: + return "mainnet-beta" + case SolanaNetwork.Devnet: + return "devnet" + case SolanaNetwork.Testnet: + return "testnet" + case SolanaNetwork.Localnet: + return "localnet" + default: + return + } +} diff --git a/packages/verifier/src/lib/tracing/index.ts b/packages/verifier/src/lib/tracing/index.ts new file mode 100644 index 000000000..ccb8d1c57 --- /dev/null +++ b/packages/verifier/src/lib/tracing/index.ts @@ -0,0 +1,91 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + * SPDX-License-Identifier: Apache-2.0 + */ + +import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node" +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-grpc" +import { Resource } from "@opentelemetry/resources/build/src/Resource" +import { node, NodeSDK, tracing } from "@opentelemetry/sdk-node" +import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions" +import { PrismaInstrumentation } from "@prisma/instrumentation" + +import { logger } from "../../logger" + +/** + * Guided by {@link https://github.com/circlefin/circle-iris/pull/79}, which in turn guided by {@link https://logz.io/blog/nodejs-javascript-opentelemetry-auto-instrumentation/}. + * + * This file defines and instantiates the OpenTelemetry sdk and connection. + * This internal guide can be followed to test the connection locally: {@link https://circlepay.atlassian.net/wiki/spaces/~394410255/pages/386170966/HOWTO+-+distributed+tracing+in+a+local+environment}. + * This should be called by using the `--require '.../tracing/index.js` flag in the start script, so it is included before all other files. + */ + +// Default to 10%, can be overridden with TELEMETRY_SAMPLER_RATIO env variable. When testing locally, be aware of that it is sampled. +const DEFAULT_SAMPLER_RATIO = 1 / 10 + +// OTEL_EXPORTER_OTLP_ENDPOINT is set on k8s pods +const otlpUrl = + process.env.OTEL_EXPORTER_OTLP_ENDPOINT || "http://localhost:4317" +const serviceName = process.env.SERVICE_NAME || "verity-issuer" +const traceRatio = Number( + process.env.TELEMETRY_SAMPLER_RATIO ?? DEFAULT_SAMPLER_RATIO +) + +if (otlpUrl && serviceName && traceRatio) { + logger.info("Enabling tracing.", { otlpUrl, serviceName, traceRatio }) + // Export to the agent that lives in the k8s cluster. URL is from the environment variable. + const exporter = new OTLPTraceExporter({ + url: otlpUrl + }) + + // Trace Provider. Here we specify a ratio based sampler, meaning only send a sample % (traceRatio) of spans. + const provider = new node.NodeTracerProvider({ + resource: new Resource({ + [SemanticResourceAttributes.SERVICE_NAME]: serviceName + }), + sampler: new tracing.ParentBasedSampler({ + root: new tracing.TraceIdRatioBasedSampler(traceRatio) + }) + }) + + // Export spans to opentelemetry collector + provider.addSpanProcessor(new tracing.BatchSpanProcessor(exporter)) + provider.register() + + // Instantiate and start the telemetry sdk + const telemetrySdk = new NodeSDK({ + traceExporter: exporter, + instrumentations: getNodeAutoInstrumentations().concat( + new PrismaInstrumentation() + ) + }) + telemetrySdk + .start() + .then(() => { + logger.info("Tracing initialized") + }) + .catch((error) => logger.error("Error initializing tracing", error)) + + // Graceful shutdown + process.on("SIGTERM", () => { + telemetrySdk + .shutdown() + .then(() => console.log("Tracing terminated")) + .catch((error) => console.log("Error terminating tracing", error)) + }) +} else { + logger.error("Tracing disabled.", { otlpUrl, serviceName }) +} diff --git a/packages/verifier/src/lib/url-fns.ts b/packages/verifier/src/lib/url-fns.ts new file mode 100644 index 000000000..b31c96f89 --- /dev/null +++ b/packages/verifier/src/lib/url-fns.ts @@ -0,0 +1,33 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Builds an absolute URL from a path + * + * @example + * ```ts + * url('/foo/bar'); // => 'http://localhost:3000/foo/bar' + * ``` + */ +export const url = (path: string): string => { + const host = process.env.HOST + + return [host, path.startsWith("/") ? path : `/${path}`] + .filter(Boolean) + .join("") +} diff --git a/packages/verifier/src/lib/utils/api-clients.ts b/packages/verifier/src/lib/utils/api-clients.ts new file mode 100644 index 000000000..53ca3c4c8 --- /dev/null +++ b/packages/verifier/src/lib/utils/api-clients.ts @@ -0,0 +1,112 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { PrismaClientKnownRequestError } from "@prisma/client/runtime" + +import { + createApiClient, + findActiveApiClients, + findApiClient, + updateApiClient +} from "../database/apiClient" +import { BadRequestError, NotFoundError } from "../errors" + +const EXPIRES_IN_SECONDS = 2147483647 + +type GenerateApiClientParams = { + did: string +} + +type RevokeApiTokenParams = { + id: string + revokedReason?: string +} + +type GetApiClientsParams = { + did: string +} + +/** + * Create api token for a given DID + * Each did should only have 1 active api token at a time + */ +export const generateApiClient = async ({ did }: GenerateApiClientParams) => { + try { + return await createApiClient({ + did, + expiresInSeconds: EXPIRES_IN_SECONDS + }) + } catch (err) { + if (err instanceof PrismaClientKnownRequestError) { + if (err.code === "P2025") { + throw new BadRequestError("Cannot create API client without valid user") + } + } + + throw err + } +} + +/** + * Revoke api token if it exist and has not been revoked yet + * + */ +export const revokeApiClient = async ({ + id, + revokedReason +}: RevokeApiTokenParams) => { + try { + const apiClient = await findApiClient({ id }) + + if (apiClient.revokedAt) { + throw new BadRequestError("ApiClient has already been revoked") + } + + const data = { + revokedAt: new Date(), + revokedBy: apiClient.did + } + + if (revokedReason) { + Object.assign(data, { + revokedReason + }) + } + + return await updateApiClient({ + id, + data + }) + } catch (err) { + if (err instanceof PrismaClientKnownRequestError) { + if (err.code === "P2023") { + throw new NotFoundError("Cannot find api client to revoke") + } + } + + throw err + } +} + +export const getApiClients = async ({ did }: GetApiClientsParams) => { + return await findActiveApiClients({ did }) +} + +export const maskApiToken = (id: string) => { + return `${id.slice(0, -4).replace(/[a-zA-Z0-9_]/g, "*")}${id.slice(-4)}` +} diff --git a/packages/verifier/src/lib/utils/async-fns.ts b/packages/verifier/src/lib/utils/async-fns.ts new file mode 100644 index 000000000..deacce379 --- /dev/null +++ b/packages/verifier/src/lib/utils/async-fns.ts @@ -0,0 +1,34 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Perform an async `Array.prototype.forEach()` operation + * + * @example + * await asyncEach([1, 2, 3], async (item) => { ... }) + * + * @returns void + */ +export async function asyncEach( + arr: T[], + fn: (arg0: T, i: number, arr: T[]) => Promise

t#NZgoxmuh(a0vP~!6$j-~HE+}Hun}u#} zyxT-x36>?AOTIEq%zWl>jZf~+gO>PVpiFM`g_)w`K%-x(SNhPfaNmdgL(hl&;kfCM z9PS4@mOmm`01y0uQ-@D?a}6?$9ki#v)RG3ucv6)XhoW%4rmY%J4i&5^lz|B96?Tr&JXl_iJKUAWjF7_X zAKhBW1oWu^Hi1v?23On6KE7}`_@jGDWUEVd<6Ou}%u?g+;`y~qF3K70clY5t3(uuN}37Fe7Wf+iIW% zS_Cv#hltSBF_)j~9D)x3Po@qV<7VjHf)!vEH8{P7ES?I_`j`VWm|R?=WGifW$W>#KMI0H(7BoqnEO6bG}BL&Ql|UnDS-scG}>)shoyW%-3&v4VO=kw6lwOw zdbK(AcbBPFRdH(9SXATBW>$>7JUkl^u}tpB5GZ0OL%;e-<5#mb>%yYcA~nSV6Safv z6ng*hk`WmKU+8He^s2F~9D*Xn#&m$g#Pp(dOat_?7u9@nR;GOvtJ=ZQc5)IQgV&vuVk8w5D# ztg`d2im~C`j4%M7YspG9fbNR)Txj5u7P7Nzg@h4fVVxG8;UEj(3tmPf`#X#*0gakh%g%WG@g^e>66@vSETLgSc{ z;pd9+d*MrJ$fk_0FMUs&T&919^38#$OY*L>1N}`EIyE0Z{Bp}GEijUJT#__>AK4Xm z{^iG@%{kVHmn~sMTP~W7FQ$zU5_!j4MuwF3Pp(a9hd8;;bV?s3+Fl6v3lCO-Zt+9j z*z!-(jxC2P6i-IUS75B}4@NrPWvmI%?tF6EltNK;E-#k1?p2MKe7xFcWTAV&vDXM? z?^pYYet$tfXxcYkom>Ss#4VhAJ6NRk>ap4jch9}r;}zXaR}#uS$)4fm=d>4Gwe4)S z#%n#n6b|5jaRmMy5+DwyD7CBT`{W0+<0MoNw8zML0%_Nv0lp(uw5wVLCb^C5AOi zk`^F(m5S~;DcasRGfI2R`?{2rHveNub;$1ZDtJ@7kHxEEzv=DN-R8#F-6z|6++AMG z2jKh=RbxBejvF|fBJ5ujd4O*f_8Dm0vGV{OG?`||d_p}a9!2Z0S?<`+m0@m3c0dvZ z@}eI$@VR1N+w-nBFW(xLpkvJL-D@bWcWIV-_;_dCK<_*^5p1T4zFC*{Jvi9bs-|#wL|XS6CF&)x)`9fI=hrk#~idl^cWTpvpGUk*HW8oX1%JMoe`p z6xnP6eMRSP6)=or03L{`Duj~l#gb6*!n%qS$v~sphAtGzw_ai~x$SKreThAN37RN3 zSaL=~$JbQtAz-&#Y%-&P_HNa}FGzW%WGo~HfXUV+{9*-0sfC3VYEQLrP#WpxT{`-4Vyf}$Uxi9{ zT1PA=Z_K2IV8>u-FuEfZFW!`&0k`Mb1_qGa+4LI9xwY47qk7|!a(4eX*+K`}lqY>t z&uWCjbpSipAGu8K)ZDiHeL5s~=k2_17Al((7-+K4Ter>iRrt;H>X^TyIaRkKZVV)FY=mKZN308j#(MVCFJxl&UwE_Qb{HvJWy4d>GSChO@O4gt z^-rU8?-b&NREhNr%A_KI-7z^F2mD&%b;vdU_zs!M#ULlwC-7l~(JhyL?0tT#%4v{< z9As3At7n&ZI`$Zwo=SxpJL>M*;jFEZ5byG^(OvI2Fo3XBLd}!gw3CU zAg!xW<^R>{Tsx3!-jThqnaLKHl7dJNU^l>|AkpPfv1HQTv1nmY#)`sE;i{;WxZ^zjMa8opawG&c#Af zMl`?FXtkR|*-KycHErlO=oS7;%Yg;3oqDd}JEg2%ENe$b;3$-FZaVls7VEtqj z%!ii%pVAm3ItrG2!Ym#9j9G<@0hyl(K&X2S#wSfgO7`uMZ8rfvE!j4V!oxVN38k%3 zurbirKXP*SDn&V$M1fI^gLzW}hhSnuCW?GE@IDsn<}dI6}AY27I@0 z7Z?9pQhh_Yuz?Bj9AtMc)aLx446oAsV#(afoFRz)|# zCRJ%uBDT8ZagkZ4eWf=ZcdxSQgS|n}UhcN55A&r1X7#p9yo8~*li~7Ir$;fUD1z5I zu)6pmLc|tPC;HZ^s2WLL(8D`oVpr16(h2xjf2*j`azEjMF|LMqml!?7`wgA9isd5+ zPKpqfS*uqo7YDoHLbL{B9HJd*&)^~`JRAkpF#cddL1m)5vNepR8Lk5Ay_43u&O)xQ z@2p@WiCjdIm##U9-NAw;DF6nVC`mo{)A|bi{Y1JA&|w5@RT8!6{T!QWaRcC~wA=JK zlXlECy3sl6$6Q$I@E^IxPdnwW4#961uLcQc|H#q&KD`|{%b!)vUtwq8urfQeru=T+ zn^H5sKn_}S@r=kKBSM?WTxQA71KI9-2AM++J3FiUK7R2U_M`=UyHr|Rc+?IzlX}r( z_w`qHs*i3XZy1wm%WO;XdRUXY?A5-wCp#?#46KC3exYA%pQlfYgv2>5IE_i)+ zUtEE~mA?=N4y5~uYL6c?-)AJ8^*r7_Xyy_;6~kL-Ca*E+X|o<0Pvfp;d)#c+@gCTB`7fUKQoF5WtoroLEyXr(9r#%G+1ysyO?)WiVGJKUSl7Twd0f8_S^RdeJs{;jQEG|aST))e0d9O`BzY6&I<^}!hovb{lV!SG;h z2k*11<>k?5S3|R7FBTIPZZ2hF^t_D;U#^k{5Mh(NWXxh%j${wvt8th{qJab|nks+f z3s*{tQ$mj7js_SPJhd)c+6Gf%4cRt4&c0sdQ2Ja^G+vOD!mW?A}gv18a_J95T&2S!S+sX#4gTJvoNx zPb@*A`Jh(@GN7l)B_c@htuGg0*IaUBjU_5t${9zrU=GarSc_@_1I~Vl!%`{XpFqGK zA)@>AHrRd~-Z^|xz;v1$zs{WyzZg8{TOEJ$#rfUZMJVXD@RL=2YDUMdmK=!smhWmx zsE1OPvjI5ZM>Ht)`?Lz>XsL-|%dI65F+1%0gpL#0L*U&PJ@|~0?)^EfNtqq?vxFGg zWjZN4@@qXzVk#Uj2YRVx8>vj;@AkcW;gK_CvFkcgnJ4>S%5t=|)XH=rWNnAkc4K<2 zwtdGEY!L<=P{`&}_th4uBZn7gpAX*N9-y5{g?&wvUs z?AL3Pl=?yiy{4O|cYH|ogYC56i>~|Z($v*(D5y{h2z|MN8 zLZ*0A)GfX)qZOJ;3uWqYn-*D(ou|hWpGS@%)T6#OATblzUEU&F=ktn{Z$!ZAiI;f7 z(7*rV&)kT&7~QauYUVVzCVrLG+GywxM!CW`SOJdu?cMp@m{`JPSf#NdgxS4 zalRfG{eEg3yuVUyMd$lel=qiZFNlg`_jh-}O0#SDQLb~A(fn)+wkmltfB4R@*Rw03 zDYR+RQ-uwa`D(!-Uyu9_wo|8B>9Fb4HB3fdKsArxfK4BCa4o4~A#|A|IGvJOueWny zg<+CU(aQWEGVhRQ?|eEgG^{i4N{xU!gZaaA5B`qlwU#YUXwa751W>8e85|I_XaH8y zTUW$!5?|nt!qC5rF^4EhUU!L;!a|K+OO*-4rl^9Tw4?^aDA`STxfc=cuy(&RQRqZW zaOqyfxnJr(0pprS6y4mKp~|#|pLe2;{S4k4w!@;Szrp=fK1lWWxp$67@wt(X&1Hej zyl|Apju1WY<4V)%s7+3x0_Udjll-9B@nF81zjo+URgsqS-{o7sj+}lN865VAT67br zj6;gVYO*HE-@^)s)ZBg(-}eB#(f7qEh%hZ^fROh`?piq$Q`5_W4cqcylt_A+&s?X* z2ZGvXHz494se}=$T&taUm?nEkiPfMbN%qFdwplF|$+mecm0cE9F8N>nWeF+~L7Ha1 zQI#kfQLY57Uk(4fb%4o9C29j;0A zu(?)lV&>${*LE1s8#IS2m!Pi^0?E)J@X7Hmou8()8asl__r5>(7<@DF+m#u?wc{&h zb}NqUF6GWnEANM|;r1!NZ|Rl@8do)P*0?@Tml-G)ONu-ozsx>^mr4I8*xPU9@rDJk z2O3ox%|HiX*m&(@w2@@{QccCE#*>l1Nhan_^(9|UIqoR(Tga^V?R_HqU{}(IvqZ+V zZoW=z-gZvpal;+wPK`Zj>iOPXaB$J3#3TF?Z%0;lS6w zf?08wM6l8kQB&i=s)}W!sn$ms9unWN0ksV$YWg)6U!L(OUcUWE`#fx4%GkZ`%eTJr#Ee7G+m1gvrnv^WybbD z!xz>}Roy~2%xWw`l|)(^Pd-kNtEFEo<;#knZApOrvOX+AFGVQ`vx&6{+&ea3)lQXn z*>qP0E&HY4>5f>>XXX1l5;C3K#WHa$H4O3{y{&wo7WU>S*1pOhyksTiJ@o#%9%-&< zl6rtTIt~_TVZL>0&++U<+z)Zy{r@J~RxJX*5xJ;VHxec5O4gIWgM#!i*7kviLsyF% z7&jVGKQiEOB7jfnudw@dElXJ8ylbf4vIlcax?Z>BD{&be-m6wV4a9nOH{2avtb5vy zwnyHyf5sqRoI;IBaG0+U@aP!kIjhz-KF(or&lo8FhG?r8EGlvCXwDWM{2)pg_y4|A zd;1go0ec3Y6ooScoEGT0yEjnh&;H_q3YV@7%pK$luqSFVq(1IVy(f*1JgER9o+N&X zu-`k`mtVAhDAbN*@8&gVVuwv$N_%FOw)Va+IzowUHpCg^=cxC`!;W41@bVw~ z{CsyKZF?sNW|qg-Wo%cyl@$qPcBs{CG$A!cZ!_wB<|loa-3CWGod9si%f7eIfge&=^7_$b;U&bCC4X0H98n%P%aM;UC9vmCknnI$WEa8{4BW4|wSnYylAcR-7SC5#3|`*CK+eGsZDW-5Pi4i&7G7_vB-6 zD$4ibXVPL#h4n9YB<->8OxCli+Mn$*MAt15Y?FuCn7_+Tlg@>qL1!Yn!z}jVR6tdO zj5fChN~xDAWT(Otn`ZXj%0POp7n~O7D#+9>61eq9MiZGHDmh#nA2X&0ak=E1_FO`r_f_nHM)JYny8T;r#-Cu+9gxq z{Pu~bS9X~ue%-Sqiwh5$XXXh1$k{eVb$*L_1$v%%GrN~ua7%%{Mf}IXn8DRs z^LbxB3l0JA&P~7t;GxsK^r!zy36`htZrNGuvS`u_J#}VF*EXN1L;H7_@8jgB>^|dT z^5V`CYb%Ite#$4uRTmHd^e=|Tu1Xw7pFORcd6}J4wfK7wE-6ct^rGGEO-HnVgZ}|$ zG}A}9+QbFj2UP8Dc;+QSj1ih~q0=@##wQ|tHfxtWl`|ylJtJkyt$ldgv{v;;Zu&ru z1bGaw#)guF)iTa5uVzJschy}*R|Q3nT3z7+VQ}YBpe}u!RO`D!ouEn71H@WU)+5XG zQH8Ji$zYXgr2Br)oMccBWp9*|&A{?cI%v2&oIyu;heVBhSR2y(!} z(lJIkihnhzSjIVLz8crFIu}>yKM`biKG)36BlYJ!-Mt)Ql=gv@$nS2%k&zY?sEd<< z3|PY6R}z_?mu=f6cJsVP+20)(Sc>k#C>mWVsm6Yz{^cw_-_N^W5Mg<+^}E+l1y$v; zpN8(YySYh8_k(;Ro|i``+gy5hdGeGhL6BZ1Sr;mDy)OE?R^9 z9aYloF$vT)Jxz5biLH7OsxU`t)~}+(7Qt-)#WZM zOa}z%1?l-^#J-++os!XMxm@XB_~nwvWcok>^Y!awwOUFR4*%360B#PNt#Wv~)_`Bj z&ub`{I?9KWy%we_;6g_Ep^%JFGtLXlDA?(boHY2}lj`}b!aPHUlsv~pbc9@+sRyYy z$^%ceb;0c3ETSf%8!!fFaHwZZ(7wMGZ859P5=drkza%zXrlKb$hqYll!reD2$dA*_V9wAE2Ia zuiUFcKnY}wLL^hbdQlUaL%X8nwAR~OB`^&wkV<8bUK*oEAe>`9LkK8ZJiSaaRY9wD8xsO{@ zf$L%Ls58@q8-L-W{^DA-aZ|CWW;<8eXN*+5V$Jljs|$o~64|K2Hj7D_mBFvYQ%;e$ zS6j{66RIcIJupKg7SjKnTXhZhj-?5c^VnN4CjU@Kqh`!5fTn*V=$=%6naY-;kHU2v z5HaptxZ6`s5sEU){M;V=|=6&Xl&eO0%jnsJ&my8_OBDNGFEuYeU(Prt@c3s3AxODxWL+=8cOZR zsq79Do0bh4BQA`L;+_oZ~qnGW3_I`-N<4{%pp_=_3W{~fsDH>T5{}5EFen)O78~S3C`En8VsxnCueni z(_lwB#fm5c=uQ&Ml@PhUf?>lzwouqX~yWsOrJEGJFmKU;>`{#<(ja$ zV4D!^xNqtf`Db>lXhSkWij<|>c>)rU=Nbs8K1{DTWY8N-DKcZXDw|rOEn;fYt5-A8 zkSS?gqjM)cRmqZXMgvFP_C@@PY|(x=;t&Y`A_e0ovbv<-H_88%f|P&XV(~Cm7QN<& zGaM0eg}}*TwOVHswY$|>L{}fJUwM_Z4hqd-W&^~4B@OS`#K-J{E)I|cye{7H*R?1A^OUxORYvdr5Rql zFMwOdhQt-(_QtiH4KwavM+B}}8G1tRkvs-21&u3s?*V)w6TK@fF&izArrKdFMnfSs zXO6lC`hoAUThrYq)youP3qBgYKq*-YC9+2|`H{k%yED;PhR~fqT!HYTFwrw`cbWY9 zF488ox~naUc9t`>X50kP;^w>VL2a;h8PL5Aj1xBr`Oc1UtaiX}VJ$sz$NS`ovS?>p zvstggQ^6L#3Bwa=``8Zyyc{)T4siVn3eXJ^^z9jSfLfMwyEcX(I@oU3?+cxkAR=TEw8cFqm*>4W{a@(%P;7`b*LE zON{zRtBU+o8#r34VmTJAG>sizhzTFNO+aJ8Ij4sJ!S|I{ZQS=lNg-OOxl*fks9-(A z;2F!6M66`gu+Z2DrXyG5%SU1v+;aecMCd&XY7~FpAvNQz&JfOXhK-;&z?divm%Uos z6C|mH-luL~j{760yJwGCn*!)9PxhDWwqo6QCIce^$H<7t?ZUK(kplr`6%n5G{?0o~*xfqOLtZAVi>Mr@ zz*|?ERJQ##b$RII{xH^8MdN#@K}t%WDXIJ}1B%Z>Eesa`LD2d9dOuZbcC;x0IiD@? zga(#M_ud_@zx#vM(JEg$7SGsTXdbfWJKZyA60xuzNXO_#Mo@7BIE(VCequ!hyAmkE za3%Vz2Zp_Fz~sHyqBc>u4+4IwmL{t&E$r^$bq1C(OLLe&r>FYr+wc)#O}l{0K&LU6 z5z%UX9YHT9EY4a)hB3+&iK)@8fO0ec`nJ}gD0*bZ+YsM zBZrlclK)9HG`M)?uRRGvoV4r@yb2UIz)+IC?8f`q&#-4Vhemj}vvu#wP#R9jUA!y9 zC#|A3*@Cb)8`9It-nK-#1_ZLu1#v8tShxbpU{LzIOHeF#p2q+@0NEG#Gi=s8WGF3& zGBA;d;EgkB9E6!6!o%g9m8$Ll|$TlJ1A(zxQ-vpdEdTW5K#s zdQvFf8Kl0bFk&W$`Qqec``(+CzyX7{#Ox=t+{lmJb zM)?kQ0&vjx9CVKeyoj6Ui&-?>dP(@T^t{8Pe%B=v1j3QOB0=g86bjD=ZZ{N0x>ZKj z4l_#AXkLnKk*i)2m?RcG6lC$#)NIa9C}>j``yMI?yxyi`i_l!HMGGlH0A$UdPK8Q< zI)?!%P8>bL^=NKLwE~n>FqSam2@)Y?IFZg>!S8HhHKjtPz><1rgZ_D-Iq_*;iBK!A zPAxjE{cH*GffH2VUdAtLR#z@-y%Hug$OIUFN8;E1j&3umx+CZpI@nI~2O@y%$970+ z2_Wu_lZgm_0*l}P^U6+^{8l-VN=}UN54kczbH|3(`Rp!>?cyJ=e`xO6nZDz(mYd%gObHdH?r!z{ zD^Vp*n!5W`YL-D*!b~pJ+fuUzrtS$hT^6%`SfcW!E}I}aC192>L3_cXY5UeVy)Mp> zqp7aZqodWNDT&akURDszUY}8$q3Epd27^JALPYGyIwk{rFgBXnK|qt3918L2wM+lQ zDFKZ_8`A)`DMPZd9$72^1Tn~RA6zu(WWhsFVI+9WDy#l&@jZ=!g9YRXm$lPc?Sk_cuRn4J4;1H+qT4egr=D2~1r^fwmbzkN(SG>3aW5;E z*1^7pMG@$mvwa+g^Hy9`F&A>-a{v0~SDn+$;nQaY16Kn2Gj)H8M~ZGryE$+5kQ zFDEILUO8i)V1LKC0*?w0Py5^)OTwXR==w4LL=WtfwJGzz%V67IjDBeG7=bJ6dG3`N zJ!-N?Pp<5679Kxm-Tf=2@MsChKG#`x$I^cSwkPh~lGEo2u<|{jIpe9(P%F8Yzdajv z%Hz8BJI%YhkLlvZufM6Tj^DjKF#MVFRo@GQ-zQg(joqa;jj>w_w69)$^zX-aMZ%h) z$WY3c$jG3Xb@$BM_5MnJQI>hfzPWt$`@PMe=y4N0IV8n(I4|#IiF1ja*|iF{AXn`! zm;Aw(C7o$O;!KsboK(oj#H^{xJY+1Folq&Ol~u`JcY9iXVfYWgg%&1&n9D^JC)WnZ z*ZD-ztkAx!hh`IIfZY7q!JRabHj>xfWk+16JM9r`fBH0HBtuJ|Dp!vZWhz{>nCkyn~CL>W5Odp3GyMVGXSmex|j;8oDTKUWpV8ZIDPNemY#W01d z5@(JSc`G4779*e?NfC=zo_*dO^i@;NPI*>wd+3%`+I>X@wcEdR;1%6027`g)ec?uZ z+TU{O5-0Tywv3>Fk6oX-hJ!}DlcBOmh!*mVPMNQLE&b9KvR__;bElNzw)lrl|+H2M|;DtxzFT)mjw;i7K ziJ7ZGj0JwJqdvwdUB0|g-HAINn-A3grQ|0F>t@Wf3UlZ@SQfBQV$X!{$Aq~#IA{sO ziPc=8xI8;OG1$T%sK1O|N{?@x^xd4%&yZc0nNTOm=P!Yzm}OWF6WQMM^@w~5K5QLJ z{)Gt#qUVP5B>g&q2m@JO%L?+^R)HmdRaUoJUp-bN9~;jLy(bs~ zw#Z+}**Oq6Pc87BqK&)!doxgeSYa%D)VCDVptCI-uFIXmaMpq0W&fZBrNR-<4b&vg z@yNtdzaQJ`0S=Tr<)nhLnf&VNbiEI+ub_%$sD|ue^xYdm!6X`b-K7vypw&rbeL`K1 zx87so;3S30IBQhV4YhEt^w@?_6l4at&7h7cae!OsNzFns`Ewf3);25G#s_1|AS;6p zc1*Atg_uJqDs8Wv|Ik|O>MCc5bLM|H*W~o{*83r=Ks_CsZrb@DL!B|Fw}9HbrBwlc z($;%*(k}+NcM~9|MKT=F#u=L%TY#(BlHjWbPhOOAQs*drjtcNkhM}?~Q0Z2hdTIpr z@(rc$6Vn?91FP4eXdi0dtH-oYw7AJ7n$QO0WVS}UqEp2Y_FN5f7&*&udZm!n9Zpn;Ewn zawXcO_C*+Db%G8oG!k~6sfXrH4^<%Wj)%BC{Ol(`Amws#DrjR?e?xzh}Gx#`juAd z=$-dYf~g!YyqBpUf{q+mn;lZon)iJ$yz)a6+fjC?0OGB8sd$=bg#wRpIS5M2i>5Az zYutX}Ge+kMm|k|8o^y2O3g`&h_OM*2m-?0;7Ev@vb86^-JwC5&5+`Jp;YqWFOAAE_ z)mR;fExui9Sk146IiT|Gf=q5Byhq3EEW(B&OfoZ23S+rb`MjFim4Rq$Xrzoc18`uA z`*M?6KB>%X@`17od0(bJ+`bb0=A?#+88efiT9aX}I8t!H=zxO*G!n&Xx1x^KX1D9n zUblgh96USVN8ZIyYUl93hchB~wVeGOvx!SPayaCn#iG-;Djq7U2C6$%L#80Se#3P< z1u>j=h`@?CK!)S;Bgx}ZPTk~K1aQ}KV;whTO01r!{E(k+T`T~a9q_nf_vyUYXq{-F z#n8hemO+{88uDVT1me3OZoSv+KEX8%Smzo%jlW>9D{%j&*Y3(ppHyX0(s(`5%5=e5z{+7O>`l z6FcwoZfXaxKg>xj^l(G4Dk9V*iqzS)S@kU_fJuK~x|5;$#a14VdAu^nU^u0%bPup+ z$W^49ZGqg$+?w?fTDHL54R#C{o%8dr-729WEqrA@o0OjVCVwWq@ohWcOAMrrEw)C^ zEXQomX8k`zy?Y?jd;C96I;m4}I@O7C=^RQW6qW0&PA4Uy%Rv$A9F??Y?qh3~oa$7f z2q%}Vh!t%s%wlchbTV>S49jMl8rIA#Y-Y2q->dWae7?Uw4R7<_`}KM~pO5F`at^dO z>v%@t9mD!Qe$+3nxE~~AB6m~uh-XY@k5}8mKu8np?&6ja}fvc}}lcn*BBT*eNfq@(wdw(YRcBy-$s(cpI$7D+~2s8sv=U;k~Vd7qL)6O#<)=1ouw z@75I{0tOd4n`CCzpXFdJ(T?h*f~VWeA}KRU4Hk^K)n_ar*=p#=laf3iY+&o~f0wvc z()D?P8N?mml3D6R;`fQUTKAB)oj}vDk%v7k~FpWH{%)a39MF1^cPilaGJLI zw-h!fw1T-$9a`H)Mn^`&G1lMNDe472?YS^uA!LOpybUD@=f$-H&-M@S9y}GsC z2ZO(|Afef)9>)9ECD8SBl1juG{dl`D`ips+aHtd9jl%aHVTMUpM-i<%f$T? zcSAQ$sib)~c-kbc`Fx>Ft^+2DR=eUa3{)t<`C?cQc}{I{CIqyj4I{o5UY%|1Zn5l0 zFcehGqf8`xXb(;Nd?Yz>nb}jvS)EGpP7PUSmbm#Dxes}^fcsfYmY)OQc9_So)LS>5 z2l%Dh@$3+Qi6VoM+%dxi|EvF_eFM#$6kx1AX8&=xfELco415U;Ip3|r0Yv$7j!CK! zCVh9*m&P!DF_F{1o90NT%oBiH7lpj#8!`b^h(%{%(qEQkTYH;5vfZcTEXP-{V={~z z$>9~nl+-zRP3c>K3OHE}q0IGP{}kcy(g9q!kwuo=zni?we*Z17HHwZDz<*_4{9-Z& z?5=v|>^3D_!Cy(Yg^oZtzvI?QQ^vtWSZDmBB?;T2LgFfvHS#H8_Pty9$H-2#gUM)8 z?%C0iK%qto3NB>$;}o9oYD0=lFjK zW#X=nMRY|UUo7nYS$tlmW@u9!I?>S}XD)lMz%an+2#-(c56#(`dz| zSp^D#lGd^tyX^RBgk!R2+_;<$%D2U_HWta=R`xEgn8^wQAd)q)fwLqMZR3XVMbz_o zv(Y-SwDCl@OZmvzyiBk5UcA=I{2}MEjcxZHQ7s>-L+JD^`9;pVQE(X&rqrPH;$yjM z&Te&#Ex>$uzQbavB=6u@=?TGjI0MH46YZb?-qfI*Uold@HopPk4HF`swgQx&GRJHWuQT?%X&# zgZBg_ObB*T_4_AvRDi+;fe}j7NhBX=R1G0b z)TM|&8M5j{|5f5OZ?hVY=9k|7!sdyV6D4A-Kh{MvsaG|4?fg|+S{e8t)?G}GI~rLQSG9aW<_kjD@))tE~g@u-C7i14AJmX#&`Z2bzd^zsezwk z1tT`~EvmMs59;hL+Cvy=kY%OWi`NnVscamMylNW32YM0;`DMpMq>oa-Dr5EZ<@ zH0*tv928^_Le1se>E_2j@lW$kw`^gcm2)Tbdi>}L;O*FMqIQ6o+o*e%waRDhiw*^o zOUW})U>b%kdX z7R{i2g-)25UU(QV>42yB{7Uld{(+klksgk4K|AZk_tTF2)BM+u+LXK{%d9``Gk*RN zW0H)WE$aKeh_ZP~IXK7bM#|n6@f+&LWWP$bo^o*@4PR0cI~hK(fgz8dP9?7&QyueH6YmR@y(-hdAm;2*-{e>+QOjbSymHy&R(#CWXyLApV9=dXgZKBUKKA!su ztuKs(F$Nh5TxlgdLVxnkSLLWKSGx9P0)M*eL+$qm~pU&BsoT1@d`r%1h*Z_$amj;+`*9~AYh(P>) z-<3S2nxKFYAufVAQvUG#w!p>DIYO&X9tHjfd$3DHukZ)rmu-#q?BW~rMq7PJaoO9` z>myOdLXjX%{B~}e_Q9n^xSL6utZ8#^4&^jL1?h&T4p7LYib|$J3>Ta)7~0HpPE7Em z7Ew}lKn_=|*u`|Im@GI>UGumAnlm42X2))3$5MCZp%O3RZ=O;koEqTWF`W#fi*fDw zbB?rQ>f7*hyk8ZFz6Msr=O@+e1N(W~Tl3JX=IwTtC-3}(=H5nJoC}#7AU|yyoiw-> z8?d~!br(Iy;hjw_r(!xub}aM}2{rJfx5?e5ztPBt`0j_yvOlE|lySF`O6$iJC{N$r zS#gzPB?l2}N*EYcs_My!7&SwjnK~Yf8##7Zmry}BR2BbLFw_QdH<8*6PrtJ=BOtqL(%jFF6)^q6Q?@X^`O36FwxOR^*D=zaI zFmj$wE!UnbL-MFi%qf9T8$Y0W{%$NPDRx-8STfNpXK!4q&m3-J!{t1rf4+zpBX%Ng zkMnkXF{(4uCh>^Gl$?7_r%7Z6CKZ61o)Im$`E^6oWuDwD#&N}GoeZJi3a{^P4~pAv zYQNRWA?NRf#HId(seYJekQT=6iqbiY-VPqP#GfMLYYmf>P4koru}gUCr6-bxvxOXM zD;tR|RAsX|@{N;iDiY&D6{HDR;)g(#K{6uHu)(=CYgZ zwR!R}Vo+3!IG=B3BkfNy;&fvC#i_=~%q$oWS7<2%Cl+h)2|Uls7FwbO{yF{qr9%@6 z4Ge>Ot%LkAFxbTH;w|u1yaQRclXuSN1N*~W;Qu(2{PLPRUc>8Ve1IS&+>$fdSN17Cx&7ByrSGF7lB%Mu^-8&mguT z<7+O6zf(@R?T(H;(%5j#^raf$Q%SE{_IW>n^n=C5bwhh^MiI^BA?xy$qZnis>+ zLNw5mV z?MxE~Ax4 zKa^HouL`-dYqWnW`6O}kF#g^E4LBXADv=n2Lq`V2`NK2H%KK;E`()TG`N4fIHU8(F zDdpnbrw_#MFXTs1j;o!+MqiDq>yLTe4Ke&Pdk?>})mmzX_u_Q5@9^3Le<0E+#Y6-v zv}FHq`mwPle1aisjE8KWyE89dVP#`sX)`OR@wl7W$+l`;=&HwN#W_l-Ag5^}HMF^%sQw|T`8C@kHhr(jC z<`2!EOnR;DU0lYaQIMej_(&#fi&vvhAq3T>5iI;I#hz#*HjBxu@V_CC9CBfG>5TO9 z^gbP!5?t3~{V(~ZNuflZ?&y#1z)k^3bl01lCY;bpzSjAX+wosaqy}8{6_7>?%#x}v z%)t`BU1kev{(Jx*UZ|gBj;uZTv_oT~8jaN%ZPsr%78MVSqW`DpEoI^fIWO03`gzVu zDdRer@x;2ml2kI5*bMkL=>N z0BQJF8wB2=F86qM&+mpmn{-_!Qcg?AA)c`{nDFn@dFe(N0Es{I-}>M2N?v%%?q)#7 zDjCI1)RNbz+7OXqnU&Wk^k}M|+l9@~qF7k55O}(ZyPDX)uD(sD&CqHG zSf^6q2@GYd>*cE!A)+&4#>u~kwV%yK6zZT#7wR#gz$hq1jXG{xTbHHMg0aT>&C_H?EkaQO@k${rIB)TntU`9gAdvFwC6S z6DsjcIx25YMtt>3@#sh9#vFQHAph}G4WuFeH{Im{1&)Dp#yxOeo@(IrZWaK{)x|C}>BKo>fJ>;-PnR8vIo z@|Ti$+2oqoCJ%8T;q~*y9?W7Rp-`_ghIqhz<>xiYj44VgWlgCP7lf@A1p-IW$4M3c zHVg27Ea|W{Di=;xDwMh`3@8u|ovsV38;qbwg4yE?;&K@)v2RZ#`%gc$5=oL^i zLU=pw_U1n(HMF0-F+^euLoNUdHl2%x{qjomF+*cbWh?pDAyh7*E^(+acj5; zzQVJKfk~5PF?J&r7QJ^=6Qz0G@#Na+lHe+N?Xe^)=PRMmou~8O_xQ)=s6V;82QCj5 zWbV;$yJ`$b7VtQKbzT!1cD`}EK`sssC!FKY#p{oSC9c6|g);7Sn30$4<19cu6PmmI zQ;SQoC@~C#vw@!}7TQD)mW*HI55cM8FtP^bjG@>)a6~zHb2OOpEc-vZkE0@ttkAA0 zr{GBnsrY6Ty$|qIx}MN)oL-gZ&H1#$gG(0pR81NYthZO8Kb zuFu9B5Ol0K_uGh2V9)uLG<@b5GKkV<42}X;%EL#KJ>>H$z4?rO`bh980j&#HrZ>uO z@68d=vp&LgQq!8V#*bD5*;K@^q zt6w!K#Zu$GJpFXPW$2jRU}^JYmoApwI)e&E*pK1p-AvVIa8jp-Xoa?~j|UP)p}qp?SSrE2nA4 z>vi-CQ+%f2i%Ajd!`xcN=%m;Ps^q99z0vSb=b4aw_ODw{y!>K9EeMTSYJy|jZ7kwr z8Ih%j1H{PJqyI>$-DT#$eI~EmWIy?eA(%JTarCnhz$H7xTYGP23 zEu;R3Fmj=Inu?!O%(l$$9U09n2!RqVnS!Ac4HADR8d)F8RWgfXqUY+zW4yolx$y2G zwzYlsh{T3=WIB8AGfgnH4`hB&5`_JCZIbYN9mLr@Z>f_x(=sXluMI(*aGJVFQ0L+~ zfW#E!+=Z}bMs%nzCQhU!!KYYG+6lVKSp4_9jsN-6|BqLe$qq}{^jF}p?+QH%R{}nS#%RB{S2vYV z!3`Y{YbO;iM;lLfJz)Hb+|2NS8x$^jvZ5f9S@mOv{3`k!Q~upShsDp^{8l8KFDFD) z>d~nvy&LskLq$^yvYtUnt-`$V)ztHT`{l~WXHVNdR#d!{COX)xD#!M+V=7BLri@=q z=5gEsQLBtfPv|P08pOK94fsN-Rf4F3We4}Z%{sGa##??bFUKa`{DpP*N*Y`>%i^4) zh~Yfp za!U>Npu2#hiz2js*cP&G+~jk_y`Dqn&=6tEpk{~>O$82w!X{?LaFHs!S^rtW`=zi+ zoR25eax*>sz+w8-Y%%%_*c@I8#T)GotdkKtqo(DC3$(&x^@6enma}$q1&EZF&Q+f8 zvGDqo{@J|A(psZU_Dv~Wek|w!tD;0}M2=P7My;BFx;~iWTrRhJmD;{#L$m@sc(9%B z*ib*UQqIAl|0|`kPo>I`GkP2;@MF^Wicz!dwn-mV4DmBNCgmEOp+H1{a#!tMj_odl zN7MAtjk61R+)(D(eH#`9WSER5E^U+K>90OaWiM*^U2u^TgpPK-gW;2k1+XB#zs2UO z2nGZeumB&F2QldtRMPlbla3BOU@e%Hm#_Q>81I*zbFL$f@)7{{8|11}*jrGSd&8+T zdJD2DK8xhy_PKQHWy&=t$JH;dn=Fi6GAXyqAspZGzst${+yQd27M7(c2vXvny774x zSIV)Xy}IIs*YfK+sn=1$*{LFpyo)G$3ZFK%;VdkssmG)}>FyqBPA-0#8QJ~N^@!ir!uOGhL%V|g zs&UQ>jMUExeWY8vP)Sl^^t52Uck*f9>^rUBr{qdsIxqv!Bl$;Cj#CDNVk~Y%Fg_*@ za*eqb2n+tcHyWmfIbmCTYa+IW6=r+PvE_7ws3o*Zp9iHoDxqIx4e*fcx z4#ewnw{Oj#w3+9caR#J};btpwowzv41J*V||b+U6dI3_+V}Vh)(lMVt)*<44p0i@Mkxlhf#66f(MiX zGH%dt!m46fCf%8Z{}|-<7PTkD-Dgx%vlD*>((Og0o{IXkUhI-5X51$0|@bn>4LH*EVNmZYduk&|%zqy)g_%}`U+x3lhOhZFK z_y%M|9hP^1STiUn6$|OdRq=14&XycNtRr?aMJQHFd)jaPTTKuhPDu{;Wv$`1**&Jx zpUTfF$sB5tUKg#S&hq#F(I|(@&VfP@SEh|l=ApF7Z;8$`6)%Sjk}K{*l0vXh5+fd^ zj*U0b29$a5m1(>7Q>)P{|EhLAZO>_rnHB@FA9qP)RN0b<{58A75_KED_i}Fk5(C z02tTl@^$u~DF z(ryhJ)U;m~M2cvlIMlh)4`lqzEc|h1iNz9g8j?LMWyy=^8%+fH))FxUH{vYQ&9VPI zh2(M7ru|=sy0E+L-7t@sMY^_PMO4T{Wo;p;|c2uNJAPu4jHp|8m2*rp7YpC2d) zk0!Hz(X*=KgTNfaWk4Mqg}Vv;TLh1ZT6Ngub<>W$D{~9)23SH~wsq(%sD1d-EK40r zHtX#aniU40dNtV+&s5a0{%v%$vO$4VLOD<+5xN`4@3gR@znIwW(xN8rHxDDQ;RGiw zV|UXGFUWZ~dh{yP73(eiqfJ7_746>SvVCDf`E@ciyTE)`5aKgcCg?JXWMkw(lm;93 z0mpW`$udXY;bdP9PWvr>d)=nFo9W-oWk2yuNvl4+j&>^gV98w9Z%FL=Y1_AFsqk+H zw(gR3v!f#pPB7P1PBh6kxFT;zpeyHn^Ank`Zzf-~s_p-<^cz&MJi@IOxS0rSnKHWR8 z{pig5>ymIUtC8R7vhic-bI;i@N+*dot01+MK+koEw86o8dNE^neBD8<#`iPjpAeg( z1Ers{P$3n*;#K><@k>~(4_ce8dt<)AMXO>yjkY5pQSs?lg8)V1ajUOFdMjc`6S zCfHEo=@04Sp(VwK1MBqR>3kzfq*L*gWgqH(d$DFi*k|>VK;Pu>Y9C}UH&^lle-@>p zG2)2C5CZ0NhajH=X_h7m(j!R~6xN7XLWw*78$&6mE&`1X?tZfn`9`$n^S|E%z4|}= zB{|6NHV0Dg#JmoRfRarW?4 zIb-q0)wBZ4!NP~9(gcrl0#Cl|3WO(t%dXnleQx`a@O$Hhbkxv=GOCc4POUmeW7L*R z4!fw3(@uZZ9>@E-RloMKrgCof)Nc9R!FKdR@zL@2X4ktUn_V#_PdCu)dn|LIw755% zo5!MMb~YJI+l-4JVz#>M+Hi9-&vhhmU*7CLZZ_+_B|omJDMJzu{8x zO_AVOD1w$AAtv9hZ#KYMaR)7ye6W7UK7X%d?RnK`wM|G|z>cm@-PjiE({bT+`%x>zNgVLb(tW<0gaGIvjyA zG3Ic=AzQ}$oI_!GPV_PXtMmOx-QvEfYNGpT3bW)E%CPGYZPi;dj<=tBB8xyiB)iww zn8Pd;W5HfT(lc>!1+|TenwyuNv0xnKCPkhQ0FlOkXC0Q8?VxU4{r|EQTm5WwNp1QY zj&nT+B?Z5(&kD+7@${a-@Bd<3_dw7F%cr&+YrT7`FQkaB)8c~E_x4`B?Zo<8S@O=T zFlqUQ%i}t56(TBC_W_J)Y^k<*{jg*(2Smo$@n$y6h_%&b)`9yzujfpw4_do}iqX6-?{(0xBnD zRXr+F9K-lQNeS(Gy2^X;>f90gl>FEDfK2HN8%03bscPvAtLLqpM*4RlS1I)uNoEyO z-kg}7C%Zo4c>8OMnp0`wTKT+~6;k~>aMdhdv0_x0<^Pxrxfoo)>V)aQy?1-%ONd#f z$3geMlgLX=NvoBZOu>|rZ%~|dS+wD$&E?mHc?|4zAA8Qbl(*NCsay_A?+*eEt|@az z)$E5}I&{)qZ2ppLNK=!TB9$YLUHI_pljQRGk+}azrYhE^O+7f9*cT3v zls1kTB#Ch8-4DiB>IKkKA2Lhf=DmJrWJ#aPz7kT0T}QmlD2vk_cr3tCwLbG-@9=u# z0yGd^)ef)HXvc``eI=JJESGcvs^9s6{3Q>!h-WirD@cVSgVtvfR24 z^@N}au?3m3o+XfWb1TUji@}gN>RexEs-D&9?EUQqb2CT49u{YFK&Yk9yZy>){4KYx z?mhH51^t4jiA6}Jyj)@@bob(zn?IC}Eh*CZMllMRa>Z^I77>RLxmj8Hjiv+AYk}2S zfZ=a7B<*wM)bVHs$TtN@Us`oh(Y5pE6CPiEysF|M02D-rjup0@AdoMXVO>kkzOj0Y z=kFHE#P!Gn=f~!MbV%1mB(jgQ7rR>SUAl2Blg$F%c|;bI44`-a1!IWgLu!dDt?>kl zQ8U*o(jgJMgjPom99+1w>Y2r@ikyZ zKR4BLp!qE8+W!N}%(w{*e3ODZ4NE)&eA{P@DMuo3JfI0Zc^UQZSXQF8J^G-c*Jh~33r zSO*Htpqb;R=YV>VN6aD)#{v{Pou^Z17efw_emxS zn15So$Xp4Zdhq>^=ikjwu;0Mv!Xo;B*b5S;fskcoMf17-27u^A0QD-#Jt zA4hPZe`iN)4d6|wKUuRcXAwZ+`#WbC(D~WRb(1?1PnPTQlXBh}mQITPdPu9i6+Wr2 z7?cnAzfdOq^2cx20~cNb*MnHW^HzP*t;I5827S|XjMzYnAuGo)1)F z5gCl@gz;||eV9qgxtB8xj6WZYe3$8fB7RE-R>u+ZNaSlNDf`{kAQ0;%WD0i;DAT4$ zjnJV!mIbue<4d2R3V?Stt zIDZHq6JzLL3T8nEuH2CE9A2|+{^ErNG|vD2N@rzdx*Wr-hzjAbNaT%Y&~_O>&IfXH z-%EKz`(}n{fYScOWKMxLuGb$+_8KOdF9v%l7-ag3UV3XI^;E8I*7z(a=VCj(WP2Z_~R+|Dp+}OS(<%;={5%g8l9?4*1a{ciE$e#Lvsj;lm8tMW$Gt6OK z>VTvL)vJT14-TaE>KgW*KD^X78r9^z_^e4F+iywhXac8FI!@h8=~kW+3yon3ozVgm z(8YRJ2YAwUg*D1jb$it5JYnx{+^vXT5SJsaFf1(nW_zF|-crG>-eg7;#-)hH!s?Ad zXREi)9hc2hpb-fSWAOW%l+)AfhZ}7S$r%dXa&0NKQ;LJm{{Z7f-ays?WEO)med1$ewuL zYB^SQ!1a(EUk=W64u!|M92UJPV@5voNt>F^{j6OWY_1BvsBIJ<;Dx19`CS-ofU% zLE3E2u1I$>7tA;11Ur_pib*bHgF+1~L{N=^0fHFeLi)s%xTr~R{0HpN$fDLnv>7L) z3ZHBWj1%B>7pj1OOhAmG&l%6tRmTWlYeM&(cnNshfRmIAX|ugZ2<3(r(Y0cjv&kM4 z<$U5ntsYlP;pvPt!|#2FAtV4yxDKMachdJ3&A`8a9fN=WY3tme5opGKD%uJ`AkcIK zhQ_M|pL&XG17Zru&wN-pBnwNgJ3LxrQYgC$X0eUUsE15zF~ zm8@B3GAgy-DuEo@u+L_Z`_48w{&rujKLWCy0;hOlj4_d)fN2-0B;;un&bdxOd}R!O zQQYUe0&jgIByq!)$HglP)>!zYZ7d(CCYLDq@~ZKOCZU7t?V#aLRMMCs>#T3iTBord zpDn&gZ8rFn+?jxs?A#Oa6SNjNC5#djsdE%+UR~N*UGHV(_r+wDwZxnAHnV3(;!;V| z#ld`(G3IJKRIXd-2paj`O8SyLzq%*DqfM7=<+_8FN)ljSNiZ%IM)^XAy-oh>exuz3 zyO$iB^H-bwG&7(wik7VRi5te$W&R z&pHcFxD6N3qP;5!M3S)s_H=ZG#f_Q}kKPm>cgE<{gDkr zA+=1CxBbZj?=YKkvd?G#uo#OFpCsN>=LqXS->48FOihWXE-vfZy1zoCEbEL$!yZIU z;V>_L+q5y~N^ADJ(R+CoK6Vuux)mRra=GYJ0^E!Y2k~s;z3B3BiS{L7oG*h__6NQC zk^8^TOn;-5Ck-3+;6+t-_lq_O! z7WO~%lQj2a@F~s-3cz^fsV5FcQ2Row39!HU@vPE|A{j^1+}YX6d7^6fc%PyuJRl~B zfh9uY2Aq%;1dE8P8#IO@qb~ov5LcL&VWs)hYL>rGtqAdCQ8+NBkCFr)!cGk>8eh`H zH^P4UcRikXfn3~jXRJQfbR!-AjkS7}k6B?(Hto5D1pmP>SQs8f(xSMc^ghD^Js~;l z?+ur%6_|NC?*!L__I&5!5qdCIA1 z4EN^o`STnIsJzcN)`PWxBTK`4Qa`;3$o=uK^9A7IZj0Gcz1Dzggf~2~c7oi18e#=d z4nCJ$5(cR4;YNDtlebfyWXeGuu1(PSacPDSn?eF61vDa9niTnqUMtnW z9^n)<28*w&n;rc3_`)G4-%xA6Sh000#~wonuDZVAFsI7M#NCi>JFM@j#o&r*+^z?{ z^5Nw2tD*bYu&!x2C(B3jZReUD5*z*Nr)nLj&*FBOMT9F2nOV4`^IKbx^77<;fF3>b zgw1-F8#_Me!Jse{fbnn+Xguie$17X~{%<*IMW66;Zv(=0hxfM2SXnUkBy1b#D;+1*3yQdyz0R3lzm zv4wv;9J9crMCl_D2Bk45;0M!RSG9R{j%@W?fgaU32y(xrx`tH_8WcpMnVXzp5UsyQ zM+VIeG_iux2hwJ5KVX0J>+{74XZ*vqLo&=MAwyn0{ufUm)1*}j%8Y9XD8gQBTe-RH z7~&F0%LO$Sw5X#0n%4^Y`@&Xpmwwa;IZ$@hJO+Jqln_pb52VhAYhb8j&eTn7Yba+` z=u?|n8)Wd!%1pa6juM+VC)88Oy2W-6CM=)$txrOs=q$J}b>ITa?Un7GB7v$g747

$3ry+VKYt|?Jc=)S98j~K6!&4eUL+EVxQ!UTp@XfHSS5j{&(bl6d zzr>nTIYkXMn&UN7B)adTkhx@4!wg@zT{G1*z&~CS5{38bfl};`8HUUCEMaGivR*zT z(9t-PQ$-~llmV_ujXJ&m3IsCEwS~HhiGayR_`rp+f#&T_v_?J;@DdHo!!@p}VRfsc z1qP!A5(zIwdAN&^X2>Fx45LomsjO@nVz`j`aB`{qtuFKa?cx>Q--cjY+d6D^KrCa7 zFE=HpphJ8Dd$C>M==aHNYyx)33-TE<-*KLp-jcOduZ=~Pd_ZPysm7&w_9=wM^emV&>7Vm$ zz9*+T%*}2%@RqiBZ-Ud6>)_}bwOHXQ`h7~ev9`9bJ>;ZC zTS~T??ZjRDP8>DlqBMrM$mO31{P6GwdV+9QC_|MXB!tvm=x{tyc-I6h1b}$hbABp~ zuT%YW^nNNFwh0TRxS%8dMLy8r{w(Z2XJYHkaZC|^uI{E%=``f5o+|o84pxl?x=aeD z2A>*u+`hk+$F4aQxNm5PeK$Hgc`}Yi1w1Wry-ICtxm`qWY-ErI(4(<=$?l2?5X3Y2H8hmdp zYvA`ROtL#H1Z8^BmQ|9|%BQE+X-1eDTu zWi|LFfMlPT?lVy-hLeo;935bgs{0cYfIyTdhFr(!R=2yS==YX}R!`}S7zjcpfB1;S z=H!O7>q=?j8W8aXUU{K{>~vQGpmW6Z5!=N#9k10%Xhe?%lzZy z#+XvULEV(^T~pwRk{n8baVL@n^Z)A>P;^{3Z$?JGiKGN_YR-PVPkHQ9 zCuN#+4B)&-IkRn(pm+`~J6BsTfJKp>DW7hfX?K5Y*3lERTG6x4yxg8a_tFLut1!Di zfg;i$mPvS}jH^|^w`dYXY6ZNm8i7o$eEH4t?+y)j-x1uFj(KfN$`M?UP=dPyoud`F zwp50GAzH;6+C6?)H{^DWUCggj^lF%$ksbGoI*x~S-}Q+#3@0D78_BAC`f}(XG1P6| zpTbb42Q(pE!YFn0Ss5>eu4g~BG1;+G&c#FRV+i@5sa@PufGq>krubdSfJjGqgVLUg z*PKQ{SoYP&eA2XN)prHvCIq5(Zq8tGCVsOzU2S{?KF%LLUMa}50{5RF*S_0R5a}zY zsg2R-<=LO0ZnI+j?7{yA&Ey3ZOD8j2aQT`@-2Byl@TjTS_Umr}fZjex1vJX6A3amD z%cV4AiVAup%j%4GG=)YPy>WIFWoLl?3^Av0Z+-KXggS1sBJR;Av@UO6KIOr->NcY) z$0%LkQvO%*6|+2Vjy;zai+?zK&5nT9N52A%q@a)_MzW2TV$JfGcndF1jQLoe=*n!H z#Hvywubk!T#JcCrn0O3YtHi1pJg}u$n3KIY4*0*Im~w)2zAzMtucN@`vnqBqRVEF1 zDzn!0$jqf<_+2IXb3WGo%~J8|0CuDvZvgg5b#oFLCGT%(RWE%gd)aBsu-2FAIAEfZ;dw zc#(pF(zryFMdI9QCOqB(hGadDC9F}%aP1+dKz(%ACvC&^q&v-Wyk1f(8Fz4=5R#j4 zgs8M|ebc6PLuzO@5lM%YH4XM>77j0@OCdWlp${ih+WG&7Y%e>I9!*y%tD7c)d2^x@ zWM}Tkl}z=>YL)TS-_NNtZZ2lJe(&)8e0AfaqR#8>r=dU$v39yYfR4Au_Qo{P;HtH zdK5Q6Z{2MEQ2)eMjMDtM*Ny-xygIG%*Ohw~3;-7UVp1Y9aeHCFSb#JRN@%)ib0+0= zolLA$j;(df)~)zr@*|I?wd!7UD?%U5^2EuN>n$&>`sAyUav>mi%KyRJYr6+!8gx`z zLY|;boF*E)XI!RkgMQ%gW*O|Id)V^C_&j^OUo48dn$z2Q$)o{SPp&zego^cSJcASOh?{ zBcQ^)ct4GIV4P%t%jZRY13Nu$M{lUtWJ#wZbqvHr)f|n4==kROuTQ_2oLv-8spcQUuh)W%|`;@#+~ zPHA417b1cIzf>_QB<$&SeD;ijZRGy)EHkb4&F01dzTndog~8>4DEIs2=}h*I(XBH} z4%z=LJjB_TJyUqs1Nfm%7T+E)*ANsgmNGM>%(E2!CVOhlyn&k5h_dMP2bi5iJNy3+3 z$(YEH*v@P#jdsJ0^#V75!CO2o3gOQ?0*4*sDH2NF0Z+vo@c|}O!KKSnUs3=3+XEb2ZnH`i#QDH+UOKBtIHeMgrIX??vRG&w z)~$-qzd)TF1dvl`b<3aKjd9lcy=*CnXFm{<8G@pRGYW#mQSkGn{~ud#9+hO;#}8{( z*0ea&?u6QmHdbb4tEOm8Q)Z^N>ZB=6S&k9zNH$h7sY*KHPtl@ zw6{49Ln`qfuSD&iKL(u)Ul6x_(+Q+-L^%e?;?Be2V(gdQt}m|l&IdWC=LJx;J><=v zHGg8DE#UJrU*DYMet?|&>>zOQ%(^vA$JlH+<(6hT*BboC?A{H}j^>tXuI)~gITaSR z?crlHB58Hpv~BffUq891+OTOelG(Qw4yzkrpcPacVM^||DcYywtbID)@qMy)q3XJ7 zy8L^lbiWjcc0)TgAC#m;6$5M2{In><2&Ol%dBm&Kb0l$ht3!?{J>=;A^r+~}tsU_f zI$lH1k;;{iBo@)RNwF{9oK7P~D8&jTsfMK{Yhv$GH_m_I>agVg@Y&#NX#CA9fpWyb zdjew<&IPkFmKizV1Ix)4+f;!k#KfvWjVO$`$i8&=k}h`N{@;M_$G%6;`lgdVn}?WLnd3weP zw6+%V-*VRt`U{*~of$d9=bD#ah}`}-ZtW$J1Y9_jG6x&~^=CpsB2$|HrB*l5nxbQv zLHQDp8kL2|@OJM$l^&!wbgt;>P+{qp2W=u{>a#rfFB>vqnWy^ESM3!0gQCpwj*nEquB^q7N+6s+=P!S(pm1dP=#IXp;dMq1GzT_uc2nXxj{tb$I|ZFIo6KDI~0=Dx)E_D|fnMlh{OcE4FkJd_jq zy0|Orx0;GLa^meCOqa#S7n-|Cv=6M7wiSc$T#GXK``McooWAFbCpkY`rM&)v7t-uq zB^v7o;cFeD;{+RS5hSZ9RzUhB0dWwVA=k$nj^{gSbze#SWi@-;ewVvBuRTc?Mj}Sd$}e7jgx>j+ zd8e>X`nE82ar~B~8~R0e9miZ8@Q$k)3wJ_=2i|KKUDBLtqaDo)Je;UJf?`3JTu}K0 z`h--SJvV}O(c-tVToa$*w*<(YpYc|ilfC+~y!)`Q5fi2@wW_K)9xX~hrEqmjuL1A! zofygHD91U?yuji7vo)8L%H}Wf9=)jnvh9Ld8U~N=@Ts0rve?(Ve#~14bvTWg-pZE~ zD$kPRilX<)<=nbn1E)bS!OqLduCT;$rV`6~IAs!xj&`f~6k?U*&)I=Fi+HE!1vXp{tWz;;&^S7X1$jRffztw;|Je~v8zj;Z7MYRa3e1c3OhS~uGJz!C4s|kFP#cb zeL4R@lD;Kmi#0XnqB>KU#>yz|sjgvex}8f53H8Qm&8oPi$DaZS~t29vFJB%<>j*(zYs*)#$2X>a?f%H?y=-zctL733!qu0Qn1 ztt=QTMKNFR<9$oex^$(t&13L)j+3M`KFsq@i@ z?BZ~Y3VW9R%!^=%q@o5{YvH-v1X|-y53b$_eDmx~*k!qcUj89J>&oIiwcIE=w@k0K zsP{&W7lk*~_t&xM9PTGAr;-xmtk%i6hZf$=;O)Im2%CL9|7kgj3QmZC!58NUtipJd zh7lA08;0}Tx!{QOnt#DdyE(3RD;)$b+96yEa^!4zwU^D8++QG!HE{+LGIcx3f^+y! z-LTCQ(Ud@5z$j~dq>nGm3e{j^=shV~WbiE=&AME`NZ1J?RzVqDLwI3H;IR93Pv`f^ z_Sw)_PslArlrmar#k>9}8k^`>i!Rhli~xjgY8d^qVd(4KU70W4!XUF&J`EU$jE~K@YQ5`J$%RhA-_Xc&^fniD3^z{6S3D~AaWh9Sc_9Xw2H&pTg=9fSaZpZZWrxJ4VM>V)Ts z(~`%Et$Ch#NT;q{=?|tf*QAFq-MbcFPsu~#@}8u4>0{Z(6u-#jRM0{gLalY(_@v+u z2ErM?^~x$ej~+sDb{>6pPsQS}V4b~*2_XPmKdz{T?-#-o5Nvv6UXbFPb+947c=%J8 z+kb~3=1JgJDM+qyj(c;Ab2|;Ti5X^hDJd>Hl)^&4BMppO`@!(D>4foVN#n=DF7y;Y z=cB3Bk!4CPz~C2=dlCl4+buMU#`tkd&}qx8tuvXSMER{*e6p}2N(u#0>!+x}_hSxi z_Ffe@q%8u#m7Bk*-7VZrI#VMNro&k}ue;ziN#%!<+cl%x(%Mig2;sULHZx4~UI zADNUh2(u~v+1TITt`%ayS7vOo*$-+;9p0k;aoB=sLnXV~lbzSZoTse!C3e8IQtkBn z+%G-cq4Ewup(}qVXb<;heI-}%ohR}n7pFPl$mukC^?4?Wd`lw#aV1!g;K?+7YH6;H9p z*>%^9C!M~s{2BBzEzX?M*ek*P@NL45B2Jm@GSIPKBq;Xn zJs351 z^v~6EvOq2!4#{4Op(5FO3-_rR{wqz0sAr}~_mNrgBh}Y&hZd1?KY#QGXr5o93}S4< zCU;da*nJ|fY5QERuzr2-7&CQza4i~EQ_2?Na-}E;gz73SECdy19%vv(J2B+Md%JEl zMf0|tZAt6p%WF*^qIULwV;`rHTLzSn8zRAB!eq(54 z~-+Gfd!*W<~cd%e|>4T&dbRE~Uj=Qf`gh37}kJwK`2#$yc>Z2s8r~7^R!_KpnOQUSMej$el#m1-f z8ZI|>c+)9D6k6ws^dw8mTS^Ki2%Io;8?PsmQOZGcIb)V^4H5!*^B15r$Z=@33`Q!2WSVeV_ zG+wF27J1EHk{<2s%mLP>Q%Iic(2}M|x&Xu6Dd@796Adwv1E-SCj<$PW7eY>FI}v{b z`CZ#!q_-D#?J#en^>(85Tto>K{o9cL^C7}5>3V+65UB0FDQjEj;j52`BEug~r!?uU z+oELG=Z@_$duVTMB1pmc8c=47wzKUTAw}B%=>Kbl{GYM)&6Q;yAXxxv0|=P|KhPmd z#E@xp3v|le2pbIC#Gx&jgl2C&G^A>mF#zb8{FEd11deiUthWR4nM`yYJo&s&yLm~) z9rE{?&fI`Cm4!TPbJx11aVOWNJ>TNu^fX|oxNBGOv@MGd$zm=1s>@7vXX+GSt)}<) z8;&kp^7ttqqIVz89@fhU^E%qM{cF2jP_h#)WpX%dyTx8O|L;#((<4_E1-~dOiF+mj zm;L)MbEkzr>1Yg^*eG};l9O*N>ZVGD^9|n3$`1Y!KC~fnHtlhgA%>*^P-+9aPleH( z`FZ$q`hyaP1J)!4Vx^%hybb;Brhe%cHQ?Kkd8FJy7Atq=MAL29wFZmMcj?t4XsAmK zU;+(%>Ot{E_BTa+19?^}@i^e_d^O8GV5waGpP>cvL(u|$T4x>1@3~9#(<30e5xii%KPb|3&&{ROPk=)O+1MC6;pQSMirFBS^Q$ip}I znX8hWT-(9{W1FoZysk(|v*Y@ueK%5X@yRO8E^LsdSJ?l3zC75tO4%(d<^|{4P~A@m z{7HtMtIr6E>la3_;CzX=r0)SKMvy$D%ebLb*ur0LEwW8R}fW+vTSxF04%Cz zmp!;(zd8FsFvnuF?fU5GU0h(1dyqWZvCyAa+iBd-MOMyKR#$qc%XBCK<9};D2-Oo> zLqC(p1B(3H%}&KH)Ontw(U8`hV^+MeD;eVf-ol!w zp!0XAGdl2-Q9~Z(;*ep~h;2Grx#+kC`62U9*Y-d)G9Tl-=!Manbh(PM<)AH1&c)v0 zvh#FnK{FhDAGL=ZRP7O#^xemR7tx>FvfBK+)m~G)x6T)@8>9d3QpTpeW?$CSyb*re zsC?JMil<_K4_zN;M9nYSJ+uUB@)S4;o~}ukZ2^m)f&sITZWxa6n(gzsbvAIUy?(1vV`WRWNg4hLRg7x#JvuvJ1TCO2U@h;L4Jb}HIhS@0^K@VwnY=KcP( zcAs86Kq#07?M%s-*q_Cp zy|hEVI(_f<)B;2(bta_BHTap&^N8Hi3X{Yv0tP!Ixpu# z^3B7$|8H)*BfwEj_U!*T)V_4w;7b0@C>aIHesD9(|CjmvZ_?@AFC>%ZjK?^)>ngPu zR%qvMpUJb|B>waM{}=HLElZS0?rfozSnO41fOrDsrEInSCVxdUraskqBc&EeRi#T<9_?;3}JhUD^>g8Ie}2sHS6@qB;G=sPXz9m*D&< z5&eMTLw=68EC0u3x1{J0M&q=)+_ZK^zZ|@c3rKfNII0zqj)y}w$}bGh%1{=+;63G^ zL2C!gMX_l?n$$YP>V#czGUcc0PRtYYfK?;xBmqh}bHNHz=FQN{3yW4lk{<*(dt0Ov zm8B22zw7hOMvG4x#N?fD%FQ_!@D^$0Ir<%NYwWj!WC7NqE2sWi9O1-paK8zeeCZY# z$m2L%kcTS}6C#A)8zIo*_QoF=D!!*nl@Lc&oPwND>0tM*_cHIV0@{xI2WXxnJPFU8 zyJg#m+XQs#lZ4(hIqo%vP&VqHK4kI7$+>9jfXH)C z7hZLrZ@S{NL2}bGpjEF_UF(Zw7dP}9C45#)-x$}DFfw-Zl@IAH=-R3hmkqUWV*2|7 zJL~4UzEJ@>D!D*yZEnl5?sYf)P#leB>5)v-MF~jFK%j%rk{cToinm2E7tBhE$Qvl@ z7i89*dX=4haq}8H&MXt?^|EUB+d{_Zpox9C9{-_9AESf$=EmyGoxDm;ba30wNP3Im3`q+O38@8p6GTp-n@N*)fokvUA3-3DMq#eC$>MA*+?=U2wVo zt|--P6q+sUxnW+{wtL~{23>*9Mcsu?@i_bC-tZte`pY6%R{QZnaKBzUGEQR<2{pdr zQAa1|?_%Aw#%9fx-NDx`bq&p1zJBL$y(N@682Yk<^sH(91jRaX4)>FWr4yl3vtpN) zx?DNg;Z<}=Gjk;aFL!l<&~|QPzn2&g^j>ig0*Tp<)`x%4rF4%pqI~u}WgA#bB&}jx z4dO7@{TZD4)vKaC!)FCEC~NC=d~HAnkk4Qe=*U=`Z|Wcmo|B8evHD_tODXuQ`i51f z=uv$g8}=@$U6~Bsl{DCThunW` zSS6{p*LGAoLhdNOppM*^u>BnFxGo$P;lp|MGyIDaiuYrni8EeAN?#ogfvATUN5K!g z8N`7HV4obBoMy=l@fo*tN0veX92$C z8@4W2NwsdHeet&bLIycHcdSKNPPq??Wog)Wb9T|J{G=;;ylVp6wxE_oyE(`8B!FlN zE_LKfcjCJ(*Lr;DlEFCX9rLfvFiL$l1IS|Y%>-imX#t~9HN zw%l(Ap(D*K&ZF6XpzZvHsrYRJX6rTZs&Zks>>9jwsQ{fP4V&@BUYs63+*g-?LJZs7 z`*Z2WX3VDDu4lp(ZT{oXK!KiTovzi-aXMC(W#d%l@LPxxzgT3y^GdU%~UPk(UYah89uoZ!#%9CV4q zPht{*f2h!o#u3)7x~VKUmJiS>xrmc->wh8VhaZn$Qt?f0yX<)n-gPLd+3~iG05L88 z8jt!Dm|>s=CiSmA<;n=yBd%%MPQ26Vl8NOCMm#=^E#CUCLgs!mnW=9aFj!(laGa>C zf5o*|ieeKGNEK+`%|hwn0yC~m0!j9iDv7|7fI94hL&1b%8}ehEQwj7VH?%*LC{DYi z0MO*t8RI_=o`DYnF9V6;BCQSfcB|c^23IE3JMPKcq*4karFDHO2BCE6Q@QuUKo5J1 zSuZ1Pn^n*mTgx`5m_9C8=_X}5u#;w^x?<~WL!MLU}q)xRb*^!pPi(gK~+wvY+03u zAq}xe>6DNx;@FO^goaVacX^zW2TzCGbGjV^N3%<%BS2x82SLlMK!qoi={mt43cLsd z<6@l#aIBL!?`2@h1Y)0iPLc8Na0#%ow8%Nm0$r&52-yU$>VlG^;DC@cmg6PS3fwL&E|$n$SKk-g^JZ^nlz;9vCp3 zg%31#n2&P68C1yCr}c()^)u2~$3fZ1uCXhSg-hGiVQ%cn4C|?>vFL+-)ijz0!SxVW z-!v9SiF^h0W`K zdBJycc?v~k5pLplEiJA*QTRq5!xH~mZ=v3@p}D29tIl^((;-B;b=}%JEE`7-CC_=V z=id|AnJZsLi0NOz0~!jPo$FjW)n9TOmtIx0Pef14ot_!2zd}w(J3D&^Rb-Zxa$h{a zH*OBOJRL4m%dX8EpYI069^(*0Mh3;uQTxi?ezbxq-j3Uu!E>qvF9{MNIHXT8#n?smGW(yIhe^wM^nN7*vx zG?;Q~rI%B2Q3elYrw0x}?0+2gt;KL*GpW+_2l`+qz--CfNl+BXb(=GrhVfMonp4OI zsa9{K|6cj^5Pm)nl3bbYsKW2i^7g!T=$*+y41nB|L1~AgC+K6@yMV!Tv9^2eD%tgG zfpWKY&wxSlPOESGm^*%ALApfz^QX zxU?Z73RW9&T$59GAt=Q(IDH$sISO@sEFd_U^zOsi{N$e73>FUaFRGXV1p?Rz%%Hlo z4pVP9C|n!9IXv(paOi|;7S2)f8W(TL^IYbQh&5pWtYhJv8gZ^>>P8}Jr8pZSLEZFC zbcaT-ZvyWj&;7YP#NGt#-(OPoKV}{gMx~ywuy7~!WGLepa5#s<74C7U7{5G-L}62Vsbw?U9Cym#zqKRqPK2YA4E4gJ9wT}1)-*$ z(g&a~7d>gxo)qs8RsgFX*N=OtvNXSFh7r}J^6fK~_YBbMTdF1wty=VgSlHn;-OPjW zwEXR)E#Zk8xV6vNMEz1-lI*kNktvZL?*r9nE#$N?&r4&`?+SUrQ{9Vs-cFR3fJrVh27=<%STroLOb4H+Z7535%uu#%*{zqakq67WAt%;*H(GsdX|_{G zZ-=L(X{GAM9v_qDSI!@^PNQ7jTooH}m%brt&4=fU%+|eETQv$E9gVVw%)EB21A;Va z71LnKOZ-HP%HWwg+zBmu`La1I1qN5=Eu~kaWDFQIQgHi*DQ50Q0vRQl>-YQ=@um9! zPwQ@%9-P%49Sx&GaeN>Fqbi?2=45pP(kj%G-;F-(ZKf*Kg2`E1GI$J5fRgW)QJIwE zeRbd6wI+^jZ@`$NSr=lL5VKRqGg=RyQTy^P%JH}du25)n)Ycop%rxyvB)~ApQvHm} z;{A*Fi17Z`Syk+2(Usic?-oez+>-za!on&sfuixqmjFew1FeoKvqvZE7NoDVFmNDI* z9|NtRIIhWT8Pa{G7zRa8n&Z;=HEi05?meC#&oU#bi4?Or{)nU3EO5oHR^oU25I=jM z9d?qcS0WMy#>*%AS!uQ0gj~^?dd@qu<}o*Z;9zHbqBvD!I2^*iCtq--WlmRY@bKLO zQ0J)hpVMjU2e{4gd?aYO2j?=lX9+u%q8=2J5!Lm*<2F_H1!2p%*q7+jnFl=D&xSM) z?)nAY_Y6KFZsN{i$fS{Z58I|pBDhjORbs8&g#>b8*KWQu(tA=d^V>z7jQ0PgaGr@9 zFVe;^HC$W~x1?v?X&fQQ28g_UJW@c+`OiYIgTqDz>IvUj-~8@$m4LC?Lix%)N5a_& z9L*-MB@V5TKa*RyLPGRdQ0|;7sEbYZG(qIb&u0CFO%Lw=-$X?h!zJoVzHawFeg6Z( zz7#3LoTF`tVK3DK|2UMdwd}><%G~lmmfuz_ZrO<$+?n zhv94U_^Hm9WzcYStXtsr@?5x3E3K9CCncfRp3@1p3~@d>dMAgyk%p-#9s;~%x?_xd z&D}hR3~$?Q;4NotFCLARb4x4s(ZqUWZ+{>CTwwL;{kB+g6P;NH<4+$^Ajpis%z42} z{41Y!3HVf~qjRY7?Y@I?-cNEG8>N^DmL3)a*?#^Jxj!;~s>gS`pl-U?xI=b5ec|eS zV|xehFWGfvVV8d~s3$JZ(J!*Z$XuzR#ae{BVKTM0SY?yY>(mxgFD1dvW_ldVKcW6B#+>NZU?dyUq# zm5{RzXNBMh+yUrTLeS~2df3@a423?;*vE)|*GcFCEN+a)Uc@|*x`6m$}K^l6_eCruL{KVYj0olg6E_+SyT6tDS% z?1zR^=!m>Tn|`}0^-Aj+$M&wE>@|y@dj=}-Sw&kD*4MO{O`**Rms@CmjrKn=r;1f| z))U22eqE%`W7PV)H&!>VS@J~P&I>M)i3++e_n|f51C&e5kR>%5h9b?o0e4%^JW`SF z{aa$ItSCGt99Mj!US3k{31e!VNBmF!815rFt|5IftKr+Hg>D#cq~ z&83ucE$Gy;<`wDlRFyL6RI5QLqR;vDNd>1!P+eap5sV8M@9_NsaxWv1!%4`|`h;ix z{`aQ}P7u1dRVji-du7p^nQPNn6ri_0s-@Wm52tmG;B3s$G6E64cy##d%vYsemC5R< z*3``zl@N%wy=(knoDwJv6{OfYq%K!+E<0QBWH4&b_k{4Xk*0yevE#zc)m48y_jYG* z$>=aOcC^a>bXxu6r!&Wp2X{7z0bKy_WR4~E@z{?=;p_KnXuS<%rA6GZ5jvyg*Eb_Q zx9$eMIO90`^e`&_8@vnlPTN3KFAL4e=1R}?S{RrT{Ea!Q_jkp_dC}lM5fmy4@#d?; zYnHY;%=KJTnH*?zc5e>-Eu9rs8u8P6M(Vhtj?=@G*iQ8Kw=}gpqORXjUvY2Ot;l1*}*2Vui|8nP#QfPoNh0IKbXGE-IgmW+l3B#T|j{R&Cv&MY#=z3VuhI^mZ;8uHmhmc9$0jdG-7ZAR)%=mBq{5YCM;>GYO#z_lYU>m@^KPj{)<)~ zBk_{nU_=yYxq8wk+l61&Lwy^S=6GNS$oO;|H}8dK(R?1X`5%X+>cEd*1}L+&V-%69 z86nA7x_=z}4<-kueKw^pbCC-P!&u1SkX(A4o&~Ng2#t*G{G~d)>*uqp6dwpx?9CZ3 zct=`~neCiC?}m*WP#`RY-9TkKdF-WS1_U}4io?Vq5?R5$va2{bQNq;2% z{64=vKF_D{&U3FUJjZ&y+a0S4qBWXwEcQg)?IX|G#VI6Vo;NV>G~v7-ZP+!T&^kD_ zd+Gu@hRwOHF_z9prN2Wx-id)vjWlM}{rUMLSr9{0P#+1fcIMsRx^@)sYtW0YSKfu1 z6qUXT`#Bn7?Fg;33I^-4vx*#rgs=c0@Q5ZQvYFj`72|aP4HMhCM z5+=M>@aFZpIs}WujGv50Gzd7A-3@o+rTKahfQV#VFGt14)Ls`7qV)IBY1Ae*;^8J= zo%VtyyP;o%>2F9lFnmGW)bx-^@z^L@z9f7 zEJaEt;sVG*@MVqFPsIFkZNJ);k(9nnd!=^sJQ?FMBtJFbbA9oJI5a&4J}KsKz0+s| zfk`SOi|Q+s8gu)F-=8vi2)T!hyo+X8Km9tVpi#?VV~x_OrX-}61YJ=cq!XA2a0h1H zTb&kT&|sxP>*hJXI_{pYFk@kI>*)VY5c@@$JODQXM()n%g^>L0HSW76=h<;LKd+C2 zmVI0lCjlgFKUJq&=`=eRdTGcOHWb>mt_kh;9QNfveYXF{ddCiDt6r`wNFA7avzm<% zJ+^Z{z4~+sB%Lnj*tkP5^2D!ucRD1mL4$~%p6^@38oc{QCHmHj9rVzADX{~??Tig77 zXXV`tY3e6!Zr6d}f{Q5R4>x_(^uc$boT&o+VCNqJ+mm{+xg#S=#U^?W#V9Nh2_2G4 zW%-co)qkm!S6r}R@1kPE5g2LO3FWzlF+FZ!00Uija%Y{s*AOp?oS;R=Y?!(sUz52r zTc;tyjz(pMt-jH4hsr|#(4voy4;lX(4f}~T9cM4?fz_1z#Mvj+_aT*2EIO1Q5K?Jb zI9h8Mn*g34n;3>UIx*3`iRI^Am*9u+6D#D^S9W~%Zyna&joR!8$p&qQLg$$SAc81Q zgNp|m9}McJhHwS)5$DbiMt!b|&QIFsbHico3+FX@O*ekVoiqvg>h~zKA73{DtFT3o zR{o%_uPPRFsAv?Sg3O*!oOAj(btT$MTUk&BL7KRa&x=dITGnBQ<#fHt)>JdNQDp)c zIxQNSdN1pwR=ZS4$#hT@-VK?ORpu)0?mHtwSN(OTC}J{(YcHW&bjsXE73}{`v`k`H zg;#-)BzXIGA~V47msnwMCN6bh{^HkQSpPT>esu&?EjYWsx#FbvR1g){&GzG8bv9T4 zPVj!~$KfeqXjJr}DO2(l)ZskJkw?drK zd?*U@*B7K=n+w6mT1tEZG#ZkzD1S95r);<9uUPY4!@Mz28}ic4QtoidvD>B7<4b_g ztZv8M|B}IS)8SdCvs-!pKKa!Se&BORwBKLrz|MLc$P32l^*HX zSyPT6i&=3^G-bw9CKv&Z~@kU7+XH8RDU00q4Z) z#JC+TD(Pbd)1({wiBilQC%zdsNK?z034Tv)t?L|?d)GNQhR7)X?Yy_UbZdNfdMD8m zq^3BjIffJa{3L@?JKlMT>KD4L-T)}>dyPw2cn6Qot!D+)1$geK{3Y)zkOvJ3NTj6& zXx`a{ex(}>k>eA6GGJ31u8=fBbs!nhWG{RZGsZ}a!+s?; zqJn(CzIo{v{Bc4i0Fx&b(F_U~X%d;A3w`j+a6c}{9?zHlS^M?wVPFk41h%?O=Y>?B zDN!Y9=l~9ipq33CE7(3t#&~RKWMIjPF-E^)-nrHeC)YLjOx)5NtxCcBueaQzwRdj0I1NLKj)29esFA53?tFLFc&RmoZL zU5)#!n1PXXnZa%Hd{E&mBRtW$^3U=(>!p-&oBQoPr74A8Q7}MWIVb^CVnbpqhn_Z) zcVIOq^T4M|t|5T6!MyblFvGo_P z_+JaMxMQ55fwS!nw`TRTSi(u2#e#wz**d-jn$>R3D!>v?O*Ogj!ISfeR~q2(uQI%9cA^%*oGtklsS*PYf^fGS`mHSOj4~?V%T&tTtvD`;8nu#x^ z<5efuGUI)k*s&WpOv$U-AxcufFGV{Y{6+XJ`>_|T68601N8pL)xJ3fJrIdh7+9ohw z{H$wAGz#Nk35cE)R^yLz7c}2IRuq2r+Fb1EUHGcq9o~=ASERv3iMKJVF_|qp?st;U zezR{ezSg!nlWmCaj4J>B^ox7$8BOj%dPRHaBSPTkrelJ{+wjmx{j?@cbF$%E#=gh! z-oXT^K6m1=;ReQbOFv|kKXv1|Wl14NToXV{z0n?@XWw!AULG1sA5) zS}Fv&gXL&;`5-vP-$Y<>23_SU{FYgSc}n43+(P`;uFVHr2L*~A;L4_cpBH057)5CW z7VO-Jp!}x|QJGFIOx8jCrHhWN%FNAK?<-|r^)aC_zsHFb)l_9QO@Am#5%-QlreVpj zeT})IgeCOPfo%@z%)m4rkSfQx{|9pB=HrwfsDr8jo07Coa9nNr?-Sc-S#ma694Cr@ zhw1+&O3ZU@U2{5r#{s$RajOS1*zjT*8w(Sbkqu&}Q~h!33hDl`+8*h7p^a@wnmq)W z6Zm2w%H`sx=Gl|ZZh;*akPR_C6Xwf$A*?7~^Q0QoS*HQWD5r^IXh_hF-rqIkc=wV* zuSPB2RTSkfok4{A{GgV`kG0UPsa(^>!G86-JW*$jCblQ1_oY$BfbNgJ2owiqy$&*r zs8gnb9UnFcRE4iQk!ijc%OsqY+;Sz2?7fh1(;2#D9`7>dbI5<}-X1<{2U01l0TQ-s z=9oTWn5y~iVt&$8ho_H}ii@4=yt=l$uRCz|xobvM#*eJpdWb4QX~K{4t1OeI2mT*_YnP5f`bA9A)E#KI7|f z?blHta@|WVP|F1b!iT}u00o^B6OR&8i-lb>1|Ee6j!0+j0v;vwyQ;Sd0OII0+gY~@ z>ku@0qlVO?SDDDyGx(5a3Ow5x+yM`Q<S`1|6*t>apq#dO?J>f z4zGdf_R{z+d+5R6Roc*HMjCgxNEz207Ne;aZ(pnCf^P33~CN7 zVdHcJ;|1GxcvMyB^{b<;c<(v z-^S+nxbccU+LLU794V?PyZGZCQ?vXphx~jD6u>oh;jAhh3KWHS!*!9F+z3Bt_UNg) zpZb`-hA~m@K@D3kK>x*JPWqcX9=1UXW^~UC6ot>)VQ}!j^qRutq>dX#e2+#3)l?{w zRAh0zu>l^#P$X?XO7SsDNl^0nd=Z3Vm7F>z^449cv?p$ zBL(pyga%2e>Mz^q*`Q@XrV98@uEFkr-zA?JagXn;W;9?db>w7nG*p%wYT(A?u6->@YlMO z{!S8{+nnfW3+RtCl*A2O|P}Hg991t{WXERhIg8o6s^h+h#*cYepK|GF# zrSQW9M~7OVdy^JDo=pikvo*gEFdZeDu6c9+C}@x<#?5IYbc*1o(kkEc+eZ>eqY1D6 za`G(h&;{o>`?l>We(mtE)|fb`7jI7^SlGKfztXMG_g^#1Y^;izI#99Qa9jq-y81DP! z+nS|QYe93w) zX|Uln&!NxUJJ?Zshaivsyo~tdOt; zJINQj1r47VsEcTTZIbrUrjeW81=Xk!$3~GhKLlrlr9CHf9W7J}y zCQyJFPzv3#GPkEKno8Y`9zLrOa<-O#8zr=}gUpE`%=vW#Dy&3PqKh)n2Vu|qa)RZq zvu`Nx&dm#u{n^!xafI|R2<%>q?qI)I6scd3W5UJf3ZhwOemKh#dRAHtvrnf7xVnFg zsofc;K$Htp>5(}sL;l6eB8Czx$jtKNRd((m-5mjo-wE{A|Pw0kwsUJ((0o?VW z%~)8Ob;+Z8wYW%Fqa-C@NPxbgzz$kdyU54N1B2p=yCqb5j4Mpe0Y z5=Qd&?L;St%JxypICXFm1LL~D&*5yP8GqC1!@^8d!K+!T4|H3D_x86eBsE^Ic~zq=Y5jA9GX(KxEX^otIfP1SzTs zrD8=%F4z&S(*t!%Az~wC0_crTVj+*iFAhN#e#1YTFDI>%iy-nV8)V4GeewGRLY>kC z_iZbpNzrv_gCaW>y^YBJ;g6_gkW_DH=bFu1@hF1y=Irwou+Ajgx4@*%E@`h)p-+Yw z*gBBr09Q-;8(A)!uLXD&#jeKBJuqYlnAqL5E4k#%dQu%%IwCb&=O6Bkt6TdH4JRRt zY%(s$*E#RX)%K%k`I?=^1MO|Qp;>}}T938Nz_lai`;DraDv>B++xi@bQqSvnc6_&! zg7BbHAE4OXoZ3e{Po30ZCd7ThbHkg9@=s~nGMW~LXc7-}1W!9*J}zOea#!p-$sNt* z*7OeAKGV1}r@Ug;Y|45Opc;4SMx|#i4ii5Jgd77oR(?>LW+t!hBYIYtGX!8mL>Nx! zvvdIUM}i9Y_qd;KhJAPJDj~!O%}`8VTa0Z z`TDr;YMK~&vr;j$cKwPU9fy8ta0v$A;FK)DDPKSKaPi7UG3hbN$_&EAO$5Bj+|jJS z-*@d$&yzK~Sqh2wShkR#YT>nwOr(^QhD^o(8|by~Jc)0L}p|IaaY3sL;YUKY)i-SPOLziMMy zGK+IN^0J=+M8&i-#<`)bND!kH!^y-bOIU7;=PlB%b)o5viz z&f=rJz1*8u9}@{jW_0$#)b&2p-{II!R*aZME-n8xV2Ap{1~gg* zB;vCrF>wfA^sjWiv(3e(A`D{%!OR2Eo z;%?1rZSxmdL(Nj+!P%cHSX>k8LW_>^Zh`PmK2WaphwgUN5H|Bbh>0}>JE&66efXI_eyh*tbKcHKs3;eq*`hQ2;I8!_q79Fa5 z{4LBixNr=>+GEbXe7C>U>oyEN9ek(4gcyyw>Db1V*f7Vd(5=K{JfZtdZ_%we$r42_ z!|KB6*F9IYUVc)EH-&b7h5p9@Jw5*aQ1$L%N#E}uFlNO%Ot)&KOS65oTr)c#L`AYK z&HSpZgO-Z4tjq}U1SAA#ZM79?X=?KTEi)@aN(E9xbd{!-q@<*XSf~hycmR>(o_G8H zp6hy^f4aIfyX14Y-}n8xUx(Iq@LZ_mMr(iC+Cw4A)_9>FxU_*O0=2$T+kME=Xw3+G zlk6*}KNqr$7PvC=a=@HkhV#t3T?l_r% zP)2`u0mOlE_Z4J~6o5>OH(kc%UicpKBa@9D75C5%Dtl<6kYN^*>EAHd(O|D=sk#q6 zV_*ym0zc-k=9grb)=z;|Fib6Wu8iv2A<~FDfFGHFr}$97Oki4i1a5`c`oFKV24-)) zr3w$Uta5iD%%_bqcFsne;Sw6vJW-rr=j641KQ*hpBZ!wI;xpQNZ@T6z$X@(h;gK8c ztj%spP1FBf?!B8(TVRHZX0RiskiO$*^D9zn^(Zxy>RDAaH}#2sY_e;Gkd zAemx1M)|&N`oy!^(*`Z|#arSRt@iU3Pz36BJbfVHnI&UK)u6^|uz^p#|D5-1qzFk3 zHeT#~5ok=^2ImVL>J%07_lI1{2xU^FEUCzwdQ1Yww&17Z7sg4`txmJ{tnlyGzujHc z7^B4cfx{V%4RQ^fRjd)%SQl~fF8V~9US{Ih>W#<35Hos>S~lhKMSqav$4-jiH~6xY zUW3w#W})c3SL&6;NW;ubjipiTIDdq4qRC-}YXdDg)zP!=yVQl-`yUZyVcrv(Zkd>L zpSi)jsr_vmNf?)ddVxVKX+N4e@C$*Um`_S5k+Y=d(|uq&6J??4Jfn^Bh+mKW{`Mi{ zd3q5rC5fyzCbC5h3n&4p_6cW=)s913v;9hDg|Y7#I1Hw7NKTrrz(~6z8+-Znx<+wy zV!QRl zdYxxd?hO-%ah*Y1O*jR2IAF{xiXyTHa@GU+%XRt+eS7&dyChXM4O~`uct%j9Z3m|Ud%b=Bj{_76+uk!0N zm``O8?LXu0Z@#xP3jaGVJdI&{CPW3=ly@V04U|&EX0>3Cw7E0Y(WwQ}0(ZQa@>-kM zo5^{Ej6wbbd22CHq6bnhtCC^D^OQaM)}%Cg(Ao7Q3==e!*q-#U?p44oJ(Z}}yG#=e zh*CTBzIBbI-dLoD%fKYH=9N@p=4b!e={J;anuL1Xj9PzbSCoOy>laIRi4H}h!f;3= zzh~JNu#uQvKjaV$T}LDi8Jvv7rw)shkzLHOdj2lNmu$AsMdaQH;)6;FE+?eb-zGi-J& zb?cG}cv>c%M_H{?ryjUBFLSBA*!V9M`v4Tr5dc3*)5MA|zPAfD4m*xfH*HtHf_&F1 z&Us<{I*&$yd8FS(_sYbwBtG8w3Isr=B3`DIq~!*-z@N9aJG|A1E%ah-Sro?5`^oA{ zW!U)t7O#_HBtZ3sGCfPyY*)7i_GhB8p|;JsH5JYi+iBTlb@mmp@t#TWZHxYb7nx^2 zXTwu>JLeK(Of!9&IW@mOk9MaOVtMWiRc$XF$j+R0NYm~!jScpzEA(8;%1x-XD{N;I5=2*Z+8jKA~q2ljb<{lUIX0ndS6 z&J)J@rSv4$p?=cW#}(Q9GAOwRY@F);e)zbqkBF|%|8(z7$%(H*e1_%kN+65i^p}HsA8BZq*`LRm-)eT*@CP7xefWlDILpxoJajNo|9IzIx*TX(^%O-kW}mOPouR7Bjn{W z^!mIT0*z+k$$M)5YVZIurl~hkuN-ww|A?&>0JkeITlNp684>W+1`r$3a?*lucg?YE zi0F4@BsCh9ErI`1<`CbUlE3({UNDBcirV~e)N?X;DJ5h<_Nf!W_U_Q0`efKZkmH^s zImPZqTdIQSwJw3rut_NV(=+eJFhMK68{2QJi+`sW0rrvd`MD{Vb3Q(gQ~4>`}Fzb(ES53M+C;StoOJxq2;W!!{vuvfy?Bgs3vN|q;e zwn=&1Mr{l(8a1i9wMlLyjAf{eL(7E$A1V)}iW0q(^!jSHENqANG_K?JBa2vCQ9LSU zP1|-YWl)8d(eh5sabw@B2L+F%MdAql`9n9jDsdUNfRk9Mt$Kv|xvnKV8BYE}2Q&%R z;CX-T#1{;RWh_#9Z@WR86cfu~QFmf?1LIHf;v2i1IhN+xnM*z`+gl*5&tbYDCi*qA zs(>R&Cz^#-#ooT>c8)d(+>n|<+waf5@_4q^Yb(@sYwc1l{CCLLosMq1{T{F6*A-j? zxk@oRXLGrz43K|U(*77Qr45mx5ng?*F`lQ)W4+xB9}mT1*z56z5}cDdJE9`GXD4|z zrwDKhxeWzXT4aO%=h2!j_~11JI>K8sE$SReL?teWg#`Xgd-lWDOIw@fyL{cc&)KCY zrNF#{E}M)j2D^(7?1kec$caYpjrEesL0j>yVB8Ps9+?-u%%k0m@YoH7W)EKV*z_!y zIFnkL(XV~b-`|0>27Gsb78~_LD(|9n&2@~3#IIwL&}AFFr*H6sC|66C-{94?*}t0- zKT2@+Q+mxt5m|m3b(s=ZTb;iI>BGgc)zuMreWUg*jwZwI-F{gFY@1?lW$tmI|CSXn z)LTd|@(SQeM(~nz*7Mx%@#c3iupOdCsV;PeTAWz^?W(AlXNCTk_6}W24$w;7#jJxoO%2Rm zwYKEaw!I}&k*Rry*zeCvs{1@oPx)C3$;{Jf-Q_`t*i|C@?fT6}1;JF0@f2~*n*Bq| zUf-R`gn1hZOS1R>ZFzB}?ew2V2-VVZ&kCG^?2c2FJ{JU^1q-~;onEr^57w{O-fJd*upE??`}7bNZ)8yB5Zo-0<9v{l;rl!=21 zLMTRdMpr#u8`Xi=oK@^>OLE+^7|dFk=X1Ag*Xx|t7hmK=rhplmQF%a3k(|@<-^xS0 zV~YvAaSL56M$LSv0tkeES_{H@(VX&uLy5i`!wV>tf%y{%8LN@226q3S9If|{svBon zU4kCI8CAx=iWOAo4GX*;Sj^{T_dvetA6#K$5qkO>HeB3mTBmg-;>O_-6~B@dtMFis2^S*1+Ki0K4*e#AgJ)AEG{w@Jm-8PV7bWz;WdK=<~{MXU( zk~mPjfl%rv*5K^vrw#Ol`#W5gZT~=ucZYA6Jva{Ia<@fRYX!ME`^di7j-VLedy1YEqjJ?BMvR}f!j(W;C8KVb_SrO?Yl$HvI)@_!<2;jD0SDOn2-5o zvJPPwq7rxN%T}PKI3>@H2+VJjJCDIvtpzjr1l9!a@-Z~kU z7Z^~4s_3w=>Q%?g=Bq9XB%(^t8{rTW3XsqFGg%`p?`52O%a2x)WYy2UOl6~0Qj=^t zlrNER%3&NpZ^bmJeL@3A6=>CxM=`I5ImDnuUjlb8Oa>btR ztMG7{gxk5!a{a07$omED9jDAT45F|y@cTw9)uE_AAX_6LkT#vYfAe$=Z7Cj7pbCPt z*}F4tQ|?u5Lkr%5QdXz~Ubk|WLQcQ_oDwx5Rq}Yfy=Q;%YW@G3i@Rq{8o&g5Baaio45=2dZ>(-^siasGsy6}L5~rBts(BNIs`ESeyq z`dzvf!cCWGJ32`0s!o#^rb?q+{$_PelWVi9V|d5hKaf?5(zb}GuIOGO2O!t0D`qIj zSahGcC`en6jlrbP3i27U#0^P{?AIno*qahW&sz6}hxZF&&gM08EUr?W4b?ci{;OW` z2xb>kn>Z>;A=|u6XJ6k@csTed9%;vYt$u`8r@hI;PdI}nYsa*C96Mk98OD!p7aOfI za@9?l;;nh6Fl1OB4N7#Rd^K!$I1g;oXFh{Uy zc%%LI?zs!UXl`!xa46&cJUx^^o2a^mbBQ_BgOVEfBb4IxJ(4c7xNBc+7wr)y;f$vG zB2$Kz_OYkQJ(3Na;qy2jyO`WPid?&sLB6MG1YrladgqQVS$O*($qReBqFAsuBZ(dR ztmio&TNC4nIc(OJ8-ohmN0)|v_qt}6PoK>T7HwEZf=8D6>&y&nOLxi%{;UG-^V+4P zBpU{U*8pP=XXm} zWDIeh@We`^jP>!eyw{|i{iQ4BxRlj{5Oh4acRjB*_lTUPS8H1ZzldFif7ZAiVT&mI zfL2ySL)2FjH_8W}j7Z2{N%=$c^(+Ud#8;MF?4XQ}GYyfI_gt=7#zk*wWlN#yu0V&AAT0|YPbr?FiR zMqP4`Kldz|bcFlTvf)p^`0G5c7QnPnlXYo=HZ-`)gEh<%*&OGX7v5C(jDI2YRK6po zjXR$3J?vhuDFaLlH8=2Og3B%8IY{iRR{XgiAK9}IYIIZVfE=8cT;`rr;d;R!gig&4 zy;~VU{g-)i3K#If1K*^Tcn9vB9a)8}eI=3yVuL@T*|Kb~4@H<#4nI3kR7xpu#|4M)m|(UEP|MI&7@R*Y1J zmIRAQ%3;a3!t6gMk{yymJQOsS90Mu-=7MGT7)e~4jl$^Z`Z-&vu9AHT=p*$wN}T>G z*7ze1`qUpp{RMvtNaAH7whHgz@f5TLw4-gSDy!WKG|WRW=6b{q@eh)iL`=H$m4v%t ztxhEv>ZtKwmI1El;d)t_aS2%8R0*}x9oAjq>YAVZd)AiZ8?U;^^O|4FouKaXOYG>$ z<>Epam!*F`@GU;Zug{iP$?d_#MTGzI)1N>5^#|+(kw#m#T>?{z+?7|N*m(qC=Csog zgSIU@bR!Sn-PJevmaU!H`Jb&gUQ7&9BIr<9&u=i%)_`N?L9$<( z-sM^l0Ud{=^L;Tj9D@Yq1&u4MvF*1Y?rQfS(HD5TsdE^2P{SIF`lq&kjs*dZ4(P}R znO-tuz7(z2UYs=o;`wJUNEO+X2Gr^i>fi_jxM_d>5A$K1r)7yn^X1b`u5i=5*LW^) zX}48<@8fr6)kCF(eqmy3t1Ef?QPR2Eog`j@6qOh6&r7XqmS@^0K>e4C zDm-ooONoh%21)^nQNVd#0wbQ|#P-%tSaj@s?HF^Vd%o?PmgH^3r6sty%r#UyPI&}L zRiAEMM=dtnI&#BQ!}M9CL3|nw$YIfo56~VbLF7)tA8oTFdcfHD_U_6*&*x2Z80IAU zqYhDW6tVp+0F!gsJYf0K(>-s_K6zcU$L7D@V8^4$fHnUo6$K<)gh&j3&y39q;qlY+Jp?kjU4qtAs~wPI??Uu0!QWQ$jQM zxMf^Px#AzMROdv*x_u<{5te0Z#;dBv>vcV9R(R4MwWUqICVGgPzLl1pq6b3N1s)=! zjWId&ag$^nr%*cBZ^DY0t)jJHG4XE+zLaU#EF?lu5vUo!$-d%F4{@z|Pie3nw=BB5 zk^T=PTc9wKXIHuVaos9lrUW_y@$%i~%^ekb5%ulMNL5HH$JYvFDYOF*fnMM_Ptf2v zbisB9Hg-XInLGdBy4ARPRnfH3m;`7BZ9m%61>toXjd~2>GOu;`OVkLbh!w`3_W(_R+co69<(dd!LF&becM(sd@}9w zbC#Ouy+&y$C zR_pngXyN~7%4;M!918Vti;HMqWbf}5_l3{ffP^mgsBD}038*{IVc#@Bl z@#@EYxf>3*gX!GYG^F$A#%^T27lz%y?w8>?|ApZYaM_!tvwhhkT%L?ZYZ17KX_oUYSyx{x1l)iW>88VEp0B|NACLU zR;Q0$wnWJhfS}sn@mg^+SY>(pF)Huw$hRp(|^s&MY|j2MYC)Re{|NkPHb)r z>8t+xOWq#OORzEOf76tmfKKIi&ab?_Q3}Tl|4|?eH4-*AnXljIYw;zfE(|_NuGe=Y zpJNdyfAkT0m?UPpbj%vRCi>>cK@myzSesPZ&sCrc7B#ggZ4`k*#5^kMSufF)^{Po1 zIVi6`k7M5LeYMA!mY3}i4kzW^+?KozuELPb6mJc8SU1fZ^|k_Ptg!BA`OxF|1vN5v zbJOs}ff8MuZ^DSA`hgA`wy}5CToe)a7RxET`P1HsziH{Jt(QOCdVfOK_Igd-&U;;P zF?tITqj;blUGNGP4s#!A8;dwRuCi7Rg-)nP6o0Mg-sV_H-vVFdSzs?# zX4h%2Jmg31)Bu{|N26foi&wk5c8jszxF`{CrnhBho0I>p;5TlK=G+Bg(XU+6oT zytNY@e82bc&j(f#J-V-joMoXac>Me9d||L-QdGA_hG)HzL^nPbv-2mI_YMtj%3OTk zzVu~k24q4_n>YB}Nk0%X+9Mns9T_wv^>(#*mGx`mD$Bx3b$MJb^iQQ`PqM$2yejhN zd$XJy9{I%vWPgaJS{y9F^pyjeFIN5FuW+R|JK_^YnjY3V$e%EK#q4VcMQWMdHcr0; zHL-XZ--vmWudU>DOUXEX??BZjeH(?6G!u@BxV1s|2l z$NkZ+TY?X!Zq;g)^wb}TCrh6g^CviZWdc>yX)Y@aP6y5n9FB4BeiPD(-)K^UMa#T)bJ#Ql4AmVNeXRP0D$mnozGOq~{dSv@eX6)GDHP|+@tBM;M zCO?x8n6pXZ2K=T$;`u`3S!Pndt^B-vEiFytZ`Z68F{bx?Vz@6_yX0F(t^c}Yr9ZC;cBnGWcv zh5M3NNB(U|e|r4#ipNvu`RT)(F0`_op|SPH&ud2vNVJkm+EP6zL5md}f#O}r z-lx*%BPkMk3hmUa&PfAkR@Vn-MV)VrGC_eXWyA44j{*~%QC@G-R(Fq*vX2eRAvhNh zuLJU_7za`#0d3n5Q8CESce#E&7bOH``O4Ze%^ov`19>9)HduQm*apg;4Ri~PsMGzb zHW^7WQMV6|d0CQ1uM^IlN^f<`KWiVjc1m1f)ZNoyY$$NLhj|LX>%Lh%aRQJ^KISOZ z%5bevyDYTESRn${r`)gzoaZ2W>RR<@dC=&lj5dWBAqTv3f5ok^0Pv$*cd~2AfT9IV zk#FA&+5&~ir-n>=@cnoFq#zlft)s-hd|x{uAx6u3%fNr7wg`OpeYq}8`19*E{0!Ts z%XDAj^1sLKi5itmO}7;nspkmVpR7bxy#C|*iQN7ECeGG2cd@I_4@5HhCry86|8ex0 z!D0dyq^X@uL=tT|dM|;0&G#+4GD8#Arc%aW&ThE0P9Kln$#dS{GjTkkw^T#HB$ZVX z&)=?kpZxh#%&a}r0*#%?$`fa0(P)m~S0s*wp@b1$mL8Ub>b(iH4$I+nuFq6K8Bk!; zvzj!OecMEh&d9L2J-NPF`E|)cXBfx}_S7jXw5+1%9umO`hpoRU+ya|bBzvo$qCD{w z2P8M^tpq#5#kuOMg;A}}4lt_KoaxaY42d&!ki0fs>m6(h<=pSX)~_Btw0l|E{55-2 zDZmENATKII5b(7mG*cY)SSHqb++~0~V3at8`EKactWqrTUj{XP2F_$jciHF66vl&l zm$s$Q6i{^z5P!hWR>!O}!~pHYZ>3dcWJaY{QK_;`x<)`84`v{KuBC1_jg}S)-?`TI zSi})?DRzFpw?JnMO7WCIF&Da-ad(`_myM_mv*usF%=>M49%0QLoxRwzk-G6f=(?*4L@lehEG!I+B{GZpoFwE5fwaJbClOKZn9 zit<;Cc$JU6-dM-n4rP!UuohHeo{hgZVSzxZ`*ggk|aUsp9(li5ZhV1XFW2lAT zf!O{{HPlV$HbiwdrU4^jFmzutPptpgvM@vyECRAQSG;LnM*l)XPh|#$8G--|Rg(D; zFFTc#(uye3nQW++fbw!yu+p}drWZmh9=c`>;pLUY8N)+Jn+{rHognXNdOfsMZ%WvB z76P4Wb#jsq=+$GsIG-lqZUvw&#LDuxaDFCCqco7e5c;R7eCBsm2!VRm^7cD1UWDux zQ$4W}4Ob;DREE;#syvQIr7%IdmB~^YZAxEdNdvfij%N|@-0Lun{{}h&@$gO_ImJi= zG&M#zd%0wEo_+2Gh#f8dQt;sq%SCWXS=QnC#bPcCtF}2o>D0~(U|>LW*H-tp4>CX+ zw<~}ZNVbzM^8hBl7N=Bmfs1T>U-qsy-61>61YyuhQ6(B_(o3kQ=XUO1mmJc@wl*)x zy1D-~%u`u%7|%=5>&E<>HAKHDKe#@8ORY z4kbA|s~HNT{GldKbS^LC9E(-RpsFWbb0raKlSWo~2tT>2I!j!0@dKQgy5E2Zd@WfO z6&cxsmyB2`{}~}Z7<`oUq=DUa+_;Xd=Qhf}i}Io`l9kYgb2=tFecWk>38RDk8H5>I zt!~v1w-1M;VF0(je@2XCuX>|9@#1b%vzqSc?7!3^pyNfTPZ1pvB9r)iEYHl$m_csd z^eAzr+jPA8s47M5qi}agaEjy4^9&sKTWB3SFkxpbImM&Eh% zD-{Ht;DQtW1Bo$Z*FvPSL3@Z?d`ta~V6YHBN3s3`fuzcP#kBZeiXvcy?>P?t2Ld#pJUfv6EvA{l z;UwbEOH2<%t|?t(jjFQx{&5p%x^)4Uv+n>(q`2{W&jPbFX5VR2l~xwbQ&-4Nc;4Jb zrV8a+<7nn^v}(f4vdK`ELcz^>j|*P7RN5B`?|RTzhvY}-g385~nRhq^ENSRdW<3v+_~5#2O#qpw6ExH{E55V{9PU`4 zsKBB{RD{>83$tY&hz$C{LEBV-D1-r9F-T7Z`P)bUQHmKPR%2J#IbKx`T8FJL#$Lcn zI(-f1wU9m` zti=Z&Aq_}=WqK%pD(g-k5V5@%!F(#+9DYJ|&3K)W9E&1iTlAy4XU$z~; z&lVJdgz0E-P7?_2BkmBzS{;15@ME5&0)FA`)}4tv(HU4QVzVge(r|*a!r1~Kgwd?y z{j*YuNo&YB3%Lx&djJgT?|zF82KA-)?{@%t1tuH-7j*;z{Qnu0nJm9`1|cdCiVD;@ zNJ@PEkfRt8SK&f{$ptIs9T;S6vLZV4Uk=b=Zm}ogvp){!&A@W6&DU`5%^ zNv=7%{Q)9com;E6XKx{g`)&ysL`}+Aj87$jlKBbqPuV<7HsFVU>Ro6kQjcaf0K+su zw~27M{64$ymlo@#gmss_8frdE&XR7Vi*I1_NDUI4h>S1pKPdGRIEJ}*KT(iVCY z-A5Q9E!#+=Otskgk)Dpfq+vXvBde#fx0f8DD>Nju>-*P(^T-PgL!9d>gA`vhCI!y_&J^NEO>w3Lw?t z*k5n&m24YW`n|J{GOulI!sP5w=@0- zfXrLe`rlLJWLOJeHC~oniAe+-RY_EMyP-#=ppqMS0_?mVmc{tgEl!07YE`&Dln^~ z#O-f2rzHaPVAlsye+S8XqYfEYWx%APc7!zKZb`|yaaY%R&;cHz9dJmQeqP>(Z8VJc z7NcdMI00{!jlb}gl9o3>rf$zsN7_4Qz8>4-KTV#q$J%}q#%(!T$}&i_^Xl#_{c88p zi_#4DOMyb^#5Q7fgMH+qF%eOg&NN1tY16NrRS^-`=U2ajg?N#g{m0 zPiZX8n(VZh=*Y;=nhGjImKwFOyy`6hg?myel6-759Y651Gmr2kS9B?bZlSm~H#ZHy z)?tqV1h6tusbZz=3yZ;c8+2N*|7W?}i-$<$uA27gL&i`l+uXgC>!#Xm%rm40yQ49^gH{?#lMdP>4e zGa3nv^eC#=I=2J4(TR_1i067t7aI!m^*;|!*o^aOmGNhxBlGRKDZ^QrDWVe7;cSpi zp#f-d+O(RSRPaRq9cIT^uA014gFdI302y@sus;il&rP@VE;-?RM5_-|6|&EJr=o%Q z;0demoHpGcI!cMZcN;0Cch!v9yf?8eZpHkrn_I>H!x4y&9>tMJEA^O-isOG=4|dgpj~71weMIFq1H$4d zxA$&4G&u3rdrd)<4ePz~5f9zFqo2(LI60S6Z>ms}UJhka3r8gCIm$N;rz;vXgnRht z;|TgA_1Qu5+27gvh$N{mUV70+d?@?Fd2goNE#tPXZP;$$mkjM3?y)SWRx8jO$gMky zE=uD#l#p|_B-yqmeP>#p4MK9DRvZQo2H>VQ9c~gD;m?e>g7wymm;P@Ik3Vr)2p#py zfl!b+cW0aL%_bTpthmCk7*q7QPhT(FHNJML=MNuv2GkzxVQ*#0{Px8z7wqij88GPk zdg4S+>G*AAZFukRU*(Qhmhyrq3Bw~Hnp>iZ6k*`>HPJrL`^DY9$Y_-?2J3|?=ZGTR z#8NQJSY!Vf5ct?UVzJP}4smitUbyLXtKgEf?n! zjmKyvB1jZBQyHDNA9Q1sUiY796V4PT4OI8{MrWw{9$!km7Amd5)Jl7F)tH?IR72dq zeV#3dv3qB+2)(PfYC4ir89Y3}V)yxT@(ySQJG=Uh!#9cPTygN(+B>xE&5#XiEOLRT z+e0Duo2Z&!F{=pmXi`8CUqfc{2VbVXYQeyeJJC#>y2lGFb3v?1?3F$Hg{WVw?+`A@ zB!|YkpV+@LYXteT_1Xk-g8^~>fpeVdK{VC0jsvOQGF#i{9lmE#`j#84pw(I z>TiuB{}HBF6@Wo#B~K>oi2BBcDl}RW!C~4foS@>fW~OJTV#Zj@a-~G(&ie7a%|HJA z^oBHVoFrI10*L#2QVNP$pXAONU2SrrM0pwU&IRxf2Mi$E4kGu zyhhL#^QI~!z=j#4o5pm;xQTYvplZw8QPE(5a|TpwspXzs_Uj*|EteHgvZwIX=)8-dZ_aX-QI(D&F$OgQZbJJ_s&@==}_pxaaniENW zn|u)@q0{15ojPWB+WJ0+k5#%)^b$o%IJM z2Kii_&^oRn4edj05giHp&fbq}m9p$I2YkEub#~hvMR!;em-Nr?) z;5M7AP)aFXaNHrJt(BT$?WR72xk8fgs?bYl0cIJO-Y-}`V)J&}W_05jr_*N=~>OTsL1^ zc0kD$?7k-o=kXdNXP-)&DjY&ydtl`7Hdo0>qH}6@E}E868|9bw8*mm@8|~&wV=mA zfWd%vX5-!h;UEyZE7mj&ljN+};cM7^GLw;toc+$LwhnVzT#da~ZCO*A9{)iOgRh49 z>xL$QBu3iWm=dnU+EAdy{*{Hs0p_&Ww!mQ4{YQG^!w>f_g- z2fv`*v1P=sGEdjV=F#WIA+Vcu2*EQy)>si!{_;9zx+BSWaoHbGVM5x^I)3AQd;(l)Wj64GQkxT9E7LnVxE zHiGM~R!o}YEB;?Z0!mOAWfmT}cj@BD&{K`- uEsHPN0 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

LlG|v{>o|! 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

B+e#=iQu`%!Fht+P*W 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 literal 0 HcmV?d00001 diff --git a/packages/verifier/src/views/js/index.js b/packages/verifier/src/views/js/index.js new file mode 100644 index 000000000..56a2234d4 --- /dev/null +++ b/packages/verifier/src/views/js/index.js @@ -0,0 +1,323 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +const SIGN_UP_PAGE = "signup" +const LEGAL_TERMS_PAGE = "legal-terms" +const NEW_TOKEN_PAGE = "new-token" +const REVOKE_TOKEN_PAGE = "revoke-token" + +// Sign up page +const signupContainer = document.getElementById("signup-container") +const signupInput = document.getElementById("signup-input") +const signupButton = document.getElementById("signup-button") +const loginButton = document.getElementById("login-button") +const signupError = document.getElementById("signup-error") +const validateDid = (did) => { + const parts = did.split(":") + const DOMAIN_REGEX = new RegExp( + "^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:.[a-zA-Z]{2,})+$" + ) + + return ( + parts.length === 3 && + parts[0] === "did" && + parts[1] === "web" && + DOMAIN_REGEX.test(parts[2]) + ) +} +// Sign up page listeners +signupButton.onclick = async () => { + signupError.textContent = "" + + const did = signupInput.value.trim() + + if (!did) { + signupError.textContent = "Please input a DID" + return + } + + if (!validateDid(did)) { + signupError.textContent = "Not a valid DID" + return + } + + showLegalTermsPage(did, async () => { + const res = await postUsers(did) + + if (res.errors) { + legalTermsError.textContent = res.errors + .map((errObj) => errObj.message) + .join(", ") + return false + } + + return true + }) +} + +loginButton.onclick = async () => { + signupError.textContent = "" + + const did = signupInput.value.trim() + + if (!did) return + + if (!validateDid(did)) { + signupError.textContent = "Not a valid DID" + return + } + + const res = await getUsers(did) + + if (res.errors) { + signupError.textContent = res.errors + .map((errObj) => errObj.message) + .join(", ") + return + } + + if (res.hasAcceptedLegalTerms) { + showNewTokenPage(did) + } else { + showLegalTermsPage(did, () => true) + } +} + +// Legal terms page +const legalTermsContainer = document.getElementById("legal-terms-container") +legalTermsContainer.style.display = "none" +const agreeButton = document.getElementById("agree-button") +const legalTermsError = document.getElementById("legal-terms-error") +const legalTermsBackButton = document.getElementById("legal-terms-back-button") +// Render legal terms page +const showLegalTermsPage = (did, preReqFn) => { + legalTermsError.textContent = "" + _showPage(LEGAL_TERMS_PAGE) + agreeButton.onclick = async () => { + if (!(await preReqFn())) { + return + } + + showNewTokenPage(did) + } +} +legalTermsBackButton.onclick = () => { + _showPage(SIGN_UP_PAGE) +} + +// New token page +const newTokenContainer = document.getElementById("new-token-container") +newTokenContainer.style.display = "none" +const newTokenButton = document.getElementById("new-token-button") +const currentClientsList = document.getElementById("current-clients-list") +const newTokenResultWarning = document.getElementById( + "new-token-result-warning" +) +const newTokenResult = document.getElementById("new-token-result") +const newTokenError = document.getElementById("new-token-error") +// Render new token page +const showNewTokenPage = async (did) => { + _showPage(NEW_TOKEN_PAGE) + newTokenResultWarning.style.display = "none" + newTokenResult.style.display = "none" + newTokenResult.textContent = "" + newTokenError.textContent = "" + + await renderCurrentClients(did) + newTokenButton.onclick = async () => { + newTokenResultWarning.style.display = "none" + newTokenResult.style.display = "none" + newTokenResult.textContent = "" + newTokenError.textContent = "" + + const res = await postApiClients(did) + + if (res.errors) { + newTokenError.textContent = res.errors + .map((errObj) => errObj.message) + .join(", ") + return + } + + newTokenResultWarning.style.display = "block" + newTokenResult.style.display = "block" + newTokenResult.textContent = `Token: ${res.id}` + renderCurrentClients(did) + } +} +const renderCurrentClients = async (did) => { + currentClientsList.innerHTML = "" + + const clients = await getApiClients(did) + + clients.forEach((c) => { + const liNode = document.createElement("li") + liNode.classList.add("padding-5") + + const spanNode = document.createElement("span") + spanNode.textContent = c.id + spanNode.classList.add("padding-5") + liNode.appendChild(spanNode) + + const buttonNode = document.createElement("button") + buttonNode.textContent = "Revoke" + buttonNode.classList.add("action-button") + buttonNode.dataset.token = c.id + buttonNode.onclick = (e) => showRevokeTokenPage(did, e.target.dataset.token) + + liNode.appendChild(buttonNode) + + currentClientsList.appendChild(liNode) + }) +} + +// Revoke token page +const revokeTokenContainer = document.getElementById("revoke-token-container") +revokeTokenContainer.style.display = "none" +const revokeMaskedToken = document.getElementById("revoke-masked-token") +const revokeTokenInput = document.getElementById("revoke-token-input") +const revokeReasonInput = document.getElementById("revoke-reason-input") +const revokeTokenButton = document.getElementById("revoke-token-button") +const revokeTokenResult = document.getElementById("revoke-token-result") +const revokeTokenError = document.getElementById("revoke-token-error") +const revokeBackButton = document.getElementById("revoke-back-button") +// Render revoke token page +const showRevokeTokenPage = (did, token) => { + _showPage(REVOKE_TOKEN_PAGE) + revokeTokenInput.value = "" + revokeReasonInput.value = "" + revokeTokenResult.textContent = "" + revokeTokenError.textContent = "" + + revokeMaskedToken.textContent = `Token: ${token}` + + revokeTokenButton.onclick = async () => { + revokeTokenResult.textContent = "" + revokeTokenError.textContent = "" + + const apiToken = revokeTokenInput.value.trim() + const revokedReason = revokeReasonInput.value.trim() + + if (!apiToken && !revokedReason) return + + if (!apiToken) { + revokeTokenError.textContent = "Full Api Token is missing" + return + } + + if (token.slice(-4) !== apiToken.slice(-4)) { + revokeTokenError.textContent = + "Full Api Token does not match Masked Api Token" + return + } + + const res = await revokeApiClients(apiToken, revokedReason) + + if (res.errors) { + revokeTokenError.textContent = res.errors + .map((errObj) => errObj.message) + .join(", ") + return + } + + revokeTokenResult.textContent = "Success!" + } + revokeBackButton.onclick = () => showNewTokenPage(did) +} + +// APIs +async function postUsers(did) { + const data = { + did + } + + const response = await fetch(`${baseUrl}/api/v1/users`, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(data) + }) + + return await response.json() +} + +async function getUsers(did) { + const response = await fetch(`${baseUrl}/api/v1/users/${did}`, { + method: "GET" + }) + + return await response.json() +} + +async function getApiClients(did) { + const response = await fetch( + `${baseUrl}/api/v1/apiClients?${new URLSearchParams({ did })}`, + { + method: "GET" + } + ) + + return await response.json() +} + +async function postApiClients(did) { + const data = { + did + } + const response = await fetch(`${baseUrl}/api/v1/apiClients`, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(data) + }) + return await response.json() +} + +async function revokeApiClients(apiToken, revokedReason) { + const options = { + method: "PATCH", + headers: { + "Content-Type": "application/json", + "X-API-Key": apiToken + } + } + + if (revokedReason) { + Object.assign(options, { + body: JSON.stringify({ + revokedReason + }) + }) + } + const data = { + revokedReason + } + const response = await fetch(`${baseUrl}/api/v1/apiClients`, options) + return await response.json() +} + +function _showPage(page) { + signupContainer.style.display = page === SIGN_UP_PAGE ? "block" : "none" + legalTermsContainer.style.display = + page === LEGAL_TERMS_PAGE ? "block" : "none" + newTokenContainer.style.display = page === NEW_TOKEN_PAGE ? "block" : "none" + revokeTokenContainer.style.display = + page === REVOKE_TOKEN_PAGE ? "block" : "none" +} diff --git a/packages/verifier/src/views/pages/index.ejs b/packages/verifier/src/views/pages/index.ejs new file mode 100644 index 000000000..974847070 --- /dev/null +++ b/packages/verifier/src/views/pages/index.ejs @@ -0,0 +1,28 @@ + + + + <%- include('../partials/head'); %> + + +

+
+ Circle Icon +
+
+ Verite Banner + <%- include('../partials/signup') %> <%-include('../partials/new-token') + %> <%-include('../partials/revoke-token') %> + <%-include('../partials/legal-terms') %> +
+ + + + diff --git a/packages/verifier/src/views/partials/head.ejs b/packages/verifier/src/views/partials/head.ejs new file mode 100644 index 000000000..94f5daa38 --- /dev/null +++ b/packages/verifier/src/views/partials/head.ejs @@ -0,0 +1,35 @@ +Circle Verifier + + + + + + + + + diff --git a/packages/verifier/src/views/partials/legal-terms.ejs b/packages/verifier/src/views/partials/legal-terms.ejs new file mode 100644 index 000000000..6596c757a --- /dev/null +++ b/packages/verifier/src/views/partials/legal-terms.ejs @@ -0,0 +1,263 @@ +
diff --git a/packages/verifier/src/views/partials/new-token.ejs b/packages/verifier/src/views/partials/new-token.ejs new file mode 100644 index 000000000..564770897 --- /dev/null +++ b/packages/verifier/src/views/partials/new-token.ejs @@ -0,0 +1,12 @@ +
+

Active Verification Access Tokens

+
    + +

    +

    + Make sure to copy your new token. You won't be able to see it again! +

    +

    +
    diff --git a/packages/verifier/src/views/partials/revoke-token.ejs b/packages/verifier/src/views/partials/revoke-token.ejs new file mode 100644 index 000000000..d4059fbed --- /dev/null +++ b/packages/verifier/src/views/partials/revoke-token.ejs @@ -0,0 +1,27 @@ +
    +

    +

    + +

    +

    + +

    + +

    +

    + +
    diff --git a/packages/verifier/src/views/partials/signup.ejs b/packages/verifier/src/views/partials/signup.ejs new file mode 100644 index 000000000..b4b022bf8 --- /dev/null +++ b/packages/verifier/src/views/partials/signup.ejs @@ -0,0 +1,16 @@ +
    + +
    + + +
    + +

    +
    diff --git a/packages/verifier/test/.eslintrc.js b/packages/verifier/test/.eslintrc.js new file mode 100644 index 000000000..2436c1b85 --- /dev/null +++ b/packages/verifier/test/.eslintrc.js @@ -0,0 +1,39 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * This file provides the test-specific ESLint configuration. + * + * This file extends the root-level config by setting the environment to be + * `jest`, which declares a few global variables (such as `describe`, `test`, + * `expect`, etc.). It also disables some rules that are in conflict with Jest + * testing. + * + * ESLint will continue looking into parent folders for a .eslintrc.js file + * until it finds one with `root: true`. + */ +module.exports = { + env: { + jest: true + }, + rules: { + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off" + } +} diff --git a/packages/verifier/test/api/apiClients/createApiClient.test.ts b/packages/verifier/test/api/apiClients/createApiClient.test.ts new file mode 100644 index 000000000..d8673562f --- /dev/null +++ b/packages/verifier/test/api/apiClients/createApiClient.test.ts @@ -0,0 +1,64 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import request from "supertest" + +import { app } from "../../../src/app" +import prisma from "../../../src/lib/database/prisma" + +const TEST_DID = "did:web:example.com" + +beforeAll(async () => { + await request(app).post("/api/v1/users").send({ + did: TEST_DID + }) +}) + +afterAll(async () => { + await prisma.user.deleteMany({ + where: { + did: TEST_DID + } + }) +}) + +test("POST /api/v1/apiClients creates an API client with user", async () => { + const { statusCode, body } = await request(app) + .post("/api/v1/apiClients") + .send({ + did: TEST_DID + }) + + expect(statusCode).toBe(200) + expect(body.id).toBeDefined() + expect(body.did).toEqual(TEST_DID) + + await prisma.apiClient.deleteMany({ + where: { + user: { + did: TEST_DID + } + } + }) +}) + +test("POST /api/v1/apiClients cannot create API client without user", async () => { + const { statusCode } = await request(app).post("/api/v1/apiClients").send() + + expect(statusCode).toBe(400) +}) diff --git a/packages/verifier/test/api/apiClients/revoke.test.ts b/packages/verifier/test/api/apiClients/revoke.test.ts new file mode 100644 index 000000000..515f3ef68 --- /dev/null +++ b/packages/verifier/test/api/apiClients/revoke.test.ts @@ -0,0 +1,165 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { expect, jest, test } from "@jest/globals" +import request from "supertest" + +import { app } from "../../../src/app" +import prisma from "../../../src/lib/database/prisma" + +const TEST_DID = "did:web:example.com" + +beforeAll(async () => { + await request(app).post("/api/v1/users").send({ + did: TEST_DID + }) +}) + +afterAll(async () => { + await prisma.user.deleteMany({ + where: { + did: TEST_DID + } + }) +}) + +test("POST /api/v1/apiClients/revoke cannot revoke without auth", async () => { + const { statusCode } = await request(app).patch("/api/v1/apiClients").send() + + expect(statusCode).toBe(401) +}) + +test("POST /api/v1/apiClients/revoke cannot revoke without an api client", async () => { + const { statusCode } = await request(app).patch("/api/v1/apiClients").send() + + expect(statusCode).toBe(401) +}) + +test("POST /api/v1/apiClients/revoke cannot revoke without the valid api token", async () => { + const { body } = await request(app).post("/api/v1/apiClients").send({ + did: TEST_DID + }) + + const { statusCode } = await request(app) + .patch("/api/v1/apiClients") + .set("X-API-Key", "123") + .send() + + expect(statusCode).toBe(401) + + await prisma.apiClient.delete({ + where: { + id: body.id + } + }) +}) + +test("POST /api/v1/apiClients/revoke cannot revoke with the expired api token", async () => { + const { + body: { id, createdAt } + } = await request(app).post("/api/v1/apiClients").send({ + did: TEST_DID + }) + + // Change time to 500ms after expiry date + const expiredIn = 2147483647 * 1000 + const dateNowSpy = jest + .spyOn(Date, "now") + .mockImplementation( + () => new Date(createdAt as string).getTime() + expiredIn + 500 + ) + + const { statusCode } = await request(app) + .patch("/api/v1/apiClients") + .set("X-API-Key", id as string) + .send({ + id, + revokedReason: "test" + }) + + expect(statusCode).toBe(401) + + dateNowSpy.mockRestore() + + await prisma.apiClient.delete({ + where: { + id + } + }) +}) + +test("POST /api/v1/apiClients/revoke revokes api client successfully", async () => { + const { + body: { id } + } = await request(app).post("/api/v1/apiClients").send({ + did: TEST_DID + }) + + const revokedReason = "Rotate secret" + const { statusCode, body } = await request(app) + .patch("/api/v1/apiClients") + .set("X-API-Key", id as string) + .send({ + revokedReason + }) + + expect(statusCode).toBe(200) + expect(body.id).toEqual(id) + expect(body.revokedAt).toBeDefined() + expect(body.revokedReason).toEqual(revokedReason) + expect(body.revokedBy).toBeDefined() + + await prisma.apiClient.delete({ + where: { + id + } + }) +}) + +test("POST /api/v1/apiClients/revoke cannot revoke an api client twice", async () => { + const { + body: { id } + } = await request(app).post("/api/v1/apiClients").send({ + did: TEST_DID + }) + + const revokedReason = "Rotate secret" + const res1 = await request(app) + .patch("/api/v1/apiClients") + .set("X-API-Key", id as string) + .send({ + revokedReason + }) + + expect(res1.statusCode).toBe(200) + + const res2 = await request(app) + .patch("/api/v1/apiClients") + .set("X-API-Key", id as string) + .send({ + revokedReason + }) + + expect(res2.statusCode).toBe(401) + + await prisma.apiClient.delete({ + where: { + id + } + }) +}) diff --git a/packages/verifier/test/api/ping.test.ts b/packages/verifier/test/api/ping.test.ts new file mode 100644 index 000000000..0a5cbc567 --- /dev/null +++ b/packages/verifier/test/api/ping.test.ts @@ -0,0 +1,28 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import request from "supertest" + +import { app } from "../../src/app" + +test("GET /ping responds with a 200", async () => { + const { statusCode, body } = await request(app).get("/ping") + + expect(statusCode).toBe(200) + expect(body).toEqual({ status: "ok" }) +}) diff --git a/packages/verifier/test/api/users/createUser.test.ts b/packages/verifier/test/api/users/createUser.test.ts new file mode 100644 index 000000000..bf5106651 --- /dev/null +++ b/packages/verifier/test/api/users/createUser.test.ts @@ -0,0 +1,86 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import request from "supertest" + +import { app } from "../../../src/app" +import prisma from "../../../src/lib/database/prisma" + +const TEST_DID = "did:web:example.com" + +afterEach(async () => { + await prisma.user.deleteMany({ + where: { + did: TEST_DID + } + }) +}) + +test("POST /api/v1/users creates a user with a given DID", async () => { + const { statusCode, body } = await request(app).post("/api/v1/users").send({ + did: TEST_DID + }) + + expect(statusCode).toBe(200) + expect(body.did).toEqual(TEST_DID) +}) + +test("POST /api/v1/users cannot create an API client with non did web type", async () => { + const NON_DID_WEB = + "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU" + + const { statusCode } = await request(app).post("/api/v1/users").send({ + did: NON_DID_WEB + }) + expect(statusCode).toBe(400) +}) + +test("POST /api/v1/users cannot a user with a duplicate DID", async () => { + await request(app).post("/api/v1/users").send({ + did: TEST_DID + }) + + const { statusCode } = await request(app).post("/api/v1/users").send({ + did: TEST_DID + }) + + expect(statusCode).toBe(400) +}) + +test("POST /api/v1/users cannot a user with an invalid DID", async () => { + const didWithSpace = "did:web:circle .com" + let res = await request(app).post("/api/v1/users").send({ + did: didWithSpace + }) + expect(res.statusCode).toBe(400) + + const didWithSpecialChar = "did:web:circle%23.com" + res = await request(app).post("/api/v1/users").send({ + did: didWithSpecialChar + }) + + expect(res.statusCode).toBe(400) + + const didLongerThan253Char = + "thisisaverylongthisisaverylongthisisaverylongthisisaverylongthisisaverylongthisisaverylongthisisaverylongthisisaverylongthisisaverylongthisisaverylongthisisaverylongthisisaverylongthisisaverylongthisisaverylongthisisaverylongaverylongaverylongdomainname.com" + res = await request(app).post("/api/v1/users").send({ + did: didLongerThan253Char + }) + + expect(res.statusCode).toBe(400) +}) diff --git a/packages/verifier/test/api/users/getUser.test.ts b/packages/verifier/test/api/users/getUser.test.ts new file mode 100644 index 000000000..4db4fb89f --- /dev/null +++ b/packages/verifier/test/api/users/getUser.test.ts @@ -0,0 +1,50 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import request from "supertest" + +import { app } from "../../../src/app" +import prisma from "../../../src/lib/database/prisma" + +const TEST_DID = "did:web:example.com" + +afterEach(async () => { + await prisma.user.deleteMany({ + where: { + did: TEST_DID + } + }) +}) + +test("GET /api/v1/users gets a user with a given DID", async () => { + await request(app).post("/api/v1/users").send({ + did: TEST_DID + }) + const { statusCode, body } = await request(app).get( + `/api/v1/users/${TEST_DID}` + ) + + expect(statusCode).toBe(200) + expect(body.did).toEqual(TEST_DID) + expect(body.hasAcceptedLegalTerms).toBeTruthy() +}) + +test("GET /api/v1/users returns 404 for user not found", async () => { + const { statusCode } = await request(app).get(`/api/v1/users/${TEST_DID}`) + expect(statusCode).toBe(404) +}) diff --git a/packages/verifier/test/api/verifications/create.test.ts b/packages/verifier/test/api/verifications/create.test.ts new file mode 100644 index 000000000..92f145f20 --- /dev/null +++ b/packages/verifier/test/api/verifications/create.test.ts @@ -0,0 +1,170 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import request from "supertest" + +import { _exportedForUnitTests } from "../../../src/api/verifications/create" +import { app } from "../../../src/app" + +test("POST /api/v1/verifications creates a verification for Ethereum and responds with a 201", async () => { + const { statusCode, body } = await request(app) + .post("/api/v1/verifications") + .send({ + network: "ethereum", + subject: "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + chainId: 1337, + registryAddress: "0x0000000000000000000000000000000000000000", + name: "VerificationRegistry", + version: "1" + }) + + expect(statusCode).toBe(201) + expect(body).toMatchObject({ + challengeTokenUrl: expect.stringMatching(`(.*)/verifications/(.*)$`) + }) +}) + +test("POST /api/v1/verifications creates a verification for Solana and responds with a 400", async () => { + const { statusCode, body } = await request(app) + .post("/api/v1/verifications") + .send({ + network: "solana", + subject: "AWPiwzy1yY1gMbM5zEvVYG6qDCLjrwAojDMrk3ajbwWj", + chainId: "localnet", + name: "VerificationRegistry", + version: "1" + }) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [{ message: "Unsupported network: solana" }] + }) +}) + +test("POST /api/v1/verifications returns an error if no subject is provided", async () => { + const { statusCode, body } = await request(app) + .post("/api/v1/verifications") + .send({ + network: "ethereum" + }) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [{ message: "subject is required" }] + }) +}) + +test("POST /api/v1/verifications returns an error if no network is provided", async () => { + const { statusCode, body } = await request(app) + .post("/api/v1/verifications") + .send({ subject: "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" }) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [{ message: "network is required" }] + }) +}) + +test("POST /api/v1/verifications fails if an unsupported network is given", async () => { + const { statusCode, body } = await request(app) + .post("/api/v1/verifications") + .send({ + subject: "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + network: "bitcoin" + }) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [{ message: `Unsupported network: bitcoin` }] + }) +}) + +test("POST /api/v1/verifications fails if given an invalid subject address for ethereum", async () => { + const { statusCode, body } = await request(app) + .post("/api/v1/verifications") + .send({ + subject: "AWPiwzy1yY1gMbM5zEvVYG6qDCLjrwAojDMrk3ajbwWj", // Solana Address + network: "ethereum" + }) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [{ message: `Invalid subject address for ethereum` }] + }) +}) + +test("fails if given an invalid subject address for solana", () => { + const subject = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" // Ethereum Address + const network = "solana" + + expect(() => + _exportedForUnitTests.validateSubjectAddress(network, subject) + ).toThrow("Invalid subject address for solana") +}) + +test("POST /api/v1/verifications fails if an invalid chainId is provided for ethereum", async () => { + const { statusCode, body } = await request(app) + .post("/api/v1/verifications") + .send({ + subject: "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + network: "ethereum", + chainId: "not a number" + }) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [{ message: "chainId must be a number" }] + }) +}) + +test("POST /api/v1/verifications fails if a negative chainId is provided for ethereum", async () => { + const { statusCode, body } = await request(app) + .post("/api/v1/verifications") + .send({ + subject: "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + network: "ethereum", + chainId: -1 + }) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [{ message: "chainId must be greater than 0" }] + }) +}) + +test("fails if an invalid chainId is provided for solana", () => { + const network = "solana" + let chainId: string | number + + chainId = "fakenet" + expect(() => _exportedForUnitTests.validateChainId(network, chainId)).toThrow( + "Invalid chainId" + ) + + chainId = 1 + expect(() => _exportedForUnitTests.validateChainId(network, chainId)).toThrow( + "chainId must be a string" + ) +}) diff --git a/packages/verifier/test/api/verifications/show.test.ts b/packages/verifier/test/api/verifications/show.test.ts new file mode 100644 index 000000000..663b94e74 --- /dev/null +++ b/packages/verifier/test/api/verifications/show.test.ts @@ -0,0 +1,44 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import request from "supertest" + +import { app } from "../../../src/app" +import { verificationFactory } from "../../factories/verification" + +test("GET /api/v1/verifications/:id responds with the verification offer", async () => { + const verification = await verificationFactory() + + const { statusCode, body } = await request(app).get( + `/api/v1/verifications/${verification.id}` + ) + + expect(statusCode).toBe(200) +}) + +test("GET /api/v1/verifications/:id responds with a 404 if given an invalid id", async () => { + const verifId = "invalid-id" + const { statusCode, body } = await request(app).get( + `/api/v1/verifications/${verifId}` + ) + expect(statusCode).toBe(404) + expect(body).toEqual({ + status: 404, + errors: [{ message: `Verification not found for ${verifId}` }] + }) +}) diff --git a/packages/verifier/test/api/verifications/status.test.ts b/packages/verifier/test/api/verifications/status.test.ts new file mode 100644 index 000000000..3effb8326 --- /dev/null +++ b/packages/verifier/test/api/verifications/status.test.ts @@ -0,0 +1,83 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import request from "supertest" + +import { app } from "../../../src/app" +import { verificationFactory } from "../../factories/verification" + +test("GET /api/v1/verifications/:id/status responds with the status and a verification result", async () => { + const verification = await verificationFactory({ + status: "approved", + verificationResult: { foo: "bar" } + }) + + const { statusCode, body } = await request(app).get( + `/api/v1/verifications/${verification.id}/status` + ) + + expect(statusCode).toBe(200) + expect(body).toMatchObject({ + status: "approved", + verificationResult: verification.verificationResult + }) +}) + +test("GET /api/v1/verifications/:id/status responds with a failure status", async () => { + const verification = await verificationFactory({ + status: "rejected", + statusDetail: "Credential issued by untrusted issuer" + }) + + const { statusCode, body } = await request(app).get( + `/api/v1/verifications/${verification.id}/status` + ) + + expect(statusCode).toBe(400) + expect(body).toMatchObject({ + status: "rejected", + message: "Credential issued by untrusted issuer" + }) +}) + +test("GET /api/v1/verifications/:id/status responds with a pending status", async () => { + const verification = await verificationFactory({ + status: "created" + }) + + const { statusCode, body } = await request(app).get( + `/api/v1/verifications/${verification.id}/status` + ) + + expect(statusCode).toBe(200) + expect(body).toMatchObject({ + status: "created" + }) +}) + +test("GET /api/v1/verifications/:id/status responds with a 404 if given an invalid id", async () => { + const verifId = "invalid-id" + const { statusCode, body } = await request(app).get( + `/api/v1/verifications/${verifId}/status` + ) + expect(statusCode).toBe(404) + expect(body).toEqual({ + status: 404, + errors: [{ message: `Verification not found for ${verifId}` }] + }) +}) diff --git a/packages/verifier/test/api/verifications/submit.test.ts b/packages/verifier/test/api/verifications/submit.test.ts new file mode 100644 index 000000000..8110e5a2f --- /dev/null +++ b/packages/verifier/test/api/verifications/submit.test.ts @@ -0,0 +1,279 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import nock from "nock" +import request from "supertest" + +import { app } from "../../../src/app" +import { + ETH_ADDRESS, + generateRandomEthAddress, + getDidPkhFromEthAddress, + signerFactory +} from "../../factories/did" +import { jwtFactory } from "../../factories/jwt" +import { presentationDefinitionFactory } from "../../factories/presentation-definition" +import { + revocationStatusListFactory, + encodedRevocationListCredentialFactory +} from "../../factories/revocationList" +import { verifiableCredentialFactory } from "../../factories/verifiable-credential" +import { + decodedVerifiablePresentationFactory, + verifiablePresentationFactory +} from "../../factories/verifiable-presentation" +import { verificationFactory } from "../../factories/verification" + +test("POST /api/v1/verifications/ verifies the submission, persists it to the database and responds successfully for ethereum", async () => { + const vcIssuer = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${vcIssuer.did}$` + }) + const verification = await verificationFactory({ presentationDefinition }) + + const submission = await verifiablePresentationFactory({ + challenge: verification.challenge, + vcIssuer + }) + + const { statusCode, body } = await request(app) + .post(`/api/v1/verifications/${verification.id}`) + .set("Content-Type", "text/plain") + .send(submission) + + expect(statusCode).toBe(201) + expect(body).toMatchObject({ + status: "success", + verificationResult: { + expiration: expect.any(Number), + schema: [ + "https://verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + ], + subject: ETH_ADDRESS + }, + signature: expect.any(String) + }) +}) + +test("POST /api/v1/verifications/ verifies the submission, persists it to the database and responds successfully for solana", async () => { + const vcIssuer = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${vcIssuer.did}$` + }) + const ethAddress = generateRandomEthAddress() + const verification = await verificationFactory({ + network: "ethereum", + subject: ethAddress, + presentationDefinition + }) + + const vcSubject = getDidPkhFromEthAddress(ethAddress) + const submission = await verifiablePresentationFactory({ + challenge: verification.challenge, + vcIssuer, + subject: vcSubject + }) + + const { statusCode, body } = await request(app) + .post(`/api/v1/verifications/${verification.id}`) + .set("Content-Type", "text/plain") + .send(submission) + + expect(statusCode).toBe(201) + expect(body).toMatchObject({ + status: "success", + verificationResult: { + expiration: expect.any(Number), + schema: [ + "https://verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + ], + subject: ethAddress + }, + signature: expect.any(String) + }) +}) + +test("POST /api/v1/verifications/ fails if the VC is expired", async () => { + const verification = await verificationFactory() + + const subject = await signerFactory() + const vcJWT = await verifiableCredentialFactory({ + subject: subject.did, + expirationDate: new Date(Date.now() - 1000) + }) + + const submission = await verifiablePresentationFactory({ + holder: subject, + vcJWT, + challenge: verification.challenge + }) + + const { statusCode, body } = await request(app) + .post(`/api/v1/verifications/${verification.id}`) + .set("Content-Type", "text/plain") + .send(submission) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [{ message: "Credential has expired." }] + }) +}) + +test("POST /api/v1/verifications/ fails if the VC is revoked", async () => { + const verification = await verificationFactory() + + const credentialStatus = revocationStatusListFactory(42) + const vcJWT = await verifiableCredentialFactory({ + credentialStatus + }) + const revocationList = await encodedRevocationListCredentialFactory({ + statusList: [42] + }) + + nock("https://example.com").get("/revocation-list").reply(200, revocationList) + + const submission = await verifiablePresentationFactory({ + vcJWT, + challenge: verification.challenge + }) + + const { statusCode, body } = await request(app) + .post(`/api/v1/verifications/${verification.id}`) + .set("Content-Type", "text/plain") + .send(submission) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [ + { + message: "Credential has been revoked." + } + ] + }) +}) + +test("POST /api/v1/verifications/ fails if the wrong content-type is provided", async () => { + const submission = await jwtFactory() + const verification = await verificationFactory() + + const { statusCode, body } = await request(app) + .post(`/api/v1/verifications/${verification.id}`) + .set("Content-Type", "application/json") + .send(submission) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [{ message: "Unexpected token e in JSON at position 0" }] + }) +}) + +test("POST /api/v1/verifications/ fails if the verification cannot be found", async () => { + const { statusCode } = await request(app).post("/verifications/foo") + + expect(statusCode).toBe(404) +}) + +test("POST /api/v1/verifications/ fails if the verification has already had a submission", async () => { + /** + * Mock an existing Verification in the database + */ + const vcIssuer = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${vcIssuer.did}$` + }) + const credentialSubmission = await decodedVerifiablePresentationFactory() + const verification = await verificationFactory({ + credentialSubmission, + presentationDefinition + }) + + /** + * Build a new, valid verification submission for the same endpoint + */ + const submission = await verifiablePresentationFactory({ + challenge: verification.challenge, + vcIssuer + }) + + const { statusCode, body } = await request(app) + .post(`/api/v1/verifications/${verification.id}`) + .set("Content-Type", "text/plain") + .send(submission) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [{ message: "Verification already complete" }] + }) +}) + +test("POST /api/v1/verifications/ fails if there is no body", async () => { + const verification = await verificationFactory() + + const { statusCode } = await request(app).post( + `/api/v1/verifications/${verification.id}` + ) + + expect(statusCode).toBe(400) +}) + +test("POST /api/v1/verifications/ fails if the body is not a valid JWT", async () => { + const verification = await verificationFactory() + + const { statusCode } = await request(app).post( + `/api/v1/verifications/${verification.id}` + ) + + expect(statusCode).toBe(400) +}) + +test("POST /api/v1/verifications/ fails if verification subject does not match the VC subject", async () => { + const verificationSubject = generateRandomEthAddress() + const verification = await verificationFactory({ + subject: verificationSubject + }) + + const vcSubjectAddress = generateRandomEthAddress() + const vcSubject = getDidPkhFromEthAddress(vcSubjectAddress) + const vcJWT = await verifiableCredentialFactory({ + subject: vcSubject + }) + + const submission = await verifiablePresentationFactory({ + vcJWT, + challenge: verification.challenge + }) + + const { statusCode, body } = await request(app) + .post(`/api/v1/verifications/${verification.id}`) + .set("Content-Type", "text/plain") + .send(submission) + + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [ + { + message: `Credential subject does not match the subject in the verification request. ${vcSubjectAddress} is not equal to ${verificationSubject}` + } + ] + }) +}) diff --git a/packages/verifier/test/factories/did.ts b/packages/verifier/test/factories/did.ts new file mode 100644 index 000000000..a285f54f9 --- /dev/null +++ b/packages/verifier/test/factories/did.ts @@ -0,0 +1,100 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { randomBytes } from "crypto" + +import { generate } from "@transmute/did-key.js" +import bs58 from "bs58" +import { EdDSASigner, ES256KSigner } from "did-jwt" +import { Issuer } from "did-jwt-vc" +import { Wallet } from "ethers" + +type DidKey = { + id: string + type: string + controller: string + publicKeyBase58: string + privateKeyBase58: string +} + +type DidDocument = { + id: string + verificationMethod: Omit[] +} + +type DidGeneration = { didDocument: DidDocument; keys: DidKey[] } + +export const didFactory = async ( + type: "ed25519" | "secp256k1" = "ed25519", + ld = true +): Promise => { + const didKey = await generate( + type, + { secureRandom: () => randomBytes(32) }, + { accept: ld ? "application/did+ld+json" : "application/did+json" } + ) + + return didKey as DidGeneration +} + +export const generateRandomEthAddress = (): string => { + const privateKey = `0x${randomBytes(32).toString("hex")}` + const wallet = new Wallet(privateKey) + return wallet.address +} + +export const generateRandomDidPkh = (): string => { + return `did:pkh:eip155:1:${generateRandomEthAddress()}` +} + +export const getDidPkhFromEthAddress = (ethAddress: string): string => { + return `did:pkh:eip155:1:${ethAddress}` +} + +export const ETH_ADDRESS = generateRandomEthAddress() +export const DID_PKH = getDidPkhFromEthAddress(ETH_ADDRESS) + +export enum SingerAlg { + EdDSA = "EdDSA", + ES256K = "ES256K" +} + +/** + * Generate an "Issuer" type (a signer for the JWT) with a randomly selected + * algorithm, either EdDSA or ES256K. + */ +export const signerFactory = async (algorithm?: SingerAlg): Promise => { + let alg: SingerAlg + if (algorithm) { + alg = algorithm + } else { + alg = Math.round(Math.random()) ? SingerAlg.EdDSA : SingerAlg.ES256K + } + const did = await didFactory( + alg === SingerAlg.EdDSA ? "ed25519" : "secp256k1" + ) + const privateKey = bs58.decode(did.keys[0].privateKeyBase58) + const signer = + alg === SingerAlg.EdDSA ? EdDSASigner(privateKey) : ES256KSigner(privateKey) + + return { + did: did.didDocument.id, + signer, + alg + } +} diff --git a/packages/verifier/test/factories/jwt.ts b/packages/verifier/test/factories/jwt.ts new file mode 100644 index 000000000..a2d3b4dd0 --- /dev/null +++ b/packages/verifier/test/factories/jwt.ts @@ -0,0 +1,47 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { createJWT, ES256KSigner } from "did-jwt" + +/** + * Returns a JWT + * + * In practice, you must secure the key passed to ES256KSigner. The key + * provided in code below is for informational purposes only. + * + * Note that this snippet was drawn from the did-jwt README + * https://github.com/decentralized-identity/did-jwt/blob/db8f93a2d3e0457ad00f8c32a3925da1a8265f93/README.md?plain=1#L36-L51 + * @returns + */ +export const jwtFactory = async () => { + const signer = ES256KSigner( + "278a5de700e29faae8e40e366ec5012b5ec63d36ec77e8a2417154cc1d25383f" + ) + + const jwt = await createJWT( + { + aud: "did:ethr:0xf3beac30c498d9e26865f34fcaa57dbb935b0d74", + exp: 10, + name: "uPort Developer" + }, + { issuer: "did:ethr:0xf3beac30c498d9e26865f34fcaa57dbb935b0d74", signer }, + { alg: "ES256K" } + ) + + return jwt +} diff --git a/packages/verifier/test/factories/presentation-definition.ts b/packages/verifier/test/factories/presentation-definition.ts new file mode 100644 index 000000000..5f2937513 --- /dev/null +++ b/packages/verifier/test/factories/presentation-definition.ts @@ -0,0 +1,123 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { v4 as uuidv4 } from "uuid" + +import { + InputDescriptorField, + PresentationDefinition +} from "../../src/lib/presentation-definition" + +type Opts = { + id?: string + trustedIssuers?: string + schema?: string + additionalFields?: InputDescriptorField[] +} + +export const presentationDefinitionFactory = ({ + id, + trustedIssuers, + schema, + additionalFields +}: Opts = {}): PresentationDefinition => { + const fields: InputDescriptorField[] = [ + { + path: ["$.issuer.id", "$.issuer", "$.vc.issuer", "$.iss"], + purpose: "The issuer of the credential must be trusted", + predicate: "required", + filter: { + pattern: trustedIssuers ?? "^did:web:circle.com$", + type: "string" + } + }, + { + path: [ + `$.credentialSubject.KYBPAMLAttestation.process`, + `$.vc.credentialSubject.KYBPAMLAttestation.process`, + `$.KYBPAMLAttestation.process` + ], + purpose: `The process used for KYC/AML.`, + predicate: "required", + filter: { + type: "string" + } + }, + { + path: [ + `$.credentialSubject.KYBPAMLAttestation.approvalDate`, + `$.vc.credentialSubject.KYBPAMLAttestation.approvalDate`, + `$.KYBPAMLAttestation.approvalDate` + ], + purpose: `The date upon which this KYC/AML Attestation was issued.`, + predicate: "required", + filter: { + type: "string", + pattern: + "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$" + } + } + ] + + return { + id: id ?? uuidv4(), + format: { + jwt: { + alg: ["EdDSA", "ES256K"] + }, + jwt_vc: { + alg: ["EdDSA", "ES256K"] + }, + jwt_vp: { + alg: ["EdDSA", "ES256K"] + } + }, + input_descriptors: [ + { + id: "kybpaml_input", + name: "Proof of KYC", + purpose: "Please provide a valid credential from a KYC/AML issuer", + schema: [ + { + uri: + schema ?? + "https://verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person", + required: true + } + ], + constraints: { + statuses: { + active: { + directive: "required" + }, + revoked: { + directive: "disallowed" + } + }, + is_holder: [ + { + field_id: ["subjectId"], + directive: "required" + } + ], + fields: fields.concat(additionalFields ?? []) + } + } + ] + } +} diff --git a/packages/verifier/test/factories/revocationList.ts b/packages/verifier/test/factories/revocationList.ts new file mode 100644 index 000000000..100abbe3e --- /dev/null +++ b/packages/verifier/test/factories/revocationList.ts @@ -0,0 +1,87 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { BitBuffer } from "bit-buffers" +import { createVerifiableCredentialJwt, CredentialPayload } from "did-jwt-vc" + +import { decodeVerifiableCredential } from "../../src/lib/coder" +import { + EncodedRevocationListCredential, + RevocationList, + StatusList2021Entry, + RevocationListCredential +} from "../../src/types/credentials" + +import { signerFactory } from "./did" + +type RevocationListCredentialFactoryOptions = { + /** + * The status list (defaults to []) + */ + statusList?: number[] + /** + * The URL for loading the status list + */ + url?: string +} + +export const revocationStatusListFactory = ( + index: number | string = "42" +): StatusList2021Entry => { + return { + id: `https://example.com/revocation-list#${index}`, + type: "StatusList2021Entry", + statusListIndex: index.toString(), + statusListCredential: "https://example.com/revocation-list" + } +} + +export const encodedRevocationListCredentialFactory = async ({ + statusList, + url +}: RevocationListCredentialFactoryOptions = {}): Promise => { + const signer = await signerFactory() + const encodedList = BitBuffer.fromIndexArray(statusList ?? []).toBitstring() + const statusListUrl = url ?? "https://example.com/revocation-list" + + const vcPayload: RevocationList = { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://w3id.org/vc-status-list-2021/v1" + ], + id: statusListUrl, + type: ["VerifiableCredential", "StatusList2021Credential"], + issuer: signer.did, + issuanceDate: new Date(), + credentialSubject: { + id: `${statusListUrl}#list`, + type: "StatusList2021Entry", + encodedList + } + } + + return createVerifiableCredentialJwt(vcPayload as CredentialPayload, signer) +} + +export const revocationListCredentialFactory = async ( + opts: RevocationListCredentialFactoryOptions = {} +): Promise => { + const vcJwt = await encodedRevocationListCredentialFactory(opts) + + return decodeVerifiableCredential(vcJwt) as Promise +} diff --git a/packages/verifier/test/factories/verifiable-credential.ts b/packages/verifier/test/factories/verifiable-credential.ts new file mode 100644 index 000000000..231e14b21 --- /dev/null +++ b/packages/verifier/test/factories/verifiable-credential.ts @@ -0,0 +1,111 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { createVerifiableCredentialJwt, Issuer } from "did-jwt-vc" + +import { decodeVerifiableCredential } from "../../src/lib/coder" +import { StatusList2021Entry } from "../../src/types/credentials" + +import { DID_PKH, signerFactory } from "./did" + +type Opts = { + /** + * The subject's DID for the Verifiable Credential. This is who the issuer + * issues the credential to. + */ + subject?: string + /** + * The issuer for the Verifiable Credential. + */ + issuer?: Issuer + /** + * The credential's expiration date, if any + */ + expirationDate?: Date + /** + * The credential status, used for revocation + */ + credentialStatus?: StatusList2021Entry + /** + * The date KYC was performed and approved by the issuer + */ + approvalDate?: string | null + /** + * The definition for the KYC process + */ + process?: string | null + /** + * An optional Credential type + */ + credentialType?: string + /** + * An optional Credential type + */ + additionalCredentialTypes?: [string] + /** + * Additional fields for the Attestation + */ + additionalAttestationFields?: Record +} + +export const verifiableCredentialFactory = async (opts: Opts = {}) => { + const subject = opts.subject ? opts.subject : DID_PKH + const issuer = opts.issuer ? opts.issuer : await signerFactory() + const approvalDate = + opts.approvalDate === undefined ? new Date().toJSON() : opts.approvalDate + const process = + opts.process === undefined + ? "https://verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + : opts.process + + return createVerifiableCredentialJwt( + { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://verite.id/identity" + ], + type: [ + "VerifiableCredential", + opts.credentialType ?? "KYBPAMLAttestation" + ].concat( + opts.additionalCredentialTypes ? opts.additionalCredentialTypes : [] + ), + credentialSubject: { + id: subject, + KYBPAMLAttestation: Object.assign( + { + type: "KYBPAMLAttestation", + process: process, + approvalDate: approvalDate + }, + opts.additionalAttestationFields + ) + }, + credentialStatus: opts.credentialStatus, + expirationDate: opts.expirationDate, + issuanceDate: new Date(), + issuer: { id: issuer.did } + }, + issuer + ) +} + +export const decodedVerifiableCredentialFactory = async (opts: Opts = {}) => { + const encoded = await verifiableCredentialFactory(opts) + return decodeVerifiableCredential(encoded) +} diff --git a/packages/verifier/test/factories/verifiable-presentation.ts b/packages/verifier/test/factories/verifiable-presentation.ts new file mode 100644 index 000000000..c3671ac09 --- /dev/null +++ b/packages/verifier/test/factories/verifiable-presentation.ts @@ -0,0 +1,123 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { + createVerifiablePresentationJwt, + Issuer, + JwtPresentationPayload +} from "did-jwt-vc" +import { v4 as uuidv4 } from "uuid" + +import { decodeVerifiablePresentation } from "../../src/lib/coder" + +import { DID_PKH, signerFactory } from "./did" +import { verifiableCredentialFactory } from "./verifiable-credential" + +type Opts = { + /** + * The holder of the Verifiable Presentation. This *should* be the same as the + * subject of the Verifiable Credential. If not, the verification process will + * fail. + */ + holder?: Issuer + /** + * The subject DID of the Verifiable Presentation. This *should* be the same + * as the holder's DID. If not, the verification process will fail. + */ + subject?: string + /** + * A pre-generated Verifiable Credential. A `null` value will cause the + * Verifiable Presentation to be generated without any verifiable credentials. + */ + vcJWT?: string | string[] | null + /** + * The issuer of the Verifiable Credential + */ + vcIssuer?: Issuer + /** + * The challenge string for the Verifiable Presentation + */ + challenge?: string + /** + * Additional descriptorMap field + */ + additionalDescriptorMapFields?: [Record] +} + +export const verifiablePresentationJsonFactory = ( + holder: Issuer, + cwJwt: string | string[], + opts: Opts +): JwtPresentationPayload => { + return { + sub: holder.did, + vp: { + "@context": ["https://www.w3.org/2018/credentials/v1"], + type: ["VerifiablePresentation", "CredentialFulfillment"], + holder: holder.did, + verifiableCredential: cwJwt + }, + presentation_submission: { + id: uuidv4(), + definition_id: `KYBPAMLAttestation-${uuidv4()}`, + descriptor_map: [cwJwt] + .flat() + .map( + (_vc, i) => + ({ + format: "jwt_vc", + id: "kybpaml_input", + path: `$.verifiableCredential[${i}]` + } as Record) + ) + .concat( + opts.additionalDescriptorMapFields + ? opts.additionalDescriptorMapFields + : [] + ) + } + } +} + +export const verifiablePresentationFactory = async (opts: Opts = {}) => { + const holder = opts.holder ?? (await signerFactory()) + const subject = opts.subject ? opts.subject : DID_PKH + const vcJWT = opts.vcJWT + ? opts.vcJWT + : await verifiableCredentialFactory({ + subject, + issuer: opts.vcIssuer + }) + + const payload: JwtPresentationPayload = verifiablePresentationJsonFactory( + holder, + vcJWT, + opts + ) + + return createVerifiablePresentationJwt(payload, holder, { + challenge: opts.challenge + }) +} + +export const decodedVerifiablePresentationFactory = async (opts: Opts = {}) => { + const encoded = await verifiablePresentationFactory(opts) + return decodeVerifiablePresentation(encoded, { + challenge: opts.challenge + }) +} diff --git a/packages/verifier/test/factories/verification.ts b/packages/verifier/test/factories/verification.ts new file mode 100644 index 000000000..6a31f91a1 --- /dev/null +++ b/packages/verifier/test/factories/verification.ts @@ -0,0 +1,49 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { Verification } from "@prisma/client" +import { v4 } from "uuid" + +import prisma from "../../src/lib/database/prisma" + +import { ETH_ADDRESS } from "./did" +import { presentationDefinitionFactory } from "./presentation-definition" + +export const verificationFactory = async ( + props: Partial = {} +): Promise => { + const presentationDefinition = presentationDefinitionFactory() + + return prisma.verification.create({ + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + data: Object.assign( + { + id: presentationDefinition.id, + challenge: v4(), + network: "ethereum", + chainId: 1337, + subject: ETH_ADDRESS, + presentationDefinition, + offeredAt: new Date(), + status: "created" + }, + props + ) + }) +} diff --git a/packages/verifier/test/lib/coder.test.ts b/packages/verifier/test/lib/coder.test.ts new file mode 100644 index 000000000..4212e9e08 --- /dev/null +++ b/packages/verifier/test/lib/coder.test.ts @@ -0,0 +1,75 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { + decodeVerifiableCredential, + decodeVerifiablePresentation, + verifyVerifiablePresentation +} from "../../src/lib/coder" +import { verifiableCredentialFactory } from "../factories/verifiable-credential" +import { verifiablePresentationFactory } from "../factories/verifiable-presentation" + +test("decodeVerifiablePresentation decodes a valid JWT Verifiable Presentation", async () => { + const vp = await verifiablePresentationFactory() + + const result = await decodeVerifiablePresentation(vp) + + expect(result.type).toEqual([ + "VerifiablePresentation", + "CredentialFulfillment" + ]) + expect(result.verifiableCredential?.[0].type).toEqual([ + "VerifiableCredential", + "KYBPAMLAttestation" + ]) +}) + +test("verifyVerifiablePresentation decodes a valid plaintext Verifiable Presentation", async () => { + const vp = await verifiablePresentationFactory() + + const result = verifyVerifiablePresentation(vp) + + expect(result.type).toEqual([ + "VerifiablePresentation", + "CredentialFulfillment" + ]) + expect(result.verifiableCredential?.[0].type).toEqual([ + "VerifiableCredential", + "KYBPAMLAttestation" + ]) +}) + +test("decodeVerifiablePresentation throws when given an invalid Verifiable Presentation", async () => { + await expect(decodeVerifiablePresentation("blah")).rejects.toThrow( + "Input isn't a valid Verifiable Presentation" + ) +}) + +test("decodeVerifiableCredentials decodes a valid Verifiable Credential", async () => { + const vc = await verifiableCredentialFactory() + + const result = await decodeVerifiableCredential(vc) + + expect(result.type).toEqual(["VerifiableCredential", "KYBPAMLAttestation"]) +}) + +test("decodeVerifiableCredentials throws when given an invalid credential", async () => { + await expect(decodeVerifiableCredential("blah")).rejects.toThrow( + "Input isn't a valid Verifiable Credential" + ) +}) diff --git a/packages/verifier/test/lib/database/apiClients.test.ts b/packages/verifier/test/lib/database/apiClients.test.ts new file mode 100644 index 000000000..f831f82f0 --- /dev/null +++ b/packages/verifier/test/lib/database/apiClients.test.ts @@ -0,0 +1,132 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { randomBytes } from "crypto" + +import { + createApiClient, + findApiClient, + findActiveApiClients, + updateApiClient +} from "../../../src/lib/database/apiClient" +import prisma from "../../../src/lib/database/prisma" + +const TEST_DID = "did:web:example.com" +const DEFAULT_API_TOKEN = randomBytes(16).toString("hex") +const DEFALUT_LEGAL_TERM_VERSION = 1 +const DEFAULT_EXP_IN_SEC = 3600 +const DEFAULT_CREATE_PARAM = { + did: TEST_DID, + apiToken: DEFAULT_API_TOKEN, + legalTermVersion: DEFALUT_LEGAL_TERM_VERSION, + expiresInSeconds: DEFAULT_EXP_IN_SEC +} + +beforeAll(async () => { + await prisma.user.create({ + data: { + did: TEST_DID, + legalTermVersion: DEFALUT_LEGAL_TERM_VERSION + } + }) +}) + +afterAll(async () => { + await prisma.user.deleteMany({ + where: { + did: TEST_DID + } + }) +}) + +test("createApiClient() creates a new api client", async () => { + const apiClient = await createApiClient(DEFAULT_CREATE_PARAM) + + expect(apiClient.did).toEqual(TEST_DID) + expect(apiClient.expiresInSeconds).toEqual(DEFAULT_EXP_IN_SEC) + expect(apiClient.createdAt).toBeDefined() + expect(apiClient.revokedAt).toBeNull() + + await prisma.apiClient.delete({ + where: { + id: apiClient.id + } + }) +}) + +test("findApiClient() returns the requested client with the right id", async () => { + const { id } = await createApiClient(DEFAULT_CREATE_PARAM) + + const found = await findApiClient({ id }) + + expect(found.did).toEqual(TEST_DID) + + await prisma.apiClient.delete({ + where: { + id + } + }) +}) + +test("findApiClient() throw an error if client does not exist", async () => { + await expect( + findApiClient({ + id: "0192220b-528e-4adf-9567-4f46388d60e4" + }) + ).rejects.toThrow() +}) + +test("findActiveApiClient() returns a client that has not been revoked", async () => { + const { id } = await createApiClient(DEFAULT_CREATE_PARAM) + + const apiClients = await findActiveApiClients({ + did: TEST_DID + }) + + expect(apiClients).toHaveLength(1) + apiClients && expect(apiClients[0].did).toEqual(TEST_DID) + + await prisma.apiClient.delete({ + where: { + id + } + }) +}) + +test("updateApiClient updates the client with given data", async () => { + const { id, revokedAt } = await createApiClient(DEFAULT_CREATE_PARAM) + + expect(revokedAt).toBeNull() + + const revokedDate = new Date() + const updatedClient = await updateApiClient({ + id, + data: { + revokedAt: revokedDate + } + }) + + expect(updatedClient?.did).toEqual(TEST_DID) + expect(updatedClient?.revokedAt).toEqual(revokedDate) + + await prisma.apiClient.delete({ + where: { + id + } + }) +}) diff --git a/packages/verifier/test/lib/database/user.test.ts b/packages/verifier/test/lib/database/user.test.ts new file mode 100644 index 000000000..fc0c49116 --- /dev/null +++ b/packages/verifier/test/lib/database/user.test.ts @@ -0,0 +1,63 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import prisma from "../../../src/lib/database/prisma" +import { getUser, createUser } from "../../../src/lib/database/user" + +const TEST_DID = "did:web:example.com" +const TEST_LEGAL_TERM_VERSION = 1 + +afterEach(async () => { + await prisma.user.deleteMany({ + where: { + did: TEST_DID + } + }) +}) + +test("createUser() creates a new user", async () => { + const user = await createUser({ + did: TEST_DID, + legalTermVersion: TEST_LEGAL_TERM_VERSION + }) + + expect(user.did).toEqual(TEST_DID) + expect(user.legalTermVersion).toEqual(TEST_LEGAL_TERM_VERSION) + expect(user.createdAt).toBeDefined() + expect(user.acceptedAt).toBeDefined() +}) + +test("getUser() gets the user", async () => { + await createUser({ + did: TEST_DID, + legalTermVersion: TEST_LEGAL_TERM_VERSION + }) + + const user = await getUser({ + did: TEST_DID + }) + + expect(user.did).toEqual(TEST_DID) + expect(user.legalTermVersion).toEqual(TEST_LEGAL_TERM_VERSION) + expect(user.createdAt).toBeDefined() + expect(user.acceptedAt).toBeDefined() +}) + +test("getUser() throws if user not found", async () => { + await expect(getUser({ did: TEST_DID })).rejects.toThrow() +}) diff --git a/packages/verifier/test/lib/database/verifications.test.ts b/packages/verifier/test/lib/database/verifications.test.ts new file mode 100644 index 000000000..2716c026a --- /dev/null +++ b/packages/verifier/test/lib/database/verifications.test.ts @@ -0,0 +1,96 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { v4 as uuidv4 } from "uuid" + +import { + createVerification, + findVerification, + saveSubmission +} from "../../../src/lib/database/verifications" +import { BadRequestError, NotFoundError } from "../../../src/lib/errors" +import { presentationDefinitionFactory } from "../../factories/presentation-definition" +import { decodedVerifiablePresentationFactory } from "../../factories/verifiable-presentation" +import { verificationFactory } from "../../factories/verification" + +test("createVerification() creates a new verification", async () => { + const network = "ethereum" + const subject = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + const presentationDefinition = presentationDefinitionFactory() + + const result = await createVerification({ + network, + subject, + presentationDefinition, + chainId: 1337 + }) + + expect(result.id).toBeDefined() + expect(result.challenge).toBeDefined() + expect(result.status).toEqual("created") + expect(result.network).toEqual(network) + expect(result.subject).toEqual(subject) + expect(result.chainId).toEqual(1337) +}) + +test("findVerification() fetches and returns a Verification record by id", async () => { + const verification = await verificationFactory() + + const result = await findVerification(verification.id) + + expect(verification).toEqual(result) +}) + +test("findVerification() throws a NotFoundError when given an id that is not a uuid", async () => { + await expect(findVerification("invalid")).rejects.toThrow(NotFoundError) +}) + +test("findVerification() throws a NotFoundError when given an id does not exist in the database", async () => { + const id = uuidv4() + + await expect(findVerification(id)).rejects.toThrow(NotFoundError) +}) + +test("saveSubmission() updates a verification record with the submission", async () => { + const credentialSubmission = await decodedVerifiablePresentationFactory() + const verification = await verificationFactory() + + expect(verification.verifiedAt).toBeNull() + + const result = await saveSubmission({ + verification, + submission: credentialSubmission, + status: "approved" + }) + + expect(result.credentialSubmission).not.toBeNull() + expect(result.verifiedAt).not.toBeNull() +}) + +test("saveSubmission() throws a BadRequestError when the submission has already been stored", async () => { + const credentialSubmission = await decodedVerifiablePresentationFactory() + const verification = await verificationFactory({ credentialSubmission }) + + await expect( + saveSubmission({ + verification, + submission: credentialSubmission, + status: "approved" + }) + ).rejects.toThrow(BadRequestError) +}) diff --git a/packages/verifier/test/lib/did/index.test.ts b/packages/verifier/test/lib/did/index.test.ts new file mode 100644 index 000000000..2eb708420 --- /dev/null +++ b/packages/verifier/test/lib/did/index.test.ts @@ -0,0 +1,156 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import nock from "nock" + +import { didResolver } from "../../../src/lib/did" +import { didFactory } from "../../factories/did" + +test("didResolver successfully resolves EdDSA did:key documents", async () => { + const { didDocument } = await didFactory("ed25519") + const subject = didDocument.id + + const result = await didResolver.resolve(subject) + expect(result.didDocument).toBeDefined() + expect(result.didDocument?.id).toEqual(subject) + expect(result.didDocument?.verificationMethod).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + type: "Ed25519VerificationKey2018", + controller: subject + }) + ]) + ) +}) + +test("didResolver successfully resolves ES256K did:key documents", async () => { + const { didDocument } = await didFactory("secp256k1") + const subject = didDocument.id + + const result = await didResolver.resolve(subject) + expect(result.didDocument).toBeDefined() + expect(result.didDocument?.id).toEqual(subject) + expect(result.didDocument?.verificationMethod).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + type: "EcdsaSecp256k1VerificationKey2019", + controller: subject + }) + ]) + ) +}) + +test("didResolver successfully resolves EdDSA did:web documents", async () => { + const didDocument = { + "@context": "https://w3id.org/did/v1", + id: "did:web:example.com", + publicKey: [ + { + id: "did:web:example.com#owner", + type: "Ed25519VerificationKey2018", + controller: "did:web:example.com", + publicKeyBase58: "NEyqo9lJoKoKLnAUxu4lthdfrhT2_SNA9GuDqb9WWsU" + } + ], + authentication: [ + { + type: "Ed25519VerificationKey2018", + publicKey: "did:web:example.com#owner" + } + ] + } + + nock("https://example.com") + .get("/.well-known/did.json") + .reply(200, JSON.stringify(didDocument)) + + const result = await didResolver.resolve("did:web:example.com") + expect(result.didDocument).toEqual(didDocument) + expect(result.didResolutionMetadata).toEqual({ + contentType: "application/did+ld+json" + }) +}) + +test("didResolver successfully resolves ES256K did:web documents", async () => { + const didDocument = { + "@context": "https://w3id.org/did/v1", + id: "did:web:example.com", + publicKey: [ + { + id: "did:web:example.com#owner", + type: "EcdsaSecp256k1VerificationKey2019", + controller: "did:web:example.com", + publicKeyBase58: "cikKiv4u7gSoGamkGqLTgNLZCBRm995aof6JxTtXFBwt" + } + ], + authentication: [ + { + type: "EcdsaSecp256k1VerificationKey2019", + publicKey: "did:web:example.com#owner" + } + ] + } + + nock("https://example.com") + .get("/.well-known/did.json") + .reply(200, JSON.stringify(didDocument)) + + const result = await didResolver.resolve("did:web:example.com") + expect(result.didDocument).toEqual(didDocument) + expect(result.didResolutionMetadata).toEqual({ + contentType: "application/did+ld+json" + }) +}) + +test("didResolver fails to resolve invalid did:web documents", async () => { + const didDocument = { + invalid: "document" + } + + nock("https://example.com") + .get("/.well-known/did.json") + .reply(200, JSON.stringify(didDocument)) + + const result = await didResolver.resolve("did:web:example.com") + expect(result).toBeTruthy() + expect(result.didDocument).toEqual(didDocument) + expect(result.didResolutionMetadata).toEqual({ + error: "notFound", + message: "resolver_error: DID document id does not match requested did" + }) +}) + +test("didResolver fails resolving a malformed did:key", async () => { + const subject = "did:key:z6MkmrNEvz4N9iKbHZaFnnBKc61sKBLbbugi4MWsPMfKPmZRaa" + + const result = await didResolver.resolve(subject) + expect(result.didDocument).toBeNull() + expect(result.didResolutionMetadata).toEqual({ + error: "notFound", + message: + "resolver_error: Unsupported fingerprint type: z6MkmrNEvz4N9iKbHZaFnnBKc61sKBLbbugi4MWsPMfKPmZRaa" + }) +}) + +test("didResolver fails if given an invalid document", async () => { + const result = await didResolver.resolve("invalid:did") + expect(result.didDocument).toBeNull() + expect(result.didResolutionMetadata).toEqual({ + error: "invalidDid" + }) +}) diff --git a/packages/verifier/test/lib/env.test.ts b/packages/verifier/test/lib/env.test.ts new file mode 100644 index 000000000..8c638cfc6 --- /dev/null +++ b/packages/verifier/test/lib/env.test.ts @@ -0,0 +1,37 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { env } from "../../src/lib/env" + +test("env() returns an existing environment variable", () => { + const value = env("NODE_ENV") + expect(["test", "development", "production"]).toContain(value) +}) + +test("env() returns a fallback for a missing env variable if one is present", () => { + const value = env("MISSING_ENV_VAR", "development") + expect(value).toBe("development") +}) + +test("env() throws an error if the environment variable is not set, and there is no fallback", () => { + expect(() => { + env("MISSING_ENV_VAR") + }).toThrowErrorMatchingInlineSnapshot( + `"Missing environment variable: MISSING_ENV_VAR"` + ) +}) diff --git a/packages/verifier/test/lib/errors.test.ts b/packages/verifier/test/lib/errors.test.ts new file mode 100644 index 000000000..f4b70ceb4 --- /dev/null +++ b/packages/verifier/test/lib/errors.test.ts @@ -0,0 +1,92 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import express from "express" +import request from "supertest" + +import { + BadRequestError, + errorHandler, + NotFoundError +} from "../../src/lib/errors" + +test("errors allow a message with optional details", async () => { + const app = express() + app.use(() => { + throw new BadRequestError("Message", "Optional details") + }) + app.use(errorHandler()) + + const { statusCode, body } = await request(app).get("/") + expect(statusCode).toBe(400) + expect(body).toEqual({ + status: 400, + errors: [{ message: "Message", details: "Optional details" }] + }) +}) + +test("errorHandler() middleware returns a 500 on unknown thrown error", async () => { + const app = express() + app.use(() => { + throw new BadRequestError("Bad Request") + }) + app.use(errorHandler()) + + const { statusCode, body } = await request(app).get("/") + expect(statusCode).toBe(400) + expect(body).toEqual({ status: 400, errors: [{ message: "Bad Request" }] }) +}) + +test("errorHandler() middleware handles known Errors", async () => { + const app = express() + app.use(() => { + throw new NotFoundError("Not Found") + }) + app.use(errorHandler()) + + const { statusCode, body } = await request(app).get("/") + expect(statusCode).toBe(404) + expect(body).toEqual({ status: 404, errors: [{ message: "Not Found" }] }) +}) + +test("errorHandler() middleware returns a 500 on unknown thrown error", async () => { + const app = express() + app.use(() => { + throw new Error() + }) + app.use(errorHandler()) + + const { statusCode, body } = await request(app).get("/") + expect(statusCode).toBe(500) + expect(body).toEqual({ + status: 500, + errors: [{ message: "Internal Server Error" }] + }) +}) + +test("errorHandler() middleware properly handles cases where the response has already been sent", async () => { + const app = express() + app.use((_req, res) => { + res.sendStatus(200) + throw new Error() + }) + app.use(errorHandler()) + + const { statusCode } = await request(app).get("/") + expect(statusCode).toBe(200) +}) diff --git a/packages/verifier/test/lib/presentation-definition.test.ts b/packages/verifier/test/lib/presentation-definition.test.ts new file mode 100644 index 000000000..9c703a319 --- /dev/null +++ b/packages/verifier/test/lib/presentation-definition.test.ts @@ -0,0 +1,53 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { validate } from "uuid" + +import { buildPresentationDefinition } from "../../src/lib/presentation-definition" + +test("buildPresentationDefinition() returns a PresentationDefinition", () => { + const definition = buildPresentationDefinition() + + expect(validate(definition.id)).toBe(true) + expect(definition.input_descriptors?.length).toEqual(2) + for (const inputDescriptor of definition.input_descriptors) { + const trustedIssuerField = inputDescriptor.constraints?.fields?.find( + (field) => field.path.includes("$.issuer.id") + ) + expect(trustedIssuerField?.filter).toBeUndefined() + } +}) + +test("buildPresentationDefinition() allows setting trusted issuers", () => { + const trustedIssuers = "^did:web:example.com$|^did:web:example.org$" + const definition = buildPresentationDefinition({ + trustedIssuers + }) + + expect(validate(definition.id)).toBe(true) + expect(definition.input_descriptors?.length).toEqual(2) + for (const inputDescriptor of definition.input_descriptors) { + const trustedIssuerField = inputDescriptor.constraints?.fields?.find( + (field) => field.path.includes("$.issuer.id") + ) + expect(trustedIssuerField?.filter).toEqual({ + pattern: trustedIssuers, + type: "string" + }) + } +}) diff --git a/packages/verifier/test/lib/results/ethereum.test.ts b/packages/verifier/test/lib/results/ethereum.test.ts new file mode 100644 index 000000000..e042b2b0b --- /dev/null +++ b/packages/verifier/test/lib/results/ethereum.test.ts @@ -0,0 +1,197 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ethers, Wallet } from "ethers" + +import { ethereum } from "../../../src/lib/results" + +test("ethereum returns a signature", async () => { + const subject = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + const expiration = 1641492587 + const name = "VerificationRegistry" + const version = "1.0" + const verifier_verification_id = "c62af7a4-82d5-42be-bd93-df12955e9a4e" + const schema = [ + "verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + ] + + const { verificationResult, signature } = await ethereum({ + subject, + registryAddress: "0x5FbDB2315678afecb367f032d93F642f64180aa3", + chainId: 1337, + name, + version, + expiration: new Date(expiration * 1000), + privateKey: + "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + verifier_verification_id, + schema + }) + + expect(signature).toBe( + "0xd8a234d69351028abcc3da5c56329cdfc67ada9d97e8b93fd714c243ec58fd8c6f52d6290de1d2bad2e28e29f11c33b0ac41e2b219a616c35a9425c1672ce7de1c" + ) + expect(verificationResult).toEqual({ + schema, + subject, + expiration, + verifier_verification_id + }) +}) + +test("ethereum returns a different signature for a different chainId", async () => { + const subject = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + const expiration = 1641492587 + const name = "VerificationRegistry" + const version = "1.0" + const verifier_verification_id = "c62af7a4-82d5-42be-bd93-df12955e9a4e" + const schema = [ + "verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + ] + + const { signature, verificationResult } = await ethereum({ + subject, + registryAddress: "0x5FbDB2315678afecb367f032d93F642f64180aa3", + chainId: 9000, + name, + version, + expiration: new Date(expiration * 1000), + privateKey: + "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + verifier_verification_id, + schema + }) + + expect(signature).toBe( + "0x8b4b9ee3088bbd1c07b45fed91386e5d13c4345d515e54bcfd8a5b964d618a1802e1d3c36198119dde73deace2bc55ce8ead56a7e2a52ddc3450a8177375b05e1c" + ) + expect(verificationResult).toEqual({ + schema, + subject, + expiration, + verifier_verification_id + }) +}) + +test("ethereum returns a different signature for a different contract", async () => { + const subject = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + const expiration = 1641492587 + const name = "VerificationRegistry" + const version = "1.0" + const verifier_verification_id = "c62af7a4-82d5-42be-bd93-df12955e9a4e" + const schema = [ + "verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + ] + + const { signature, verificationResult } = await ethereum({ + subject, + registryAddress: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + chainId: 1337, + name, + version, + expiration: new Date(expiration * 1000), + privateKey: + "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + verifier_verification_id, + schema + }) + + expect(signature).toBe( + "0x3011814067b53522001eebaa8608cfb42ee56b96b86497c40bb902e98c9db0a77a23e959c55bc5f5c1caffd98dfe0bc8d8bfdfed9cb8ef05c3a758c3d489b2261b" + ) + expect(verificationResult).toEqual({ + schema, + subject, + expiration, + verifier_verification_id + }) +}) + +test("ethereum returns a different signature with a different private key", async () => { + const subject = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + const expiration = 1641492587 + const name = "VerificationRegistry" + const version = "1.0" + const verifier_verification_id = "c62af7a4-82d5-42be-bd93-df12955e9a4e" + const schema = [ + "verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + ] + + const { signature, verificationResult } = await ethereum({ + subject, + registryAddress: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + chainId: 1337, + name, + version, + expiration: new Date(expiration * 1000), + privateKey: + "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d", + verifier_verification_id, + schema + }) + + expect(signature).toBe( + "0xc120fe7b8340f60d7311bfc9a43bb9bdae871c5f3e2d81def6abd0974e6cc22561015120ee6430af4e964568b0e1b44ed2e3ddf96f8d5b519e62c843812156b71b" + ) + expect(verificationResult).toEqual({ + schema, + subject, + expiration, + verifier_verification_id + }) +}) + +test("recovering verifier address used to create the signature", () => { + const signature = + "0xc6fc48878f00b18b54e3c644b073e308f4bdfc54a5d1b138f57e9c89dd99414234993525bcce84a73db58d4418903b0ee0b959b419a82e565cf33ca8e2a5932b1c" + const expiration = 1641492587 + + const domain = { + name: "VerificationRegistry", + version: "1.0", + chainId: 1337, + verifyingContract: "0x5FbDB2315678afecb367f032d93F642f64180aa3" + } + const types = { + VerificationResult: [ + { name: "schema", type: "string" }, + { name: "subject", type: "address" }, + { name: "expiration", type: "uint256" } + ] + } + const verificationResult = { + schema: "", + subject: "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + expiration: expiration + } + + const recoveredAddress = ethers.utils.verifyTypedData( + domain, + types, + verificationResult, + signature + ) + + // Get public key from the private key used to create the signature + const signer: Wallet = new ethers.Wallet( + "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + ) + const address = signer.address + + expect(recoveredAddress).toEqual(address) +}) diff --git a/packages/verifier/test/lib/results/solana.test.ts b/packages/verifier/test/lib/results/solana.test.ts new file mode 100644 index 000000000..0220e5592 --- /dev/null +++ b/packages/verifier/test/lib/results/solana.test.ts @@ -0,0 +1,400 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { + publicKey, + i64, + str, + struct, + Layout, + array +} from "@project-serum/borsh" +import { PublicKey } from "@solana/web3.js" +import BN from "bn.js" +import { ethers } from "ethers" +import { keccak_256 } from "js-sha3" +import { ecdsaRecover, ecdsaSign, publicKeyConvert } from "secp256k1" + +import { solana } from "../../../src/lib/results" + +/** + * Construct an Ethereum address from a secp256k1 public key buffer. + * @param {Buffer} publicKey a 64 byte secp256k1 public key buffer + * Source: https://github.com/solana-labs/solana/blob/e3b137066d89c303ad75a1073b90b9e2e32fd23d/web3.js/src/secp256k1-program.ts#L76-L95 + */ +const publicKeyToEthAddress = ( + publicKey: Buffer | Uint8Array | Array +): Buffer => { + const ETHEREUM_ADDRESS_BYTES = 20 + return Buffer.from(keccak_256.update(publicKey).digest()).slice( + -ETHEREUM_ADDRESS_BYTES + ) +} + +// Type used to serialize the Verification Result using borsh. +type Message = { + name: string + version: string + cluster: string + expiration: BN + schema: string[] + subject: PublicKey + verifier_verification_id: string +} + +test("solana returns a signature", async () => { + const subject = "37Jon9vY6V9iXavKqTubjXY1iaUVo6xJJyG95SEHvvAV" + const expiration = 1641492587 + const privateKey = + "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + const name = "VerificationRegistry" + const version = "1.0" + const verifier_verification_id = "c62af7a4-82d5-42be-bd93-df12955e9a4e" + const schema = [ + "verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + ] + + const { verificationResult, signature } = await solana({ + subject, + expiration: new Date(expiration * 1000), + chainId: 1337, + name, + version, + privateKey, + verifier_verification_id, + schema + }) + + expect(verificationResult).toEqual({ + name: "VerificationRegistry", + version: "1.0", + cluster: "localnet", + schema, + subject, + expiration, + verifier_verification_id + }) + + expect(signature).toBe( + "0x452b14e845ca81e9ead06d53db6376a5afb314f790b0a8aa74cc257c062105e240215c7e40d5d1af1ec12a8ce50f0f582bf79dd907e12d1c2fe6ae66bd6a70581c" + ) +}) + +test("solana returns a different signature for a different subject", async () => { + const subject = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" + const expiration = 1641492587 + const privateKey = + "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + const name = "VerificationRegistry" + const version = "1.0" + const verifier_verification_id = "c62af7a4-82d5-42be-bd93-df12955e9a4e" + const schema = [ + "verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + ] + + const { verificationResult, signature } = await solana({ + subject, + expiration: new Date(expiration * 1000), + chainId: 1337, + name, + version, + privateKey, + verifier_verification_id, + schema + }) + + expect(verificationResult).toEqual({ + name: "VerificationRegistry", + version: "1.0", + cluster: "localnet", + schema, + subject, + expiration, + verifier_verification_id + }) + + expect(signature).toBe( + "0xac1f2e8f612d7b6c78ffa6a7ac50ade4e9c6a07baccf8b1e5de69f16f9fa806d0122e39404a76b933fc86b7375e2523aaba40e5595d562efdebad313f46482141b" + ) +}) + +test("solana returns a different signature for a different expiration", async () => { + const subject = "37Jon9vY6V9iXavKqTubjXY1iaUVo6xJJyG95SEHvvAV" + const expiration = 1752503698 + const privateKey = + "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + const name = "VerificationRegistry" + const version = "1.0" + const verifier_verification_id = "c62af7a4-82d5-42be-bd93-df12955e9a4e" + const schema = [ + "verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + ] + + const { verificationResult, signature } = await solana({ + subject, + expiration: new Date(expiration * 1000), + chainId: 1337, + name, + version, + privateKey, + verifier_verification_id, + schema + }) + + expect(verificationResult).toEqual({ + name: "VerificationRegistry", + version: "1.0", + cluster: "localnet", + schema, + subject, + expiration, + verifier_verification_id + }) + + expect(signature).toBe( + "0x028d7b81fb7c782ba6600cbb5964df02a364a8c81eeb9aa19504f99ea148354b33d1727354b420c7407f4dc5c9311aec0d3459e047b800cf059333e35b178e961c" + ) +}) + +test("solana returns a different signature for a different private key", async () => { + const subject = "37Jon9vY6V9iXavKqTubjXY1iaUVo6xJJyG95SEHvvAV" + const expiration = 1641492587 + const privateKey = + "59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" + const name = "VerificationRegistry" + const version = "1.0" + const verifier_verification_id = "c62af7a4-82d5-42be-bd93-df12955e9a4e" + const schema = [ + "verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + ] + + const { verificationResult, signature } = await solana({ + subject, + expiration: new Date(expiration * 1000), + chainId: 1337, + name, + version, + privateKey, + verifier_verification_id, + schema + }) + + expect(verificationResult).toEqual({ + name: "VerificationRegistry", + version: "1.0", + cluster: "localnet", + schema, + subject, + expiration, + verifier_verification_id + }) + + expect(signature).toBe( + "0xd2aa52b3cefeea9179497535aba9ea84f410038c2d2aa488b55cfe3b364192a84c9d5edad0f48a3753e67bbb7f51f708c267584fd486f4950b5150028e8e52bb1b" + ) +}) + +test("sign and recover with recid of 0", () => { + // This is the message we will hash + const message = Buffer.from(keccak_256.update("Hello, world!").digest()) + + // We sign with this key + const privateKey = ethers.utils.arrayify( + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + ) + + const { signature, recid } = ecdsaSign(message, privateKey) + + const recovered = ecdsaRecover(signature, recid, message) + + expect(recid).toBe(0) + // ecdsaRecover returns a compressed public key. We must convert it to an + // uncompressed public key in order to convert to an ETH address. + const publicKey = publicKeyConvert(recovered, false).slice(1) + + const recoveredEthAddress = publicKeyToEthAddress(publicKey) + + const wallet = new ethers.Wallet(privateKey) + expect("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266").toBe(wallet.address) + expect(wallet.address.toLowerCase()).toBe( + ethers.utils.hexlify(recoveredEthAddress) + ) +}) + +test("sign and recover with recid of 1", () => { + // This is the message we will hash + const message = Buffer.from(keccak_256.update("Helo, world!").digest()) + + // We sign with this key + const privateKey = ethers.utils.arrayify( + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + ) + + const { signature, recid } = ecdsaSign(message, privateKey) + + const recovered = ecdsaRecover(signature, recid, message) + + expect(recid).toBe(1) + // ecdsaRecover returns a compressed public key. We must convert it to an + // uncompressed public key in order to convert to an ETH address. + const publicKey = publicKeyConvert(recovered, false).slice(1) + + const recoveredEthAddress = publicKeyToEthAddress(publicKey) + + const wallet = new ethers.Wallet(privateKey) + + expect("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266").toBe(wallet.address) + expect(wallet.address.toLowerCase()).toBe( + ethers.utils.hexlify(recoveredEthAddress) + ) +}) + +test("recover public key using a static message", () => { + const subject = "37Jon9vY6V9iXavKqTubjXY1iaUVo6xJJyG95SEHvvAV" + const expiration = 1641492587 + const verifier_verification_id = "c62af7a4-82d5-42be-bd93-df12955e9a4e" + const schema = [ + "verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person" + ] + + const data = { + name: "VerificationRegistry", + version: "1.0", + cluster: "localnet", + schema, + subject: new PublicKey(subject), + expiration: new BN(expiration), + verifier_verification_id + } + const message = Buffer.alloc( + 24 + + 7 + + 12 + + 32 + + 8 + + 4 + + schema.reduce((acc, s) => acc + s.length + 4, 0) + + verifier_verification_id.length + + 4 + ) + // Create the borsh layout. + const LAYOUT: Layout = struct([ + str("name"), + str("version"), + str("cluster"), + publicKey("subject"), + i64("expiration"), + array(str(), schema.length, "schema"), + str("verifier_verification_id") + ]) + LAYOUT.encode(data, message) + + // Create Signature from the message + const messageHash = Buffer.from(keccak_256.update(message).digest()) + + const privateKey = ethers.utils.arrayify( + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + ) + + const { signature, recid } = ecdsaSign(messageHash, privateKey) + + const signer = ecdsaRecover(signature, recid, messageHash) + const publicKey2 = publicKeyConvert(signer, false).slice(1) + const recoveredEthAddress = publicKeyToEthAddress(publicKey2) + const signerHex = ethers.utils.hexlify(recoveredEthAddress) + + expect("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266".toLowerCase()).toBe( + signerHex + ) +}) + +test("recover public key using the solana function and result", async () => { + // Verifier creates a verification result and signature + const subject = "37Jon9vY6V9iXavKqTubjXY1iaUVo6xJJyG95SEHvvAV" + const expiration = 1641492587 + const privateKey = + "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + const name = "VerificationRegistry" + const version = "1.0" + const verifier_verification_id = "c62af7a4-82d5-42be-bd93-df12955e9a4e" + const schema = [ + "https://verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person", + "https://raw.githubusercontent.com/centrehq/verite/d1b97b3a475aa00cf894f72213f34b7bcb8b3435/packages/docs/static/definitions/processes/kycaml/0.0.1/generic--usa-entity-accinv-all-checks" + ] + + const { verificationResult, signature } = await solana({ + subject, + expiration: new Date(expiration * 1000), + chainId: 1337, + name, + version, + privateKey, + verifier_verification_id, + schema + }) + + // Consumer of the verification result first must rehash it + const message = Buffer.alloc( + 24 + + 7 + + 12 + + 32 + + 8 + + schema.reduce((acc, s) => acc + s.length + 4, 0) + + verifier_verification_id.length + + 4 + ) + + // Create the borsh layout. + const LAYOUT: Layout = struct([ + str("name"), + str("version"), + str("cluster"), + publicKey("subject"), + i64("expiration"), + array(str(), schema.length, "schema"), + str("verifier_verification_id") + ]) + LAYOUT.encode( + { + name: "VerificationRegistry", + version: "1.0", + cluster: "localnet", + expiration: new BN(verificationResult.expiration), + schema: verificationResult.schema, + subject: new PublicKey(verificationResult.subject), + verifier_verification_id + }, + message + ) + const messageHash = Buffer.from(keccak_256.update(message).digest()) + + // Then recovers the signer + const signatureArr = ethers.utils.arrayify(signature) + const recid = signatureArr.slice(64, 65)[0] - 27 + const signer = ecdsaRecover(signatureArr.slice(0, 64), recid, messageHash) + + // Convert the public key to an eth address + const publicKey2 = publicKeyConvert(signer, false).slice(1) + const recoveredEthAddress = publicKeyToEthAddress(publicKey2) + const signerHex = ethers.utils.hexlify(recoveredEthAddress) + + expect("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266".toLowerCase()).toBe( + signerHex + ) +}) diff --git a/packages/verifier/test/lib/url-fns.test.ts b/packages/verifier/test/lib/url-fns.test.ts new file mode 100644 index 000000000..64b0665be --- /dev/null +++ b/packages/verifier/test/lib/url-fns.test.ts @@ -0,0 +1,27 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { url } from "../../src/lib/url-fns" + +test("url() returns a fully formed URL given a path", () => { + expect(url("/foo/bar")).toBe(`${process.env.HOST ?? ""}/foo/bar`) +}) + +test("url() allows for paths without a leading slash", () => { + expect(url("foo/bar")).toBe(`${process.env.HOST ?? ""}/foo/bar`) +}) diff --git a/packages/verifier/test/lib/validations/expiry.test.ts b/packages/verifier/test/lib/validations/expiry.test.ts new file mode 100644 index 000000000..cbc0b0e6f --- /dev/null +++ b/packages/verifier/test/lib/validations/expiry.test.ts @@ -0,0 +1,48 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { assertNotExpired } from "../../../src/lib/validations/expiry" +import { decodedVerifiableCredentialFactory } from "../../factories/verifiable-credential" + +test("assertNotExpired() passes if the credential does not have an expiry", async () => { + const vc = await decodedVerifiableCredentialFactory() + + expect(() => { + assertNotExpired(vc) + }).not.toThrow() +}) + +test("assertNotExpired() passes if the credential expires in the future", async () => { + const vc = await decodedVerifiableCredentialFactory({ + expirationDate: new Date(Date.now() + 10000) + }) + + expect(() => { + assertNotExpired(vc) + }).not.toThrow() +}) + +test("assertNotExpired() throws when the credential is expired", async () => { + const vc = await decodedVerifiableCredentialFactory({ + expirationDate: new Date(Date.now() - 10000) + }) + + expect(() => { + assertNotExpired(vc) + }).toThrow("Credential has expired.") +}) diff --git a/packages/verifier/test/lib/validations/revocation.test.ts b/packages/verifier/test/lib/validations/revocation.test.ts new file mode 100644 index 000000000..2955ba21e --- /dev/null +++ b/packages/verifier/test/lib/validations/revocation.test.ts @@ -0,0 +1,157 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import nock, { disableNetConnect, enableNetConnect } from "nock" + +import { + assertNotRevoked, + isBitRevoked, + statusListDomainMapFunc, + getStatusListCredentialUrl +} from "../../../src/lib/validations/revocation" +import { + encodedRevocationListCredentialFactory, + revocationListCredentialFactory, + revocationStatusListFactory +} from "../../factories/revocationList" +import { decodedVerifiableCredentialFactory } from "../../factories/verifiable-credential" + +test("assertNotRevoked() passes if the credential is not revocable", async () => { + const vc = await decodedVerifiableCredentialFactory() + + await expect(assertNotRevoked(vc)).resolves.not.toThrow() +}) + +test("assertNotRevoked() passes if the credential is not yet revoked", async () => { + const credentialStatus = revocationStatusListFactory() + const vc = await decodedVerifiableCredentialFactory({ credentialStatus }) + const revocationList = await encodedRevocationListCredentialFactory() + + nock("https://example.com").get("/revocation-list").reply(200, revocationList) + + await expect(assertNotRevoked(vc)).resolves.not.toThrow() +}) + +test("assertNotRevoked() throws when the credential has been revoked", async () => { + const credentialStatus = revocationStatusListFactory(42) + const vc = await decodedVerifiableCredentialFactory({ credentialStatus }) + const revocationList = await encodedRevocationListCredentialFactory({ + statusList: [42] + }) + + nock("https://example.com").get("/revocation-list").reply(200, revocationList) + + await expect(assertNotRevoked(vc)).rejects.toThrow() +}) + +test("assertNotRevoked() allows passing a pre-fetched status list", async () => { + const credentialStatus = revocationStatusListFactory(1) + const vc = await decodedVerifiableCredentialFactory({ credentialStatus }) + const revocationList = await revocationListCredentialFactory({ + statusList: [1] + }) + + await expect(assertNotRevoked(vc, revocationList)).rejects.toThrow() +}) + +test("assertNotRevoked() throws if the revocation list is unavailable", async () => { + const credentialStatus = revocationStatusListFactory(1) + const vc = await decodedVerifiableCredentialFactory({ credentialStatus }) + + nock("https://example.com").get("/revocation-list").reply(404) + + await expect(assertNotRevoked(vc)).rejects.toThrow() +}) + +test("assertNotRevoked() throws when a network error prevents the revocation list from being loaded", async () => { + const credentialStatus = revocationStatusListFactory(42) + const vc = await decodedVerifiableCredentialFactory({ credentialStatus }) + + disableNetConnect() + + await expect(assertNotRevoked(vc)).rejects.toThrow() + + enableNetConnect() +}) + +test("assertNotRevoked() throws when the revocation list is invalid", async () => { + const credentialStatus = revocationStatusListFactory(42) + const vc = await decodedVerifiableCredentialFactory({ credentialStatus }) + const revocationList = "invalid" + + nock("https://example.com").get("/revocation-list").reply(200, revocationList) + + await expect(assertNotRevoked(vc)).rejects.toThrow() +}) + +test("isBitRevoked() checks the revocation bit", () => { + const exampleStatusList = + "eJztwUERAAAIA6CdKeyfdLbwAyRnNgAAAAAAAAAAAAAAAAAAAMCfAr/AABs=" + expect(isBitRevoked(exampleStatusList, 934)).toEqual(false) + expect(isBitRevoked(exampleStatusList, 51)).toEqual(true) + + const bitMaskSize = 16 * 1024 * 8 + expect(isBitRevoked(exampleStatusList, bitMaskSize - 1)).toEqual(false) +}) + +test("statusListDomainMapFunc() returns a domain map or empty", () => { + const statusListDomainMapStr = + "issuer-smokebox.circle.com=verity-issuer-smokebox-verity-issuer.verity.svc.cluster.local:10050,issuer-staging.circle.com=verity-issuer-stg-verity-issuer.verity.svc.cluster.local:10050" + const statusListDomainMap = statusListDomainMapFunc(statusListDomainMapStr) + expect(statusListDomainMap["issuer-smokebox.circle.com"]).toEqual( + "verity-issuer-smokebox-verity-issuer.verity.svc.cluster.local:10050" + ) + expect(statusListDomainMap["issuer-staging.circle.com"]).toEqual( + "verity-issuer-stg-verity-issuer.verity.svc.cluster.local:10050" + ) + + const emptyMap = statusListDomainMapFunc("") + expect(emptyMap).toEqual({}) +}) + +test("getStatusListCredentialUrl() modify the domain name if found and select agent", () => { + const statusListDomainMap = statusListDomainMapFunc( + "issuer-smokebox.circle.com=verity-issuer-smokebox-verity-issuer.verity.svc.cluster.local:10050" + ) + const [urlAfter, agent1] = getStatusListCredentialUrl( + "https://issuer-smokebox.circle.com/api/v1/issuance/status/0", + statusListDomainMap + ) + expect(urlAfter).toEqual( + "https://verity-issuer-smokebox-verity-issuer.verity.svc.cluster.local:10050/api/v1/issuance/status/0" + ) + expect(agent1.options.rejectUnauthorized).toBeFalsy() + + const [urlNoMatch, agent2] = getStatusListCredentialUrl( + "https://issuer.circle.com/api/v1/issuance/status/0", + statusListDomainMap + ) + expect(urlNoMatch).toEqual( + "https://issuer.circle.com/api/v1/issuance/status/0" + ) + expect(agent2.options.rejectUnauthorized).toBeTruthy() + + const [urlUntouched, agent3] = getStatusListCredentialUrl( + "https://issuer.circle.com/api/v1/issuance/status/0", + {} + ) + expect(urlUntouched).toEqual( + "https://issuer.circle.com/api/v1/issuance/status/0" + ) + expect(agent3.options.rejectUnauthorized).toBeTruthy() +}) diff --git a/packages/verifier/test/lib/validations/subject.test.ts b/packages/verifier/test/lib/validations/subject.test.ts new file mode 100644 index 000000000..28c04faad --- /dev/null +++ b/packages/verifier/test/lib/validations/subject.test.ts @@ -0,0 +1,112 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { + assertHolderIsSubject, + assertCredentialSubjectMatchesRequest +} from "../../../src/lib/validations/subject" +import { decodedVerifiableCredentialFactory } from "../../factories/verifiable-credential" + +test("assertHolderIsSubject() passes if the credential subject matches the holder", async () => { + const vc = await decodedVerifiableCredentialFactory() + const vpSigner = vc.credentialSubject.id as string + + expect(() => { + assertHolderIsSubject(vpSigner, vc) + }).not.toThrow() +}) + +test("assertHolderIsSubject() throws when the credential subject does not match the holder", async () => { + const vc = await decodedVerifiableCredentialFactory() + const vpSigner = vc.issuer.id + + expect(() => { + assertHolderIsSubject(vpSigner, vc) + }).toThrow("Presentation is not signed by the subject") +}) + +test("assertRequestSubjectIsCredentialSubject() passes when the credential subject matches the verification request subject", async () => { + const ethAddress = "0x5922aee21da29814adc6b33cdf9920b72963a110" + const vcSubjectDid = `did:pkh:eip155:1:${ethAddress}` + + await expect( + assertCredentialSubjectMatchesRequest(ethAddress, vcSubjectDid) + ).resolves.not.toThrow() +}) + +test("assertRequestSubjectIsCredentialSubject() passes when the credential subject matches the verification request subject case insensitively", async () => { + const ethAddress = "0x5922aee21da29814adc6b33cdf9920b72963a110" + const vcSubjectDid = `did:pkh:eip155:1:${ethAddress.toLowerCase()}` + + await expect( + assertCredentialSubjectMatchesRequest(ethAddress.toUpperCase(), vcSubjectDid) + ).resolves.not.toThrow() +}) + +test("assertRequestSubjectIsCredentialSubject() throws when the credential subject does not matches the verification request subject", async () => { + const ethAddress = "0x5922aee21da29814adc6b33cdf9920b72963a110" + const vcSubjectDid = `did:pkh:eip155:1:${ethAddress}` + + await expect( + assertCredentialSubjectMatchesRequest("blah", vcSubjectDid) + ).rejects.toThrow( + `Credential subject does not match the subject in the verification request. ${ethAddress} is not equal to blah` + ) +}) + +test("assertRequestSubjectIsCredentialSubject() throws when the credential subject is undefined", async () => { + await expect( + assertCredentialSubjectMatchesRequest("blah", undefined) + ).rejects.toThrow("Encountered invalid credential. Subject ID not found.") +}) + +test("assertRequestSubjectIsCredentialSubject() throws when the credential subject format is bad", async () => { + let vcSubjectDid: string + + // bad scheme + vcSubjectDid = + "foo_id:pkh:eip155:1:0x5922aee21da29814adc6b33cdf9920b72963a110" + await expect( + assertCredentialSubjectMatchesRequest("blah", vcSubjectDid) + ).rejects.toThrow(`Failed to parse did ${vcSubjectDid}`) + + // bad method + vcSubjectDid = + "did:foo_pkh:eip155:1:0x5922aee21da29814adc6b33cdf9920b72963a110" + await expect( + assertCredentialSubjectMatchesRequest("blah", vcSubjectDid) + ).rejects.toThrow(`Failed to parse did ${vcSubjectDid}`) + + // bad network ID + vcSubjectDid = "did:pkh:eip155:@:0x5922aee21da29814adc6b33cdf9920b72963a110" + await expect( + assertCredentialSubjectMatchesRequest("blah", vcSubjectDid) + ).rejects.toThrow(`Failed to parse did ${vcSubjectDid}`) + + // bad address character + vcSubjectDid = "did:pkh:eip155:2:0x5922aee21da29814adc6b33cdf9920b72963a11#" + await expect( + assertCredentialSubjectMatchesRequest("blah", vcSubjectDid) + ).rejects.toThrow(`Failed to parse did ${vcSubjectDid}`) + + // bad address prefix + vcSubjectDid = "did:pkh:eip155:2:0y5922aee21da29814adc6b33cdf9920b72963a110" + await expect( + assertCredentialSubjectMatchesRequest("blah", vcSubjectDid) + ).rejects.toThrow(`Failed to parse did ${vcSubjectDid}`) +}) diff --git a/packages/verifier/test/lib/verifier.test.ts b/packages/verifier/test/lib/verifier.test.ts new file mode 100644 index 000000000..e40e74943 --- /dev/null +++ b/packages/verifier/test/lib/verifier.test.ts @@ -0,0 +1,549 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { createJWS } from "did-jwt" +import { + transformCredentialInput, + validateJwtCredentialPayload +} from "did-jwt-vc" +import nock from "nock" + +import { + buildPresentationDefinition, + PresentationDefinition +} from "../../src/lib/presentation-definition" +import { verify } from "../../src/lib/verifier" +import { + generateRandomEthAddress, + getDidPkhFromEthAddress, + signerFactory, + SingerAlg +} from "../factories/did" +import { presentationDefinitionFactory } from "../factories/presentation-definition" +import { + encodedRevocationListCredentialFactory, + revocationStatusListFactory +} from "../factories/revocationList" +import { verifiableCredentialFactory } from "../factories/verifiable-credential" +import { verifiablePresentationFactory } from "../factories/verifiable-presentation" +import { verificationFactory } from "../factories/verification" + +test("verify() accepts a valid Verifiable Presentation and returns a Verification Result", async () => { + const issuer = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$` + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const holder = await signerFactory() + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcIssuer: issuer + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).resolves.not.toThrow() +}) + +test("verify() accepts a valid Verifiable Presentation containing multiple Verifiable Credentials", async () => { + const holder = await signerFactory() + const issuer = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$` + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + const vc = await verifiableCredentialFactory({ issuer }) + + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcJWT: [vc, vc] + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).resolves.not.toThrow() +}) + +test("verify() rejects malformed Verifiable Presentations", async () => { + const { subject, challenge, presentationDefinition } = + await verificationFactory() + const verifiablePresentation = await verifiablePresentationFactory({ + challenge + }) + + await expect( + verify( + presentationDefinition as PresentationDefinition, + verifiablePresentation.split(".")[0], + subject, + challenge + ) + ).rejects.toThrow("Input isn't a valid Verifiable Presentation") +}) + +test("verify() rejects Verifiable Presentations which contains an empty array of Verifiable Credentials", async () => { + const { subject, challenge, presentationDefinition } = + await verificationFactory() + const holder = await signerFactory() + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcJWT: [] + }) + + await expect( + verify( + presentationDefinition as PresentationDefinition, + verifiablePresentation, + subject, + challenge + ) + ).rejects.toThrow("No Verifiable Credential provided") +}) + +test("verify() rejects Verifiable Presentations with an invalid challenge", async () => { + const issuer = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$` + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const holder = await signerFactory() + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge: "some-invalid-challenge", + vcIssuer: issuer + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).rejects.toThrow("Input isn't a valid Verifiable Presentation") +}) + +test("verify() rejects credentials with invalid signature", async () => { + const holder = await signerFactory(SingerAlg.ES256K) + const issuer = await signerFactory(SingerAlg.ES256K) + const signer = await signerFactory(SingerAlg.ES256K) + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$` + }) + const vcJson = { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://verite.id/identity" + ], + type: ["VerifiableCredential", "KYBPAMLAttestation"], + credentialSubject: { + id: holder.did, + KYBPAMLAttestation: Object.assign({ + type: "KYBPAMLAttestation", + process: + "https://verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person", + approvalDate: new Date().toJSON() + }) + }, + credentialStatus: revocationStatusListFactory(), + expirationDate: new Date(Date.now() + 1000), + issuanceDate: new Date(), + issuer: { id: issuer.did } + } + const parsedPayload = transformCredentialInput(vcJson) + // sanity check the transformed payload + validateJwtCredentialPayload(parsedPayload) + + // sign this VC using a public key other than the issuer + const vc_jwt = await createJWS(parsedPayload, signer.signer, { + alg: signer.alg, + type: "JWT" + }) + + const { challenge } = await verificationFactory({ + presentationDefinition + }) + + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcJWT: [vc_jwt] + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, challenge) + ).rejects.toThrow( + "Input isn't a valid Verifiable Credential. Invalid signature." + ) +}) + +test("verify() rejects credentials from an untrusted issuer", async () => { + const issuer = await signerFactory() + const trustedIssuer = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${trustedIssuer.did}$` + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const holder = await signerFactory() + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcIssuer: issuer + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).rejects.toThrow("The issuer of the credential must be trusted") +}) + +test("verify() rejects expired credentials", async () => { + const { subject, challenge, presentationDefinition } = + await verificationFactory() + const expirationDate = new Date(Date.now() - 1000) + const vc = await verifiableCredentialFactory({ expirationDate }) + + const verifiablePresentation = await verifiablePresentationFactory({ + challenge, + vcJWT: vc + }) + + await expect( + verify( + presentationDefinition as PresentationDefinition, + verifiablePresentation, + subject, + challenge + ) + ).rejects.toThrow("Credential has expired.") +}) + +test("verify() rejects revoked credentials", async () => { + const issuer = await signerFactory() + const holder = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$` + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const credentialStatus = revocationStatusListFactory(42) + const revocationList = await encodedRevocationListCredentialFactory({ + statusList: [42] + }) + const vcJWT = await verifiableCredentialFactory({ + credentialStatus, + + issuer + }) + + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcJWT + }) + + nock("https://example.com").get("/revocation-list").reply(200, revocationList) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).rejects.toThrow("Credential has been revoked.") +}) + +test("verify() rejects credentials missing approvalDate", async () => { + const issuer = await signerFactory() + const holder = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$` + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const vcJWT = await verifiableCredentialFactory({ + issuer, + approvalDate: null + }) + + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcJWT + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).rejects.toThrow( + "Credential does not adhere to schema: /approvalDate must be string" + ) +}) + +test("verify() rejects credentials missing the KYC process", async () => { + const issuer = await signerFactory() + const holder = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$` + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const vcJWT = await verifiableCredentialFactory({ + issuer, + process: null + }) + + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcJWT + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).rejects.toThrow( + "Credential does not adhere to schema: /process must be string" + ) +}) + +test("verify() rejects credentials with an invalid schema", async () => { + const issuer = await signerFactory() + const holder = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$` + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const vcJWT = await verifiableCredentialFactory({ + issuer, + approvalDate: "not-an-iso-8601-string" // not a string + }) + + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcJWT + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).rejects.toThrow( + "Credential did not satisfy required constraint: The date upon which this KYC/AML Attestation was issued." + ) +}) + +test("verify() rejects when given an invalid schema", async () => { + const issuer = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + schema: "some-unknown-schema", + trustedIssuers: `^${issuer.did}$` + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const holder = await signerFactory() + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcIssuer: issuer + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).rejects.toThrow("Unknown schema: some-unknown-schema") +}) + +test("verify() rejects when given an invalid credential type", async () => { + const holder = await signerFactory() + const issuer = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$` + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const vcJWT = await verifiableCredentialFactory({ + issuer, + credentialType: "NotKYBPAML" + }) + + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcJWT + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).rejects.toThrow( + "Submission claims having descriptorId kybpaml_input but the matching type KYBPAMLAttestation does not exist in the credential" + ) +}) + +test("verify() rejects when given an invalid credential type attestation", async () => { + const holder = await signerFactory() + const issuer = await signerFactory() + const presentationDefinition = buildPresentationDefinition({ + trustedIssuers: `^${issuer.did}$` + }) + presentationDefinition.input_descriptors.push() + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const vcJWT = await verifiableCredentialFactory({ + issuer, + additionalCredentialTypes: ["EntityAccInvAttestation"] + }) + + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcJWT, + additionalDescriptorMapFields: [ + { + format: "jwt_vc", + id: "accinv_input", + path: "$.verifiableCredential[0]" + } + ] + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).rejects.toThrow( + "No attestation of type EntityAccInvAttestation present in credential" + ) +}) + +test("verify() rejects if a required field is missing", async () => { + const issuer = await signerFactory() + const holder = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$`, + additionalFields: [ + { + path: ["$.credentialSubject.KYBPAMLAttestation.someRandomField"], + purpose: "A Random Field", + predicate: "required", + filter: { + type: "string" + } + } + ] + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const vcJWT = await verifiableCredentialFactory({ + issuer + }) + + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcJWT + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).rejects.toThrow("Credential is missing required field: A Random Field") +}) + +test("verify() allows `preferred` constraints to pass even if failing", async () => { + const issuer = await signerFactory() + const holder = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$`, + additionalFields: [ + { + path: ["$.credentialSubject.KYBPAMLAttestation.someRandomField"], + purpose: "A Random Field", + predicate: "preferred", + filter: { + type: "string" + } + } + ] + }) + const { subject, challenge } = await verificationFactory({ + presentationDefinition + }) + + const vcJWT = await verifiableCredentialFactory({ + issuer + }) + + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcJWT + }) + + await expect( + verify(presentationDefinition, verifiablePresentation, subject, challenge) + ).resolves.not.toThrow() +}) + +test("verify() rejects if a submit contains a VC that is owned not by the verification request subject", async () => { + const issuer = await signerFactory() + const presentationDefinition = presentationDefinitionFactory({ + trustedIssuers: `^${issuer.did}$` + }) + + const verificationRequestSubject = generateRandomEthAddress() + const { challenge } = await verificationFactory({ + subject: verificationRequestSubject, + presentationDefinition + }) + + const holder = await signerFactory() + const vcSubjectAddress = generateRandomEthAddress() + const vcSubject = getDidPkhFromEthAddress(vcSubjectAddress) + const verifiablePresentation = await verifiablePresentationFactory({ + holder, + challenge, + vcIssuer: issuer, + subject: vcSubject + }) + + await expect( + verify( + presentationDefinition, + verifiablePresentation, + verificationRequestSubject, + challenge + ) + ).rejects.toThrow( + `Credential subject does not match the subject in the verification request. ${vcSubjectAddress} is not equal to ${verificationRequestSubject}` + ) +}) diff --git a/packages/verifier/test/logger/index.test.ts b/packages/verifier/test/logger/index.test.ts new file mode 100644 index 000000000..60b944251 --- /dev/null +++ b/packages/verifier/test/logger/index.test.ts @@ -0,0 +1,56 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { jsonReplacer } from "../../src/logger" + +test("metadata should only allow 1 layer of string values", () => { + const logEntry = { + level: "info", + message: "foo message", + metadata: { + numKey: 1, + boolKey: true, + objKey: { + nestedIntKey: 2, + nestedBoolKey: true, + nestedStrKey: "nested message", + objObjKey: { + nestedIntKey2: 3, + nestedBoolKey2: true, + nestedStrKey2: "double nested message" + } + }, + arrKey: [{ arrNestedKey: "array nested message" }, 2] + } + } + const logContextStr = JSON.stringify(logEntry, jsonReplacer) + const logContext = JSON.parse(logContextStr) + const metadataObj = logContext["metadata" as keyof typeof logContext] + expect(typeof metadataObj["numKey" as keyof typeof metadataObj]).toEqual( + "string" + ) + expect(typeof metadataObj["boolKey" as keyof typeof metadataObj]).toEqual( + "string" + ) + expect(typeof metadataObj["objKey" as keyof typeof metadataObj]).toEqual( + "string" + ) + expect(typeof metadataObj["arrKey" as keyof typeof metadataObj]).toEqual( + "string" + ) +}) diff --git a/packages/verifier/test/setup.ts b/packages/verifier/test/setup.ts new file mode 100644 index 000000000..beef905b6 --- /dev/null +++ b/packages/verifier/test/setup.ts @@ -0,0 +1,34 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import "regenerator-runtime/runtime" +import { jest } from "@jest/globals" + +/** + * Disable debug output + */ +delete process.env.DEBUG + +jest.mock("hot-shots", () => ({ + StatsD: function mockStatsD() { + return { + increment: Function.prototype, + timing: Function.prototype + } + } +})) diff --git a/packages/verifier/tsconfig.build.json b/packages/verifier/tsconfig.build.json new file mode 100644 index 000000000..f865b4c01 --- /dev/null +++ b/packages/verifier/tsconfig.build.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist"], + "include": ["src/**/*"] +} diff --git a/packages/verifier/tsconfig.json b/packages/verifier/tsconfig.json new file mode 100644 index 000000000..81c1e0bc7 --- /dev/null +++ b/packages/verifier/tsconfig.json @@ -0,0 +1,103 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + /* Visit https://github.com/tsconfig/bases/#node-16-tsconfigjson for recommended tsconfig for our Node version */ + + /* Projects */ + // "incremental": true, /* Enable incremental compilation */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + "lib": ["es2021"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ + // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + + /* Modules */ + "module": "commonjs" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */, + "paths": {} /* Specify a set of entries that re-map imports to additional lookup locations. */, + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + "resolveJsonModule": true /* Enable importing .json files */, + // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ + // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ + // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": ["src/**/*.ts", "test/**/*.ts", "examples/**/*.ts"] +} diff --git a/pr_test.sh b/pr_test.sh new file mode 100755 index 000000000..bd31f37e2 --- /dev/null +++ b/pr_test.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + + +set -e + +echo "Running Build..." + +npm install +npm run build -w verifier +npm run compile -w ethereum + +echo "Running Lint & Coverage..." +npm run lint +npm run type-check + +echo "Running Migrations and Tests..." +./rebuild-db.sh +npm run test + +# Use this in CI once the script is fully ready +# ./run-verifier-test.sh diff --git a/rebuild-db.sh b/rebuild-db.sh new file mode 100755 index 000000000..d27610b56 --- /dev/null +++ b/rebuild-db.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# exit on failure + +set -e + +DOC_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# migrate the DB +echo "dumping DB config for creating DB.." +set -o allexport; source "${DOC_ROOT}/packages/verifier/.env"; set +o allexport +set +x +export MIGRATE_DB_USER="dba" +export MIGRATE_DB_PASSWORD="TestPassWord!!" +set -x +"${DOC_ROOT}"/docker/usr/local/verifier/migrate.sh +echo "Successfully created and migrated DB" diff --git a/run-verifier-test.sh b/run-verifier-test.sh new file mode 100755 index 000000000..0d4438736 --- /dev/null +++ b/run-verifier-test.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +# Copyright 2024 Circle Internet Group, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +# exit when any command fails +set -e + +pip3 install "pyjwt[crypto]" + +npm run --silent start& + +# healthcheck +count=20 +url="http://localhost:3000/ping" +check_health() { + for ((i = 1; i <= count; i++)); do + result=$(curl -k -s -o /dev/null -w "%{http_code}" $url) + + if [ "$result" = "200" ]; then + echo "$url responsive. PONG!!!" + break + else + # none of the URLs returned 200 error code response + echo -e "\nunresponsive. Attempt $i of $count. Retrying in 10 seconds.\n" + if [ "$i" != "$count" ]; then + sleep 10 + fi + fi + + if [ "$i" == "$count" ]; then + echo -e "\nERROR: unresponsive after $count attempts. Aborting\n" + exit 1 + fi + done +} + +check_health + +pushd test-scripts +python3 verifier-test.py + +ret=$? +if [ $ret -ne 0 ]; then + exit 1 +fi +popd diff --git a/test/fixtures/did-eddsa-base58.json b/test/fixtures/did-eddsa-base58.json new file mode 100644 index 000000000..80fce5aac --- /dev/null +++ b/test/fixtures/did-eddsa-base58.json @@ -0,0 +1,55 @@ +{ + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1", + "https://w3id.org/security/suites/x25519-2019/v1" + ], + "id": "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN", + "verificationMethod": [ + { + "id": "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN#z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN", + "type": "Ed25519VerificationKey2018", + "controller": "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN", + "publicKeyBase58": "GmBrbAaoHNAqjpwuJTrYEPAKMDGctoQMx6uZFZy9YArz" + }, + { + "id": "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN#z6LSn439W2Kv6XrwabEPhtuid3s22tsYDyNPppMYavjvL1bg", + "type": "X25519KeyAgreementKey2019", + "controller": "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN", + "publicKeyBase58": "BNryyiX4159CVCrdBFPmJTeYBkLRXNCEwqds6U6Pcdpv" + } + ], + "assertionMethod": [ + "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN#z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN" + ], + "authentication": [ + "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN#z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN" + ], + "capabilityInvocation": [ + "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN#z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN" + ], + "capabilityDelegation": [ + "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN#z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN" + ], + "keyAgreement": [ + "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN#z6LSn439W2Kv6XrwabEPhtuid3s22tsYDyNPppMYavjvL1bg" + ] + }, + "keys": [ + { + "id": "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN#z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN", + "type": "Ed25519VerificationKey2018", + "controller": "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN", + "publicKeyBase58": "GmBrbAaoHNAqjpwuJTrYEPAKMDGctoQMx6uZFZy9YArz", + "privateKeyBase58": "5kkF5qLyUDPEfBgmvw7AGJ1bqDemPUErTHQdGwkZkYexJYBiVwpkWCAEYe5rehKAxvXAw4tB1PAef9tsJuPXQtvA" + }, + { + "id": "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN#z6LSn439W2Kv6XrwabEPhtuid3s22tsYDyNPppMYavjvL1bg", + "type": "X25519KeyAgreementKey2019", + "controller": "did:key:z6MkvDSuBQqEcufJrKnbz2pP5UiKAnYUJgeie7pV5qwATPeN", + "publicKeyBase58": "BNryyiX4159CVCrdBFPmJTeYBkLRXNCEwqds6U6Pcdpv", + "privateKeyBase58": "4oMwjqd5RH1MH9wU9SDXadV7pbkZo9Jx3KxrmB16VkYz" + } + ] +} diff --git a/test/fixtures/did-eddsa-hex.json b/test/fixtures/did-eddsa-hex.json new file mode 100644 index 000000000..69213a599 --- /dev/null +++ b/test/fixtures/did-eddsa-hex.json @@ -0,0 +1,55 @@ +{ + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1", + "https://w3id.org/security/suites/x25519-2019/v1" + ], + "id": "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM", + "verificationMethod": [ + { + "id": "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM#z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM", + "type": "Ed25519VerificationKey2018", + "controller": "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM", + "publicKeyHex": "9a9833e8ebf6fdb7ccef727e458ff7ad28a677386097fd19c7fee20f7be1dde6" + }, + { + "id": "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM#z6LSpGUuAEGLHx59uj65G3unjWw9ptBM6XWwWQH2TNTpPzUP", + "type": "X25519KeyAgreementKey2019", + "controller": "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM", + "publicKeyHex": "bb160b3543930e4a274e3bef1373dc7fd4ae7448e488a6629297c8ba4a982418" + } + ], + "assertionMethod": [ + "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM#z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM" + ], + "authentication": [ + "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM#z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM" + ], + "capabilityInvocation": [ + "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM#z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM" + ], + "capabilityDelegation": [ + "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM#z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM" + ], + "keyAgreement": [ + "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM#z6LSpGUuAEGLHx59uj65G3unjWw9ptBM6XWwWQH2TNTpPzUP" + ] + }, + "keys": [ + { + "id": "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM#z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM", + "type": "Ed25519VerificationKey2018", + "controller": "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM", + "publicKeyHex": "9a9833e8ebf6fdb7ccef727e458ff7ad28a677386097fd19c7fee20f7be1dde6", + "privateKeyHex": "ce0c0e88c844935d920b91181f24be7d8a74d1710028deffe990dc81b9c3f78e9a9833e8ebf6fdb7ccef727e458ff7ad28a677386097fd19c7fee20f7be1dde6" + }, + { + "id": "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM#z6LSpGUuAEGLHx59uj65G3unjWw9ptBM6XWwWQH2TNTpPzUP", + "type": "X25519KeyAgreementKey2019", + "controller": "did:key:z6MkprjSTsSpFQsvfXnCCEtNUwLCG9waVWeXUqfz7eRkqPiM", + "publicKeyHex": "bb160b3543930e4a274e3bef1373dc7fd4ae7448e488a6629297c8ba4a982418", + "privateKeyHex": "10118ef4f1ccf98d9880c187eaa66c041bd91d2395bd6c69908a7b77033ed44b" + } + ] +} diff --git a/test/fixtures/did-eddsa-jwk.json b/test/fixtures/did-eddsa-jwk.json new file mode 100644 index 000000000..6a9fd33d3 --- /dev/null +++ b/test/fixtures/did-eddsa-jwk.json @@ -0,0 +1,80 @@ +{ + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR", + "verificationMethod": [ + { + "id": "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR#z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR", + "type": "JsonWebKey2020", + "controller": "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR", + "publicKeyJwk": { + "kty": "OKP", + "crv": "Ed25519", + "x": "zqqwIJvDv5zdCf07ex63fBvOpAwSvhiKPtY9cGa-DmY" + } + }, + { + "id": "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR#z6LScP2Pts99N6r73dAByaexYe7fUhZBzvHs19LGVhSMpLZ5", + "type": "JsonWebKey2020", + "controller": "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR", + "publicKeyJwk": { + "kty": "OKP", + "crv": "X25519", + "x": "Cnblw8892W0o1WZlThkAu221iZTqCt0FGt4CXgLHzSg" + } + } + ], + "assertionMethod": [ + "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR#z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR" + ], + "authentication": [ + "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR#z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR" + ], + "capabilityInvocation": [ + "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR#z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR" + ], + "capabilityDelegation": [ + "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR#z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR" + ], + "keyAgreement": [ + "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR#z6LScP2Pts99N6r73dAByaexYe7fUhZBzvHs19LGVhSMpLZ5" + ] + }, + "keys": [ + { + "id": "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR#z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR", + "type": "JsonWebKey2020", + "controller": "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR", + "publicKeyJwk": { + "kty": "OKP", + "crv": "Ed25519", + "x": "zqqwIJvDv5zdCf07ex63fBvOpAwSvhiKPtY9cGa-DmY" + }, + "privateKeyJwk": { + "kty": "OKP", + "crv": "Ed25519", + "x": "zqqwIJvDv5zdCf07ex63fBvOpAwSvhiKPtY9cGa-DmY", + "d": "3-tK9uQoWZq3f5IUpipiPbaoYRdn5eYsLgjZA5DXNEs" + } + }, + { + "id": "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR#z6LScP2Pts99N6r73dAByaexYe7fUhZBzvHs19LGVhSMpLZ5", + "type": "JsonWebKey2020", + "controller": "did:key:z6MktMzzHjMfGmhHMyjDcsBh1NhBA8YEAfxMcRYwG4rwyJzR", + "publicKeyJwk": { + "kty": "OKP", + "crv": "X25519", + "x": "Cnblw8892W0o1WZlThkAu221iZTqCt0FGt4CXgLHzSg" + }, + "privateKeyJwk": { + "kty": "OKP", + "crv": "X25519", + "x": "Cnblw8892W0o1WZlThkAu221iZTqCt0FGt4CXgLHzSg", + "d": "WJ0Sza_2o9iPYatFQOgL9BopyHXXJj75TlifJema9mQ" + } + } + ] +} diff --git a/test/fixtures/did-eddsa-multibase.json b/test/fixtures/did-eddsa-multibase.json new file mode 100644 index 000000000..95060f70a --- /dev/null +++ b/test/fixtures/did-eddsa-multibase.json @@ -0,0 +1,55 @@ +{ + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1", + "https://w3id.org/security/suites/x25519-2019/v1" + ], + "id": "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc", + "verificationMethod": [ + { + "id": "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc#z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc", + "type": "Ed25519VerificationKey2018", + "controller": "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc", + "publicKeyMultibase": "mlbOSg0dqPl5C+F+Z7zeN22B9PyisEQVT2Nvqiegs9X8" + }, + { + "id": "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc#z6LSin5wmyAsp96cjELwU5R9JCJ77Xd8vTfQN6bevutDCVsF", + "type": "X25519KeyAgreementKey2019", + "controller": "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc", + "publicKeyMultibase": "maYVkLT1k1Dd9BRxwtoZ8dUFOxE8egmwtTamdB1hhPSo" + } + ], + "assertionMethod": [ + "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc#z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc" + ], + "authentication": [ + "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc#z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc" + ], + "capabilityInvocation": [ + "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc#z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc" + ], + "capabilityDelegation": [ + "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc#z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc" + ], + "keyAgreement": [ + "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc#z6LSin5wmyAsp96cjELwU5R9JCJ77Xd8vTfQN6bevutDCVsF" + ] + }, + "keys": [ + { + "id": "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc#z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc", + "type": "Ed25519VerificationKey2018", + "controller": "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc", + "publicKeyMultibase": "mlbOSg0dqPl5C+F+Z7zeN22B9PyisEQVT2Nvqiegs9X8", + "privateKeyMultibase": "maqNJU/c/PosuQ+myj899K8lM8uqbRqy1AWSkChOuPJaVs5KDR2o+XkL4X5nvN43bYH0/KKwRBVPY2+qJ6Cz1fw" + }, + { + "id": "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc#z6LSin5wmyAsp96cjELwU5R9JCJ77Xd8vTfQN6bevutDCVsF", + "type": "X25519KeyAgreementKey2019", + "controller": "did:key:z6MkpXdcAaXoTQsSFEoERS2yuLvgZxoU3u6FN9ahd4A1Aryc", + "publicKeyMultibase": "maYVkLT1k1Dd9BRxwtoZ8dUFOxE8egmwtTamdB1hhPSo", + "privateKeyMultibase": "moFUklHcUqwjW2BaY9uo0PuEJRR40WBD9rqtz1oT9+kQ" + } + ] +} diff --git a/test/fixtures/did-es256k-base58.json b/test/fixtures/did-es256k-base58.json new file mode 100644 index 000000000..e72ea80b6 --- /dev/null +++ b/test/fixtures/did-es256k-base58.json @@ -0,0 +1,41 @@ +{ + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/secp256k1-2019/v1" + ], + "id": "did:key:zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh", + "verificationMethod": [ + { + "id": "did:key:zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh#zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh", + "type": "EcdsaSecp256k1VerificationKey2019", + "controller": "did:key:zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh", + "publicKeyBase58": "mF7AZNLY6XJBPob5BeBNKRrDUiPRvbqvVCqwergYDDuy" + } + ], + "assertionMethod": [ + "did:key:zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh#zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh" + ], + "authentication": [ + "did:key:zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh#zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh" + ], + "capabilityInvocation": [ + "did:key:zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh#zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh" + ], + "capabilityDelegation": [ + "did:key:zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh#zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh" + ], + "keyAgreement": [ + "did:key:zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh#zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh" + ] + }, + "keys": [ + { + "id": "did:key:zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh#zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh", + "type": "EcdsaSecp256k1VerificationKey2019", + "controller": "did:key:zQ3shXCGBQWp1RAX4duGVZj4R92Df8UaQD9tTR8bjxCMfRhmh", + "publicKeyBase58": "mF7AZNLY6XJBPob5BeBNKRrDUiPRvbqvVCqwergYDDuy", + "privateKeyBase58": "7huMcpzxmwTBJjmnYF7nd4rD6XzPkcFgR7SRqufAPMPq" + } + ] +} diff --git a/test/fixtures/did-es256k-jwk.json b/test/fixtures/did-es256k-jwk.json new file mode 100644 index 000000000..e7a43556e --- /dev/null +++ b/test/fixtures/did-es256k-jwk.json @@ -0,0 +1,57 @@ +{ + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU", + "verificationMethod": [ + { + "id": "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU", + "type": "JsonWebKey2020", + "controller": "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU", + "publicKeyJwk": { + "kty": "EC", + "crv": "secp256k1", + "x": "agWS94QIY0J0oNwZ7iJqDR7AOEXHmHMI4m88Qq9J6F8", + "y": "ZawjKP2ycXrPSOuvQdgn0IUdLBcm7Owza8dVzgw-x2Q" + } + } + ], + "assertionMethod": [ + "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU" + ], + "authentication": [ + "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU" + ], + "capabilityInvocation": [ + "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU" + ], + "capabilityDelegation": [ + "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU" + ], + "keyAgreement": [ + "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU" + ] + }, + "keys": [ + { + "id": "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU#zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU", + "type": "JsonWebKey2020", + "controller": "did:key:zQ3shUYeuHupkTB38kqqSqzhyqXix4MLjJ8xbydrdQBbruqKU", + "publicKeyJwk": { + "kty": "EC", + "crv": "secp256k1", + "x": "agWS94QIY0J0oNwZ7iJqDR7AOEXHmHMI4m88Qq9J6F8", + "y": "ZawjKP2ycXrPSOuvQdgn0IUdLBcm7Owza8dVzgw-x2Q" + }, + "privateKeyJwk": { + "kty": "EC", + "crv": "secp256k1", + "x": "agWS94QIY0J0oNwZ7iJqDR7AOEXHmHMI4m88Qq9J6F8", + "y": "ZawjKP2ycXrPSOuvQdgn0IUdLBcm7Owza8dVzgw-x2Q", + "d": "PPkMfPaTKKQ5kgH0vAEo8ts6Jn3NjSBiDHJ7vKPEZdo" + } + } + ] +} diff --git a/test/fixtures/did-es256k-multibase.json b/test/fixtures/did-es256k-multibase.json new file mode 100644 index 000000000..2dcfcc60a --- /dev/null +++ b/test/fixtures/did-es256k-multibase.json @@ -0,0 +1,41 @@ +{ + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/secp256k1-2019/v1" + ], + "id": "did:key:zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo", + "verificationMethod": [ + { + "id": "did:key:zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo#zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo", + "type": "EcdsaSecp256k1VerificationKey2019", + "controller": "did:key:zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo", + "publicKeyMultibase": "mA7oMwLRN8JcTlq9YSgcA28UJhdJkl2IdA+X2Bu99DRxy" + } + ], + "assertionMethod": [ + "did:key:zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo#zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo" + ], + "authentication": [ + "did:key:zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo#zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo" + ], + "capabilityInvocation": [ + "did:key:zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo#zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo" + ], + "capabilityDelegation": [ + "did:key:zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo#zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo" + ], + "keyAgreement": [ + "did:key:zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo#zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo" + ] + }, + "keys": [ + { + "id": "did:key:zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo#zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo", + "type": "EcdsaSecp256k1VerificationKey2019", + "controller": "did:key:zQ3shsANEjqUEzDQNJCJgQP7g37sT35hdDAjyhopViykZkgyo", + "publicKeyMultibase": "mA7oMwLRN8JcTlq9YSgcA28UJhdJkl2IdA+X2Bu99DRxy", + "privateKeyMultibase": "mqSu2eHLQlu5ovq51rO4dJjfmTtZChwJs+lqaitQpyC8" + } + ] +} diff --git a/test/fixtures/ed-es256k-hex.json b/test/fixtures/ed-es256k-hex.json new file mode 100644 index 000000000..7a06d4ded --- /dev/null +++ b/test/fixtures/ed-es256k-hex.json @@ -0,0 +1,41 @@ +{ + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/secp256k1-2019/v1" + ], + "id": "did:key:zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz", + "verificationMethod": [ + { + "id": "did:key:zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz#zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz", + "type": "EcdsaSecp256k1VerificationKey2019", + "controller": "did:key:zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz", + "publicKeyBase58": "0302b094b44200fd9da3ec333e0a010c2fca5e52f53448cdb28f945a26486018b1" + } + ], + "assertionMethod": [ + "did:key:zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz#zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz" + ], + "authentication": [ + "did:key:zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz#zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz" + ], + "capabilityInvocation": [ + "did:key:zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz#zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz" + ], + "capabilityDelegation": [ + "did:key:zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz#zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz" + ], + "keyAgreement": [ + "did:key:zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz#zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz" + ] + }, + "keys": [ + { + "id": "did:key:zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz#zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz", + "type": "EcdsaSecp256k1VerificationKey2019", + "controller": "did:key:zQ3shepc7S6J933rhsHb1GhW31Yu1ndcQKhseRrtccb7R3RMz", + "publicKeyBase58": "0302b094b44200fd9da3ec333e0a010c2fca5e52f53448cdb28f945a26486018b1", + "privateKeyBase58": "cf8551c019159692a64d22957617467e52526276409b179cc50a67cd0c9f1a53" + } + ] +} From b888104a5751e211457cc780cd87949a15d6c0c2 Mon Sep 17 00:00:00 2001 From: Tao Tao Date: Fri, 2 Aug 2024 11:36:30 -0700 Subject: [PATCH 2/5] update the license ignore format. --- .licenseignore | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.licenseignore b/.licenseignore index 475022c37..662651e39 100644 --- a/.licenseignore +++ b/.licenseignore @@ -1,13 +1,13 @@ -pkg:npm/borsh -@bcoe/v8-coverage -did-jwt-vc -language-subtag-registry -multiformats -pako -sha.js -sprintf-js -ethereum-dapp -solana-dapp -ethereum -iniparser -hardhat +pkg:npm/borsh@^0.2.2 +pkg:npm/@bcoe/v8-coverage@^0.2.3 +pkg:npm/did-jwt-vc@^4.0.4 +pkg:npm/language-subtag-registry@~0.3.2 +pkg:npm/multiformats@^9.4.10 +pkg:npm/pako@^2.0.3 +pkg:npm/sha.js@^2.4.0 +pkg:npm/sprintf-js@~1.0.2 +pkg:npm/ethereum-dapp +pkg:npm/solana-dapp +pkg:npm/ethereum +pkg:npm/iniparser@~1.0.5 +pkg:npm/hardhat@^2.0.0 From aa1fabc051df19e3e39448e8a361e1ebdf531513 Mon Sep 17 00:00:00 2001 From: Tao Tao Date: Fri, 2 Aug 2024 11:40:56 -0700 Subject: [PATCH 3/5] update --- .licenseignore | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/.licenseignore b/.licenseignore index 662651e39..9b75deff8 100644 --- a/.licenseignore +++ b/.licenseignore @@ -1,13 +1,14 @@ -pkg:npm/borsh@^0.2.2 -pkg:npm/@bcoe/v8-coverage@^0.2.3 -pkg:npm/did-jwt-vc@^4.0.4 -pkg:npm/language-subtag-registry@~0.3.2 -pkg:npm/multiformats@^9.4.10 -pkg:npm/pako@^2.0.3 -pkg:npm/sha.js@^2.4.0 -pkg:npm/sprintf-js@~1.0.2 +pkg:npm/borsh%40%5E0.2.2 +pkg:npm/%40bcoe/v8-coverage%40%5E0.2.3 +pkg:npm/did-jwt-vc%40%5E4.0.4 +pkg:npm/language-subtag-registry%40~0.3.2 +pkg:npm/multiformats%40%5E9.4.10 +pkg:npm/pako%40%5E2.0.3 +pkg:npm/sha.js%40%5E2.4.0 +pkg:npm/sprintf-js%40~1.0.2 pkg:npm/ethereum-dapp pkg:npm/solana-dapp pkg:npm/ethereum -pkg:npm/iniparser@~1.0.5 -pkg:npm/hardhat@^2.0.0 +pkg:npm/iniparser%40~1.0.5 +pkg:npm/hardhat%40%5E2.0.0 + From ad1b399c620428a7996f3af535b82341ccafb020 Mon Sep 17 00:00:00 2001 From: Tao Tao Date: Fri, 2 Aug 2024 13:55:33 -0700 Subject: [PATCH 4/5] update --- .licenseignore | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.licenseignore b/.licenseignore index 9b75deff8..c2f3c138a 100644 --- a/.licenseignore +++ b/.licenseignore @@ -1,14 +1,14 @@ -pkg:npm/borsh%40%5E0.2.2 -pkg:npm/%40bcoe/v8-coverage%40%5E0.2.3 -pkg:npm/did-jwt-vc%40%5E4.0.4 -pkg:npm/language-subtag-registry%40~0.3.2 -pkg:npm/multiformats%40%5E9.4.10 -pkg:npm/pako%40%5E2.0.3 -pkg:npm/sha.js%40%5E2.4.0 -pkg:npm/sprintf-js%40~1.0.2 +pkg:npm/borsh@%5E0.2.2 +pkg:npm/@bcoe/v8-coverage@%5E0.2.3 +pkg:npm/did-jwt-vc@%5E4.0.4 +pkg:npm/language-subtag-registry@~0.3.2 +pkg:npm/multiformats@%5E9.4.10 +pkg:npm/pako@%5E2.0.3 +pkg:npm/sha.js@%5E2.4.0 +pkg:npm/sprintf-js@~1.0.2 pkg:npm/ethereum-dapp pkg:npm/solana-dapp pkg:npm/ethereum -pkg:npm/iniparser%40~1.0.5 -pkg:npm/hardhat%40%5E2.0.0 +pkg:npm/iniparser@~1.0.5 +pkg:npm/hardhat@%5E2.0.0 From 9314e6bf341877fa1a4348adcb48c1790d61ea1f Mon Sep 17 00:00:00 2001 From: Tao Tao Date: Fri, 2 Aug 2024 14:12:57 -0700 Subject: [PATCH 5/5] update --- .licenseignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.licenseignore b/.licenseignore index c2f3c138a..296a82569 100644 --- a/.licenseignore +++ b/.licenseignore @@ -1,5 +1,5 @@ pkg:npm/borsh@%5E0.2.2 -pkg:npm/@bcoe/v8-coverage@%5E0.2.3 +pkg:npm/%40bcoe/v8-coverage@%5E0.2.3 pkg:npm/did-jwt-vc@%5E4.0.4 pkg:npm/language-subtag-registry@~0.3.2 pkg:npm/multiformats@%5E9.4.10

    +): Promise { + for (let index = 0; index < arr.length; index++) { + await fn(arr[index], index, arr) + } +} diff --git a/packages/verifier/src/lib/utils/auth.ts b/packages/verifier/src/lib/utils/auth.ts new file mode 100644 index 000000000..5d1621f1a --- /dev/null +++ b/packages/verifier/src/lib/utils/auth.ts @@ -0,0 +1,62 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { findApiClient } from "../database/apiClient" +import { UnauthorizedError } from "../errors" + +import { isOnLatestLegalTerm } from "./user" + +type ValidApiTokenParams = { + id: string +} + +/** + * Returns True if the api token + * 1) matches the did + * 2) has not expired + * 3) has not revoked + * 4) is on the latest legal term version + */ +export const isValidAuth = async ({ id }: ValidApiTokenParams) => { + if (!id) { + throw new UnauthorizedError("Missing API token") + } + + let apiClient + + try { + apiClient = await findApiClient({ id }, true) + } catch (err) { + throw new UnauthorizedError("ApiClient cannot be found") + } + + const expiryInMs = apiClient.expiresInSeconds * 1000 + if (Date.now() > apiClient.createdAt.getTime() + expiryInMs) { + throw new UnauthorizedError("ApiClient has already expired") + } + + if (apiClient.revokedAt) { + throw new UnauthorizedError("ApiClient has already been revoked") + } + + if (!isOnLatestLegalTerm(apiClient.user)) { + throw new UnauthorizedError("ApiClient is not on latest legal term version") + } + + return apiClient +} diff --git a/packages/verifier/src/lib/utils/catch-err.ts b/packages/verifier/src/lib/utils/catch-err.ts new file mode 100644 index 000000000..84cc8960b --- /dev/null +++ b/packages/verifier/src/lib/utils/catch-err.ts @@ -0,0 +1,53 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +export type ErrorLoggingContext = { + errName?: string + errMsg?: string + stack?: string + errString?: string +} + +/** + * Print the caught error instance with as much information as possible + * @param message The prefix of the error message + * @param err The caught error instance + */ +export function errLog( + message: string, + err: unknown +): [string, ErrorLoggingContext] { + if (err instanceof Error) { + return [ + message, + { + errName: err.name, + errMsg: err.message, + stack: err.stack + } + ] + } else { + const errString = err as string + return [ + message, + { + errString + } + ] + } +} diff --git a/packages/verifier/src/lib/utils/key-management-client.ts b/packages/verifier/src/lib/utils/key-management-client.ts new file mode 100644 index 000000000..50158c04a --- /dev/null +++ b/packages/verifier/src/lib/utils/key-management-client.ts @@ -0,0 +1,33 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { loadSecret } from "./ssm-client" + +const PATH_TO_PRIVATE_KEY = "keyManagement/privateKeyHexString" + +const loadPrivateKey = async () => { + const privateKey = await loadSecret(PATH_TO_PRIVATE_KEY, true) + + if (privateKey) { + process.env["VERIFIER_PRIVATE_KEY"] = privateKey + } else { + throw new Error("Private key not loaded") + } +} + +export { loadPrivateKey } diff --git a/packages/verifier/src/lib/utils/ssm-client.ts b/packages/verifier/src/lib/utils/ssm-client.ts new file mode 100644 index 000000000..bdba4d519 --- /dev/null +++ b/packages/verifier/src/lib/utils/ssm-client.ts @@ -0,0 +1,55 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { + SSMClient, + GetParameterCommand, + GetParameterCommandInput, + GetParameterCommandOutput +} from "@aws-sdk/client-ssm" + +import { logger } from "../../logger" + +const client = new SSMClient({ region: process.env.AWS_REGION }) + +async function loadSecret(name: string, withDecryption: boolean) { + const input: GetParameterCommandInput = { + Name: getFullKey(name), + WithDecryption: withDecryption + } + + logger.info(`Getting key path ${input.Name as string}`) + const command = new GetParameterCommand(input) + try { + const response: GetParameterCommandOutput = await client.send(command) + return response.Parameter?.Value + } catch (err) { + logger.error("Error ", err) + } +} + +// Follows https://github.com/circlefin/platform-common/blob/963d916296a2b1af1714e966a147174c10e945b3/common-utils/src/main/java/com/circle/config/SSMSecretService.java#L95 +function getFullKey(name: string) { + const env = process.env.ENV || "" + const team = process.env.APP_TEAM || "" + const service = process.env.SERVICE_NAME || "" + + return `/${env}/${team}/${service}/${name}` +} + +export { loadSecret } diff --git a/packages/verifier/src/lib/utils/user.ts b/packages/verifier/src/lib/utils/user.ts new file mode 100644 index 000000000..5cb9f3e09 --- /dev/null +++ b/packages/verifier/src/lib/utils/user.ts @@ -0,0 +1,63 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { User } from "@prisma/client" +import { PrismaClientKnownRequestError } from "@prisma/client/runtime" + +import { createUser, getUser } from "../database/user" +import { BadRequestError, NotFoundError } from "../errors" + +const MIN_LEGAL_TERM_VERSION = 1 + +type CreateUserParams = { + did: string +} + +type GetUserParams = { + did: string +} + +export const createNewUser = async ({ did }: CreateUserParams) => { + try { + return await createUser({ + did, + legalTermVersion: MIN_LEGAL_TERM_VERSION + }) + } catch (err) { + if (err instanceof PrismaClientKnownRequestError && err.code === "P2002") { + throw new BadRequestError("User with DID already exists") + } + throw err + } +} + +export const getExistingUser = async ({ did }: GetUserParams) => { + try { + return await getUser({ did }) + } catch (err) { + if (err instanceof Error && err.name === "NotFoundError") { + throw new NotFoundError("Cannot find user") + } + + throw err + } +} + +export const isOnLatestLegalTerm = (user: User) => { + return user.legalTermVersion >= MIN_LEGAL_TERM_VERSION +} diff --git a/packages/verifier/src/lib/validations/credential.ts b/packages/verifier/src/lib/validations/credential.ts new file mode 100644 index 000000000..662b1c5f0 --- /dev/null +++ b/packages/verifier/src/lib/validations/credential.ts @@ -0,0 +1,332 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* eslint-disable import/no-named-as-default-member */ +import Ajv from "ajv" +import jsonpath from "jsonpath" + +import { logger } from "../../logger" +import type { VerifiableCredential } from "../../types/credentials" +import type { + CredentialSubmission, + InputDescriptorConstraintField +} from "../../types/presentation" +import { BadRequestError, InternalServerError } from "../errors" +import { + InputDescriptor, + PresentationDefinition, + DES_ID_TO_CRED_TYPE +} from "../presentation-definition" +import { EntityAccInvAttestationSchema } from "../schemas/EntityAccInvAttestation" +import { KYBPAMLAttestationSchema } from "../schemas/KYBPAMLAttestation" + +type Schema = Record +type Attestation = Record + +/** + * process url -> schema + */ +export const URL_TO_SCHEMA: { [x: string]: Schema } = { + "https://verite.id/definitions/processes/kycaml/0.0.1/generic--usa-legal_person": + KYBPAMLAttestationSchema as Schema, + "https://raw.githubusercontent.com/centrehq/verite/d1b97b3a475aa00cf894f72213f34b7bcb8b3435/packages/docs/static/definitions/processes/kycaml/0.0.1/generic--usa-entity-accinv-all-checks": + EntityAccInvAttestationSchema as Schema +} + +/** + * Load a Schema from the given URL. + * + * @throws BadRequestError if the schema is not found + */ +const findSchema = (uri: string): Schema => { + if (uri in URL_TO_SCHEMA) { + return URL_TO_SCHEMA[uri] + } + + throw new BadRequestError(`Unknown schema: ${uri}`) +} + +/** + * + * + * @throws BadRequestError if the + */ +const assertCredentialAdheresToSchema = ( + ajv: Ajv, + credential: VerifiableCredential, + schema: Record, + credentialType: string +): void => { + const attestation = credential.credentialSubject[credentialType] as + | Attestation + | undefined + + if (!attestation) { + throw new BadRequestError( + `No attestation of type ${credentialType} present in credential` + ) + } + + let validate + try { + validate = ajv.compile(schema) + } catch (error) { + throw new BadRequestError("Schema is invalid") + } + const valid = validate(attestation) + + if (!valid && validate.errors) { + const error = validate.errors[0] + const errorMessage = `${ + error.instancePath ? error.instancePath : "input" + } ${error.message ?? "is invalid"}` + + throw new BadRequestError( + `Credential does not adhere to schema: ${errorMessage}` + ) + } +} + +/** + * Find the first path in the input descriptor field which is present in the + * credential. + */ +const findFirstMatchingPathForField = ( + field: InputDescriptorConstraintField, + credential: VerifiableCredential +): unknown | undefined => { + for (const path of field.path) { + const value = jsonpath.query(credential, path) + if (value.length) { + return value[0] + } + } +} + +/** + * Validate a credential against a given input descriptor field constraints + * + * @throws BadRequestError if the credential does not satisfy the constraints + */ +const assertCredentialSatisfiesFieldConstraints = ( + ajv: Ajv, + field: InputDescriptorConstraintField, + credential: VerifiableCredential +): void => { + const value = findFirstMatchingPathForField(field, credential) + + /** + * If the field is not present in the credential, then the credential is not + * valid. + */ + if (!value) { + /** + * A "preferred" field is not required, so we can pass. + */ + if (field.predicate === "preferred") { + return + } + + /** + * This field is required and missing, throw an exception + */ + throw new BadRequestError( + `Credential is missing required field: ${field.purpose ?? field.id ?? ""}` + ) + } + + /** + * If the field is present in the credential, but the input descriptor `field` + * has no `filter` (i.e. no constraints), then the credential is valid. + */ + if (!field.filter) { + // PASS, no filter / constraint. Anything is valid + return + } + + /** + * If the field is present and there is a `filter`, validate the value in the + * credential against the `filter`. + */ + ajv.validate(field.filter, value) + + if (ajv.errors) { + throw new BadRequestError( + `Credential did not satisfy required constraint: ${field.purpose ?? ""}` + ) + } +} + +/** + * Validate an input descriptor against the provided credentials. This will check + * the adherence to the given schema, as well as to any other constraints, such + * as the issuer being trusted, the credential being approved, etc. + * + * @throws BadRequestError if the credentials do not match the input descriptor + */ +const validateInputDescriptor = ( + inputDescriptor: InputDescriptor, + credentials: VerifiableCredential[] +): void => { + if (!(inputDescriptor.id in DES_ID_TO_CRED_TYPE)) { + /** + * At this point, the inputDescriptor ID had already been validated. It is expected to be able to be mapped to + * a credentialType. It's a server error if it's not able to. This should never happen. + */ + logger.error( + `InputDescriptorId=${ + inputDescriptor.id + } is included in the VerificationOffer but not registered in credentialTypeMap=${JSON.stringify( + DES_ID_TO_CRED_TYPE + )}` + ) + throw new InternalServerError() + } + const credentialType: string = DES_ID_TO_CRED_TYPE[inputDescriptor.id] + + const constraints = inputDescriptor.constraints + const fields = constraints?.fields + + /** + * If there are no constraints for the input descriptor, then the credential + * is valid. + */ + if (!constraints || !fields || !fields.length) { + return + } + + const schemas = new Set( + inputDescriptor.schema.map(({ uri }) => findSchema(uri)) + ) + + /** + * Validate each credential against each of the constraints. + */ + credentials.forEach((credential) => { + /** + * Verifiable presentation claims that this credential has the to-be-verified descriptor ID. + * Verifiable offer defined its json path. The path should contain the expected credentialType. + * Here we validate if this credential really has this credentialType. + */ + if (!credential.type.find((t) => t === credentialType)) { + throw new BadRequestError( + `Submission claims having descriptorId ${inputDescriptor.id} but the matching type ${credentialType} does not exist in the credential` + ) + } + + const ajv = new Ajv() + + /** + * Validate the credential against the schema + */ + schemas.forEach((schema) => + assertCredentialAdheresToSchema(ajv, credential, schema, credentialType) + ) + + fields.forEach((field) => { + assertCredentialSatisfiesFieldConstraints(ajv, field, credential) + }) + }) +} + +/** + * Confirm the credential is valid and conforms to the Credential Offer and + * matches the expected schema. + * + * Originally, this check will ensure the credential meets the minimum requirements + * set forth in the request. + * + * But we relax on this check because we decide to implement verifier slightly different to the DIF definition. + * More details can be found in: + * https://circlepay.atlassian.net/jira/software/c/projects/VR/boards/429?modal=detail&selectedIssue=VR-122 + * In our implementation, we verify whatever the caller submitted. + * In DIF, verifier is supposed to tell the caller what to upload for verification, and checks if this + * presentation submission contains all the content that we earlier asked. + * + * @param presentation normalized user submission + * @param presentationDefinition verification offer that we provided in an earlier request + * @throws BadRequestError if the credential is not valid + */ +export const assertValidCredentialSubmission = ( + presentation: CredentialSubmission, + presentationDefinition: PresentationDefinition +): void => { + const inputDescriptors = presentationDefinition.input_descriptors ?? [] + const descriptorMap = + presentation.presentation_submission?.descriptor_map ?? [] + + // reject the submission if it contains unrecognized descriptor(s) + const supportedSubjects: Set = new Set( + inputDescriptors.map((d) => d.id) + ) + const unrecognizedSubject: string[] = descriptorMap + .filter(({ id }) => !supportedSubjects.has(id)) + .map((d) => d.id) + + if (unrecognizedSubject.length) { + throw new BadRequestError( + `Encountered unrecognized subjects: ${JSON.stringify( + unrecognizedSubject + )}` + ) + } + + /** + * Validate each input descriptor against the credentials which satisfy it. + */ + inputDescriptors.forEach((inputDescriptor) => { + /** + * Find the mapping to the credentials which satisfy this input descriptor. + */ + const descriptor = descriptorMap.find(({ id }) => id === inputDescriptor.id) + + /** + * If no credential matches this input descriptor, just skip. + */ + if (!descriptor) { + return + } + + /** + * We found one or more credentials matching the input descriptor. We now + * pull these credentials from the location defined by the descriptor's + * `path`. + */ + const credentials = jsonpath.query( + presentation, + descriptor.path + ) as VerifiableCredential[] + + /** + * If no credential satisfies this input descriptor, then fail. + */ + if (!credentials.length) { + throw new BadRequestError( + `No credentials satisfy input descriptor: ${ + inputDescriptor.name ?? inputDescriptor.id + }` + ) + } + + /** + * Validate the input descriptor against the credentials which claim to + * satisfy it. + */ + validateInputDescriptor(inputDescriptor, credentials) + }) +} diff --git a/packages/verifier/src/lib/validations/didToAddressConverter.ts b/packages/verifier/src/lib/validations/didToAddressConverter.ts new file mode 100644 index 000000000..530a6a93d --- /dev/null +++ b/packages/verifier/src/lib/validations/didToAddressConverter.ts @@ -0,0 +1,130 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + * SPDX-License-Identifier: Apache-2.0 + */ + +import { DIDResolutionResult, VerificationMethod } from "did-resolver" +import { isAddress } from "ethers/lib/utils" + +import { logger } from "../../logger" +import { didPkhResolver } from "../did" + +/** + * Convert the did to a blockchain address + * @param did The did string + */ +export const convertDidToAddress = async (did: string): Promise => { + function isResolutionResultGood( + didResult: DIDResolutionResult + ): VerificationMethod | string { + const verificationMethod: VerificationMethod | undefined = + didResult.didDocument?.verificationMethod?.[0] + if (didResult.didResolutionMetadata?.error || !verificationMethod) { + const { error } = didResult.didResolutionMetadata + return `DID resolve error: ${did}: ${error || "NA"}` + } else { + return verificationMethod + } + } + + const didResolutionResult: DIDResolutionResult = await didPkhResolver.resolve( + did + ) + const resultOrError = isResolutionResultGood(didResolutionResult) + if (typeof resultOrError === "string") { + logger.info("Failed to resolve did in pkh format", { + did, + didResult: JSON.stringify(didResolutionResult) + }) + throw errorThrow(did) + } + const address = convertPkhToEtherAddress(resultOrError) + + if (address.errorMessage || !address.address) { + logger.info("Failed to parse did", { + did, + errorMessage: address.errorMessage || "NA" + }) + throw errorThrow(did) + } + + return address.address +} + +/** + * EIP155 is ethereum: + * https://github.com/w3c-ccg/did-pkh/blob/90b28ad3c18d63822a8aab3c752302aa64fc9382/did-pkh-method-draft.md + * + * The 2nd part is the chain ID reference string (ex. 1 = mainnet, 137 = polygon mainnet): + * https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-2.md + * Regex syntax: https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-2.md#syntax + * + * Address begin with 0x, and are followed by 40 alphanumeric characters: + * https://metamask.zendesk.com/hc/en-us/articles/4702972178459-The-Ethereum-address-format-and-why-it-matters-when-using-MetaMask + * Regex syntax: https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-10.md#syntax + */ +const pkhEthMainnetRegex = /eip155:([-a-zA-Z\d]{1,32}):(0x[a-fA-F\d]{1,64})/ + +interface BlockchainAddress { + networkId?: string + chainIdReference?: string + address?: string + + errorMessage?: string +} + +const errorThrow = (did: string): Error => + new Error(`Failed to parse did ${did}`) + +function convertPkhToEtherAddress( + verificationMethod: VerificationMethod +): BlockchainAddress { + /** + * The ID is validated and ID parts are filled into {@link VerificationMethod}. + * By standard, it won't populate the address into the ethereumAddress field in {@link VerificationMethod}. + * Instead, it populates the blockchainAccountId field, and we need to parse the address out from it. + * https://github.com/w3c-ccg/did-pkh/blob/e608934faf0fdcf82023a830049dc821af1b6e90/test-vectors/did:pkh:eip155:1:0xb9c5714089478a327f09197987f16f9e5d936e8a.jsonld#L15 + */ + if (!verificationMethod.blockchainAccountId) { + return { + errorMessage: + "DID resolve error: blockchainAccountId not found for did:pkh" + } + } + const blockchainAccountId: string = verificationMethod.blockchainAccountId + + const pkhRexParts = pkhEthMainnetRegex.exec(blockchainAccountId) + if (!pkhRexParts || pkhRexParts.length < 3) { + return { errorMessage: `DID PKH parsing error. ID=${blockchainAccountId}` } + } + const chainIdReference: string = pkhRexParts[1] + const ethAddress: string = pkhRexParts[2] + if (!isAddress(ethAddress)) { + logger.info( + "Received PKH DID fits regex but failed in ether address validation.", + { ethAddress, blockchainAccountId: blockchainAccountId } + ) + return { + errorMessage: `DID PKH address is not valid. ethAddress=${ethAddress}` + } + } + + return { + networkId: "eip155", + chainIdReference: chainIdReference, + address: ethAddress + } +} diff --git a/packages/verifier/src/lib/validations/expiry.ts b/packages/verifier/src/lib/validations/expiry.ts new file mode 100644 index 000000000..bf5e453b4 --- /dev/null +++ b/packages/verifier/src/lib/validations/expiry.ts @@ -0,0 +1,35 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import type { VerifiableCredential } from "../../types/credentials" +import { BadRequestError } from "../errors" + +/** + * Confirm the credential is not expired. If the credential contains an `expirationDate` field, + * we confirm the credential is still valid. + * + * @throws BadRequestError if the credential is expired + */ +export const assertNotExpired = (credential: VerifiableCredential): void => { + if (credential.expirationDate) { + const expirationDate = new Date(credential.expirationDate) + if (expirationDate < new Date()) { + throw new BadRequestError("Credential has expired.") + } + } +} diff --git a/packages/verifier/src/lib/validations/revocation.ts b/packages/verifier/src/lib/validations/revocation.ts new file mode 100644 index 000000000..0f9a426ad --- /dev/null +++ b/packages/verifier/src/lib/validations/revocation.ts @@ -0,0 +1,208 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import https from "https" + +import { BitBuffer } from "bit-buffers" +import { has } from "lodash" +import type { Response } from "node-fetch" +import fetch from "node-fetch" + +import { logger } from "../../logger" +import type { + RevocableCredential, + RevocationListCredential, + VerifiableCredential +} from "../../types/credentials" +import { decodeVerifiableCredential } from "../coder" +import { BadRequestError } from "../errors" +import { statsd } from "../monitoring" +import { errLog } from "../utils/catch-err" + +/** + * Determine if a given credential is revocable or not. + * + * @returns true if the credential is revocable, false otherwise + */ +const isRevocable = ( + credential: VerifiableCredential | RevocableCredential +): credential is RevocableCredential => { + return has(credential, "credentialStatus.statusListIndex") +} + +/** + * Performs an HTTP request to fetch the revocation status list for a credential. + * + * @returns the encoded status list, if present + */ +const fetchStatusList = async ( + credential: RevocableCredential +): Promise => { + const [url, httpsAgent] = getStatusListCredentialUrl( + credential.credentialStatus.statusListCredential + ) + let response: Response + try { + const beforeFetchRevocation = new Date() + // eslint-disable-next-line + response = await fetch(url, { + method: "GET", + agent: httpsAgent + }) + statsd.timing("submit_verify_fetchRevocation", beforeFetchRevocation) + } catch (err) { + const [message, context] = errLog( + `Failed to fetch statusListCredential=${url}`, + err + ) + logger.info(message, context) + throw new BadRequestError("StatusListCredential URL is not reachable.") + } + + if (response.status === 200) { + const beforeDecodeRevocation = new Date() + const vcJwt = await response.text() + const revocationListCredential = decodeVerifiableCredential( + vcJwt + ) as Promise + statsd.timing("submit_verify_decodeRevocation", beforeDecodeRevocation) + return revocationListCredential + } else { + logger.info( + `Revocation status url returned non-200 http code. url=${url}, httpCode=${response.status}` + ) + throw new BadRequestError( + "Response from StatusListCredential URL is invalid." + ) + } +} + +/** + * Compose a statusListDomainMap from the env variable + */ +export const statusListDomainMapFunc = ( + statusListDomainMapStr?: string +): { [x: string]: string } => { + if (statusListDomainMapStr) { + const statusListDomainMap: { [x: string]: string } = {} + statusListDomainMapStr.split(",").forEach((entry) => { + const kv: string[] = entry.split("=") + statusListDomainMap[kv[0]] = kv[1] + }) + logger.info(`StatusListDomainMap=${JSON.stringify(statusListDomainMap)}`) + return statusListDomainMap + } else { + return {} + } +} +const statusListDomainMap: { [x: string]: string } = statusListDomainMapFunc( + process.env.STATUS_LIST_INTERNAL_DOMAIN_MAP +) + +/** + * HTTPS agent that is used for external resource on the Internet. + */ +const httpsAgent = new https.Agent({ + rejectUnauthorized: true, + keepAlive: true, + timeout: 30000 +}) +/** + * HTTPS agent that is used for internal resource, most likely the Issuer. Keep a longer connection. + */ +const internalHttpsAgent = new https.Agent({ + rejectUnauthorized: false, + keepAlive: true, + timeout: 90000 +}) + +/** + * Get the url that will be used to fetch the status list credential + */ +export const getStatusListCredentialUrl = ( + urlStr: string, + internalDomainMap: { [x: string]: string } = statusListDomainMap +): [string, https.Agent] => { + let agent = httpsAgent + if (!internalDomainMap) { + return [urlStr, agent] + } + const url = new URL(urlStr) + if (url.host in internalDomainMap) { + url.host = internalDomainMap[url.host] + agent = internalHttpsAgent + } + return [url.href, agent] +} + +/** + * Determine if a revocable credential has already been revoked. This method will + * fetch an external status list if no one is provided + * + * If we are unable to load the status list, we have to assume this credential is invalid. + * + * @returns whether or not the credential has been revoked + */ +const isRevoked = async ( + credential: RevocableCredential, + revocationStatusList?: RevocationListCredential +): Promise => { + const statusList = revocationStatusList ?? (await fetchStatusList(credential)) + + if (!statusList.credentialSubject.encodedList) { + throw new BadRequestError( + "Response from StatusListCredential URL is invalid." + ) + } + + const encodedList = statusList.credentialSubject.encodedList + const index = parseInt(credential.credentialStatus.statusListIndex, 10) + + return isBitRevoked(encodedList, index) +} + +/** + * Check the bit in the revocation string to determine the revocation status. + * @param bitString The encodedList field in credentialSubject which is returned from issuer + * @param index The offset of the bit as stored in the statusListIndex field of credentialStatus, which is in the VC + */ +export const isBitRevoked = (bitString: string, index: number): boolean => { + const bitBuffer = BitBuffer.fromBitstring(bitString) + return bitBuffer.test(index) +} + +/** + * Confirm the credential is not revoked. If the credential contains an + * `expirationDate` field, we confirm the credential is still valid. + * + * @throws BadRequestError if the credential is expired + */ +export const assertNotRevoked = async ( + credential: VerifiableCredential | RevocableCredential, + revocationStatusList?: RevocationListCredential +): Promise => { + if (!isRevocable(credential)) { + return + } + + const revoked = await isRevoked(credential, revocationStatusList) + + if (revoked) { + throw new BadRequestError("Credential has been revoked.") + } +} diff --git a/packages/verifier/src/lib/validations/subject.ts b/packages/verifier/src/lib/validations/subject.ts new file mode 100644 index 000000000..027a36f10 --- /dev/null +++ b/packages/verifier/src/lib/validations/subject.ts @@ -0,0 +1,71 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import type { VerifiableCredential } from "../../types/credentials" +import { BadRequestError } from "../errors" + +import { convertDidToAddress } from "./didToAddressConverter" + +/** + * Confirm that the `holder` of the credential is also the subject of the + * credential. This is a naive implementation of the is_holder constraint. + * Instead of honoring the Presentation Exchange is_holder constraint, we take a + * more pragmatic approach and restrict usage to the holder. + * + * @throws {BadRequestError} if the holder is not the credential subject + */ +export const assertHolderIsSubject = ( + holder: string, + credential: VerifiableCredential +): void => { + if (holder !== credential.credentialSubject.id) { + throw new BadRequestError("Presentation is not signed by the subject") + } +} + +/** + * Confirm that the subject in the verification request matches the subject of the credential. + * The subject in the verification request is provided in the `create` request payload, and it will be certified in the + * VerificationResult if success. This subject is supposed to only submit its own credentials for verifying. + * Therefore, it should match each credential's subject id. + * @throws {BadRequestError} if not match + */ +export const assertCredentialSubjectMatchesRequest = async ( + requestSubjectAddress: string, + credentialSubjectDid: string | undefined +): Promise => { + // sanity checks + if (!credentialSubjectDid) { + throw new BadRequestError( + "Encountered invalid credential. Subject ID not found." + ) + } + + let blockchainAddress: string + try { + blockchainAddress = await convertDidToAddress(credentialSubjectDid) + } catch (e) { + throw new BadRequestError(`Failed to parse did ${credentialSubjectDid}`) + } + + if (blockchainAddress.toLowerCase() !== requestSubjectAddress.toLowerCase()) { + throw new BadRequestError( + `Credential subject does not match the subject in the verification request. ${blockchainAddress} is not equal to ${requestSubjectAddress}` + ) + } +} diff --git a/packages/verifier/src/lib/verifier.ts b/packages/verifier/src/lib/verifier.ts new file mode 100644 index 000000000..329e86157 --- /dev/null +++ b/packages/verifier/src/lib/verifier.ts @@ -0,0 +1,153 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { logger } from "../logger" +import type { + VerifiableCredential, + VerifiablePresentation +} from "../types/credentials" + +import { + decodeVerifiableCredential, + verifyVerifiablePresentation +} from "./coder" +import { BadRequestError } from "./errors" +import { statsd } from "./monitoring" +import { PresentationDefinition } from "./presentation-definition" +import { asyncEach } from "./utils/async-fns" +import { assertValidCredentialSubmission } from "./validations/credential" +import { assertNotExpired } from "./validations/expiry" +import { assertNotRevoked } from "./validations/revocation" +import { assertCredentialSubjectMatchesRequest } from "./validations/subject" + +/** + * Decode an encoded JWT and verify the submission + * + * @throws BadRequestError if the submission is invalid (malformed JWT, failed validation, etc) + */ +export const verify = async ( + presentationDefinition: PresentationDefinition, + submission: string, + subject: string, + challenge?: string +): Promise<{ + presentation: VerifiablePresentation +}> => { + // Verify the VP + const beforeVerifyVp = new Date() + const vpVerificationOption = { challenge } + const presentation = verifyVerifiablePresentation( + submission, + vpVerificationOption + ) + statsd.timing("submit_verify_verifyVp", beforeVerifyVp) + const verificationId = presentationDefinition.id || "invalid_id" + const logContext = { verifId: verificationId } + logger.info("VP verified", logContext) + + const verifiableCredentials = [presentation.verifiableCredential] + .flat() + .filter(Boolean) as VerifiableCredential[] + + /** + * Ensure the verifiable presentation contains at least one verifiable + * credential. + */ + if (verifiableCredentials.length === 0) { + throw new BadRequestError( + "No Verifiable Credential provided", + "", + JSON.stringify(logContext) + ) + } + + await asyncEach(verifiableCredentials, async (verifiableCredential) => { + const vcLogContext = { + verifId: verificationId, + vcMeta: verifiableCredential.vc as unknown + } + + try { + /** + * Verify the signature of the VC JWT, then its content after decoding. + */ + const beforeDecodeVc = new Date() + await decodeVerifiableCredential(verifiableCredential.proof.jwt as string) + statsd.timing("submit_verify_decodeVc", beforeDecodeVc) + logger.debug("VC signature verified", vcLogContext) + + /** + * Ensure this Verifiable Credential is not expired. + * + * Generally, the JWT verification itself would handle this by checking the + * `exp` field of the JWT, but those JWT properties are only checked on the + * Presentation JWT, and not on the included credentials themselves during + * the `decodeVerifiablePresentation()` call. + * + * The `verifyCredential()` call inside `decodeVerifiableCredential()` only + * checks the time format, not expiration. + * + * To ensure we do not use any expired credentials, we check this ourselves + * here. + */ + assertNotExpired(verifiableCredential) + logger.debug("VC expiration verified", vcLogContext) + + /** + * Ensure this Verifiable Credential is issued to the subject in the verification request. + */ + await assertCredentialSubjectMatchesRequest( + subject, + verifiableCredential.credentialSubject.id + ) + logger.debug("VC subject verified", vcLogContext) + + /** + * Ensure this Verifiable Credential is not revoked. + * + * To check revocation status, we must either have a local cached copy of + * the revocation list, or fetch the list from the location described in the + * credential. + * + */ + const beforeAssertRevoked = new Date() + await assertNotRevoked(verifiableCredential) + statsd.timing("submit_verify_revocation", beforeAssertRevoked) + + logger.debug("VC revocation status verified", vcLogContext) + } catch (err) { + if (err instanceof BadRequestError) { + err.additionalLoggingDetails = JSON.stringify(vcLogContext) + } + throw err + } + }) + + /** + * Validate each descriptor in the credential + */ + const beforeAssertVcSchema = new Date() + assertValidCredentialSubmission(presentation, presentationDefinition) + statsd.timing("submit_verify_assertVcSchema", beforeAssertVcSchema) + logger.debug("VC schema verified", logContext) + + logger.info("VC verified", logContext) + return { + presentation + } +} diff --git a/packages/verifier/src/logger/index.ts b/packages/verifier/src/logger/index.ts new file mode 100644 index 000000000..1dcebb794 --- /dev/null +++ b/packages/verifier/src/logger/index.ts @@ -0,0 +1,104 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* eslint-disable */ +import winston, { createLogger } from "winston" +import Transport from "winston-transport" + +const { combine, timestamp, json, uncolorize, metadata, errors } = + winston.format +const { MESSAGE } = require("triple-beam") + +// This transport is to redirect a certain level of log to the debug console. It is only used for local dev for convenience. +class ConsoleTeeTransport extends Transport { + log(info: any, callback: () => void) { + setImmediate(() => this.emit("logged", info)) + + console.log(info[MESSAGE]) + + if (callback) { + callback() + } + } +} + +const timestampFieldKey = "timestamp" +const serviceFieldKey = "service" +const defaultMetaObject: { [key: string]: string } = {} +defaultMetaObject[serviceFieldKey] = `${process.env.ENV ?? "unknown"}.${ + process.env.SERVICE_NAME ?? "service" +}` +export const jsonReplacer: (this: any, key: string, value: any) => any = ( + k, + v +) => { + if (k === "metadata") { + // Only allow 1 layer of metadata. All values in the metadata object should be string type. + // Motivation: Changing Elasticsearch field type will cause type conflict exception including object and array types. + // https://discuss.elastic.co/t/kibana-conflict-type-field/270667/4 + Object.keys(v).forEach(function (vKey, idx) { + if (typeof v[vKey] !== "string") { + v[vKey] = JSON.stringify(v[vKey]) + } + }) + } + return v +} + +const defaultLoggerOptions: winston.LoggerOptions = { + level: "info", + format: combine( + uncolorize(), // colorized logging cause problem in ES + timestamp({ + alias: timestampFieldKey, + format: new Date().toISOString() + }), + metadata({ + key: "metadata", + // avoid using these keywords for context key + fillExcept: ["message", "level", serviceFieldKey, timestampFieldKey] + }), + errors({ stack: true }), + json({ + replacer: jsonReplacer + }) + ), + defaultMeta: defaultMetaObject +} + +let transports: winston.transport[] +switch (process.env.NODE_ENV) { + case "production": { + transports = [new winston.transports.Console({})] + break + } + case "test": { + transports = [new winston.transports.Console({ silent: true })] + break + } + default: { + // === "development" + transports = [new ConsoleTeeTransport({})] + break + } +} + +export const logger = createLogger({ + ...defaultLoggerOptions, + transports: transports +}) diff --git a/packages/verifier/src/server.ts b/packages/verifier/src/server.ts new file mode 100644 index 000000000..681c7f091 --- /dev/null +++ b/packages/verifier/src/server.ts @@ -0,0 +1,48 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import "dotenv/config" +import v8 from "v8" + +import { app } from "./app" +import { statsd } from "./lib/monitoring" +import { logger } from "./logger" + +const PORT = process.env.PORT || 3000 +const HOST = process.env.HOST || `http://localhost:${PORT}` + +logger.info( + `AvailableMemoryMb=${ + v8.getHeapStatistics().total_available_size / 1024 / 1024 + }, HeapStatistics=${JSON.stringify(v8.getHeapStatistics())}` +) + +// publish v8 stats +setInterval(function () { + const memoryUsage = process.memoryUsage() + if (memoryUsage.heapTotal) { + statsd.gauge("heapTotalMb", memoryUsage.heapTotal / 1024 / 1024) + } + if (memoryUsage.heapUsed) { + statsd.gauge("heapUsedMb", memoryUsage.heapUsed / 1024 / 1024) + } +}, 10 * 1000) + +app.listen(PORT, () => { + logger.info(`Server started and is listening at ${HOST}`) +}) diff --git a/packages/verifier/src/types/credentials.ts b/packages/verifier/src/types/credentials.ts new file mode 100644 index 000000000..4050cbd57 --- /dev/null +++ b/packages/verifier/src/types/credentials.ts @@ -0,0 +1,47 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { Verifiable, W3CCredential, W3CPresentation } from "did-jwt-vc" + +export type StatusList2021Entry = { + id: string + type: "StatusList2021Entry" + statusListIndex: string + statusListCredential: string +} + +export type StatusList2021EntrySubject = { + id: string + type: "StatusList2021Entry" + encodedList: string +} + +export type Revocable = T & { + readonly credentialStatus: StatusList2021Entry +} + +export type RevocationList = T & { + id: string + readonly credentialSubject: StatusList2021EntrySubject +} + +export type VerifiablePresentation = Verifiable +export type VerifiableCredential = Verifiable +export type RevocableCredential = Revocable +export type RevocationListCredential = RevocationList +export type EncodedRevocationListCredential = string diff --git a/packages/verifier/src/types/presentation.ts b/packages/verifier/src/types/presentation.ts new file mode 100644 index 000000000..2bfad7453 --- /dev/null +++ b/packages/verifier/src/types/presentation.ts @@ -0,0 +1,57 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { VerifiablePresentation } from "./credentials" + +type DescriptorMap = { + id: string + format: "jwt" | "jwt_vc" | "jwt_vp" | "ldp_vc" | "ldp_vp" | "ldp" + path: string + path_nested?: DescriptorMap +} + +export type CredentialSubmission = VerifiablePresentation & { + presentation_submission?: { + id: string + definition_id: string + descriptor_map: DescriptorMap[] + } +} + +type InputDescriptorConstraintFilter = { + type: string + format?: string + pattern?: string + minimum?: string | number + minLength?: number + maxLength?: number + exclusiveMinimum?: string | number + exclusiveMaximum?: string | number + maximum?: string | number + const?: string | number + enum?: string[] | number[] + not?: InputDescriptorConstraintFilter +} + +export type InputDescriptorConstraintField = { + path: string[] + id?: string + purpose?: string + filter?: InputDescriptorConstraintFilter + predicate?: "required" | "preferred" +} diff --git a/packages/verifier/src/types/verification-result.ts b/packages/verifier/src/types/verification-result.ts new file mode 100644 index 000000000..a73cc3d6a --- /dev/null +++ b/packages/verifier/src/types/verification-result.ts @@ -0,0 +1,27 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +export type VerificationResult = { + name?: string | null + version?: string | null + cluster?: string | null + schema: Array + subject: string + expiration: number + verifier_verification_id: string +} diff --git a/packages/verifier/src/views/css/style.css b/packages/verifier/src/views/css/style.css new file mode 100644 index 000000000..1a22c5fe5 --- /dev/null +++ b/packages/verifier/src/views/css/style.css @@ -0,0 +1,193 @@ +/** + * Copyright 2024 Circle Internet Group, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +body { + background-color: #f8fffa; + min-height: 1080px; + font-family: Helvetica, Arial, sans-serif; + line-height: 1.3em; +} + +.padding-5 { + padding: 5px; +} + +.text-center { + text-align: center; +} + +.title { + background-color: #ffffff; + padding: 5px 20px; + height: 20px; +} + +.verification-api-title { + float: right; + color: #333333; +} + +.header { + height: 50px; + padding: 20px; +} + +.circle-icon { + width: 65px; + float: left; +} + +.main-body { + margin: 0 auto; + width: fit-content; + border: 1px solid #c4c4c4; + padding: 15px; + min-height: 650px; +} + +.verite-banner { + width: 600px; + padding: 15px; +} + +.section { + margin-top: 36px; +} + +.error { + color: red; + text-align: center; + padding: 15px; +} + +.content-container { + margin: 0 auto; + width: fit-content; + padding: 15px; +} + +.signup-input-container { + padding: 15px; +} + +#signup-button, +#login-button { + display: inline-block; + width: 78px; +} + +.content-input { + padding: 15px; + margin: 15px 0; + text-align: center; + border: none; +} + +.center-button { + display: block; + margin: 0 auto; +} + +.action-button { + background-color: #157bcd; + color: #ffffff; + border: none; + padding: 10px 15px; + cursor: pointer; + border-radius: 0.375rem; + font-family: Circular, sans-serif; +} + +.page-title { + padding: 15px 0; +} + +#current-clients-list { + margin-bottom: 15px; +} + +#current-clients-list li { + min-height: 50px; +} + +#current-clients-list li span { + line-height: 50px; +} + +#current-clients-list li .action-button { + float: right; +} + +#new-token-result { + margin-top: 15px; + white-space: pre-wrap; + background-color: #dff0d8; +} + +#new-token-result-warning { + margin-top: 15px; + background-color: #ddf4ff; +} + +#revoke-token-input, +#revoke-reason-input { + width: 100%; +} + +#legal-terms-content { + max-height: 500px; + overflow-y: auto; + max-width: 500px; + background-color: #ffffff; + padding: 50px 15px; + margin-bottom: 100px; +} + +#legal-terms-title { + font-weight: 700; + text-decoration: underline; + margin-bottom: 24px; + text-align: center; +} + +#legal-terms-content > ol { + list-style-type: decimal; + list-style-position: inside; +} + +.legal-terms-text { + padding: 15px; +} + +.legal-terms-text-item { + font-weight: 700; +} + +#legal-terms-5 ol { + list-style-type: lower-alpha; + list-style-position: inside; +} + +#legal-terms-5 div { + margin-left: 20px; +} + +#legal-terms-10 p, +#legal-terms-15 p { + margin-top: 15px; +} diff --git a/packages/verifier/src/views/img/circle-icon.jpg b/packages/verifier/src/views/img/circle-icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..533beb14ca1886dc3c6cf8092758ffb21ad20755 GIT binary patch literal 35670 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 z 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 z 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 z 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�)eLZXOtYkk!KPZ8IxgpIpFpBCsyyd#{@qOFC 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≺oZW9`b~<5o4Qnv&!`-MmikhlB(c;% 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