From 0ecc961573f82e5c950ab4c4e54a74a2d0e699e9 Mon Sep 17 00:00:00 2001 From: Leonardo Hernandez Date: Thu, 28 Nov 2024 22:07:54 -0300 Subject: [PATCH 1/6] updated package.json --- 1-Authentication/1-sign-in/package-lock.json | 3299 +++++++++++++++++- 1-Authentication/1-sign-in/package.json | 9 +- 2 files changed, 3242 insertions(+), 66 deletions(-) diff --git a/1-Authentication/1-sign-in/package-lock.json b/1-Authentication/1-sign-in/package-lock.json index f57c696..8b4bb0c 100644 --- a/1-Authentication/1-sign-in/package-lock.json +++ b/1-Authentication/1-sign-in/package-lock.json @@ -14,9 +14,12 @@ "morgan": "^1.10.0" }, "devDependencies": { + "cypress": "^13.16.0", "jest": "^27.0.6", "nodemon": "^3.1.3", - "supertest": "^6.1.4" + "start-server-and-test": "^2.0.8", + "supertest": "^6.1.4", + "typescript": "^5.7.2" } }, "node_modules/@babel/code-frame": { @@ -646,6 +649,136 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cypress/request": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.6.tgz", + "integrity": "sha512-fi0eVdCOtKu5Ed6+E8mYxUF6ZTFJDZvHogCBelM0xVXmrDEkyM22gRArQzq1YcHPm1V47Vf/iAD+WgVdUlJCGg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~4.0.0", + "http-signature": "~1.4.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.13.0", + "safe-buffer": "^5.1.2", + "tough-cookie": "^5.0.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request/node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@cypress/request/node_modules/tough-cookie": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/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/@cypress/xvfb/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, "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", @@ -959,6 +1092,30 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -1072,6 +1229,20 @@ "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", "dev": true }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sizzle": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz", + "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -1093,6 +1264,17 @@ "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -1195,6 +1377,30 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "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, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1247,6 +1453,34 @@ "node": ">= 8" } }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "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" + } + ], + "license": "MIT" + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1261,12 +1495,110 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "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, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", + "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, "node_modules/babel-jest": { "version": "27.3.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz", @@ -1381,6 +1713,27 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "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==", + "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" + } + ], + "license": "MIT" + }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -1392,6 +1745,16 @@ "node": ">= 0.8" } }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1401,6 +1764,20 @@ "node": ">=8" } }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true, + "license": "Apache-2.0" + }, + "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, + "license": "MIT" + }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -1495,6 +1872,41 @@ "node-int64": "^0.4.0" } }, + "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" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1509,13 +1921,30 @@ "node": ">= 0.8" } }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "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" @@ -1549,6 +1978,13 @@ "url": "https://opencollective.com/browserslist" } }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1574,6 +2010,16 @@ "node": ">=10" } }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1613,17 +2059,73 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "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==", + "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, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -1658,6 +2160,13 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1670,6 +2179,26 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -1748,6 +2277,13 @@ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true }, + "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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1786,6 +2322,198 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, + "node_modules/cypress": { + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.16.0.tgz", + "integrity": "sha512-g6XcwqnvzXrqiBQR/5gN+QsyRmKRhls1y5E42fyOvsmU7JuY+wM6uHJWj4ZPttjabzbnRvxcik2WemR8+xT6FA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@cypress/request": "^3.0.6", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.7.1", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "ci-info": "^4.0.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.5.3", + "supports-color": "^8.1.1", + "tmp": "~0.2.3", + "tree-kill": "1.2.2", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" + } + }, + "node_modules/cypress/node_modules/ci-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", + "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/cypress/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/cypress/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/cypress/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cypress/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/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/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -1800,6 +2528,13 @@ "node": ">=10" } }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "dev": true, + "license": "MIT" + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1835,6 +2570,23 @@ "node": ">=0.10.0" } }, + "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/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1900,6 +2652,24 @@ "node": ">=8" } }, + "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, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1937,6 +2707,51 @@ "node": ">= 0.8" } }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2021,6 +2836,29 @@ "node": ">= 0.6" } }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true, + "license": "MIT" + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -2044,6 +2882,19 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -2164,6 +3015,85 @@ } ] }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2191,6 +3121,32 @@ "bser": "2.1.1" } }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -2244,6 +3200,37 @@ "node": ">=8" } }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -2284,6 +3271,39 @@ "node": ">= 0.6" } }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "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-extra/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2305,9 +3325,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "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/gensync": { "version": "1.0.0-beta.2", @@ -2328,13 +3352,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "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": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "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" @@ -2361,6 +3391,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -2393,6 +3443,22 @@ "node": ">= 6" } }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -2402,6 +3468,18 @@ "node": ">=4" } }, + "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.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -2412,6 +3490,7 @@ "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" }, @@ -2428,10 +3507,35 @@ "node": ">=8" } }, - "node_modules/has-symbols": { + "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "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" }, @@ -2439,6 +3543,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -2509,6 +3625,21 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/http-signature": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -2565,6 +3696,27 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -2596,6 +3748,16 @@ "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2611,6 +3773,16 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -2682,6 +3854,23 @@ "node": ">=0.10.0" } }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2691,6 +3880,16 @@ "node": ">=0.12.0" } }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -2715,12 +3914,32 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "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/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true, + "license": "MIT" + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -3439,6 +4658,20 @@ } } }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3458,6 +4691,13 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true, + "license": "MIT" + }, "node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -3516,6 +4756,20 @@ "node": ">=4" } }, + "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, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -3528,6 +4782,45 @@ "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, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -3537,6 +4830,16 @@ "node": ">=6" } }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "> 0.8" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -3559,6 +4862,34 @@ "node": ">= 0.8.0" } }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -3577,6 +4908,82 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3601,6 +5008,12 @@ "tmpl": "1.0.5" } }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -3692,6 +5105,16 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -3874,9 +5297,13 @@ "dev": true }, "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3941,6 +5368,13 @@ "node": ">= 0.8.0" } }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true, + "license": "MIT" + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -3968,6 +5402,22 @@ "node": ">=8" } }, + "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, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -4029,6 +5479,33 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -4047,6 +5524,16 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", @@ -4077,7 +5564,20 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8.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, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pretty-format": { @@ -4107,6 +5607,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -4132,6 +5642,29 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -4144,6 +5677,17 @@ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "license": "MIT", + "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", @@ -4227,6 +5771,16 @@ "node": ">=8.10.0" } }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "throttleit": "^1.0.0" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4285,6 +5839,27 @@ "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -4300,6 +5875,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4384,6 +5969,23 @@ "node": ">= 0.8.0" } }, + "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/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -4411,13 +6013,18 @@ } }, "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==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4468,6 +6075,21 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -4487,12 +6109,51 @@ "source-map": "^0.6.0" } }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, "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/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", @@ -4514,6 +6175,56 @@ "node": ">=8" } }, + "node_modules/start-server-and-test": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.8.tgz", + "integrity": "sha512-v2fV6NV2F7tL1ocwfI4Wpait+IKjRbT5l3ZZ+ZikXdMLmxYsS8ynGAsCQAUVXkVyGyS+UibsRnvgHkMvJIvCsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "arg": "^5.0.2", + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.3.7", + "execa": "5.1.1", + "lazy-ass": "1.6.0", + "ps-tree": "1.2.0", + "wait-on": "8.0.1" + }, + "bin": { + "server-test": "src/bin/start.js", + "start-server-and-test": "src/bin/start.js", + "start-test": "src/bin/start.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/start-server-and-test/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/start-server-and-test/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -4522,6 +6233,16 @@ "node": ">= 0.8" } }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -4758,6 +6479,53 @@ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, + "node_modules/throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tldts": { + "version": "6.1.64", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.64.tgz", + "integrity": "sha512-ph4AE5BXWIOsSy9stpoeo7bYe/Cy7VfpciIH4RhVZUPItCJmhqWCN0EVzxd8BOHiyNb42vuJc6NWTjJkg91Tuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.64" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.64", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.64.tgz", + "integrity": "sha512-uqnl8vGV16KsyflHOzqrYjjArjfXaU6rMPXYy2/ZWoRKCkXtghgB4VwTDXUG+t0OTGeSewNAG31/x1gCTfLt+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -4832,6 +6600,43 @@ "node": ">=8" } }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -4886,6 +6691,20 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -4909,6 +6728,16 @@ "node": ">= 0.8" } }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -4933,6 +6762,16 @@ "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==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/v8-to-istanbul": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", @@ -4964,6 +6803,21 @@ "node": ">= 0.8" } }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -4986,6 +6840,26 @@ "node": ">=10" } }, + "node_modules/wait-on": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.1.tgz", + "integrity": "sha512-1wWQOyR2LVVtaqrcIL2+OM+x7bkpmzVROa0Nf6FryXkS+er5Sa1kzFGjzZRqLnHa3n1rACFLeTwUqE1ETL9Mig==", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^1.7.7", + "joi": "^17.13.3", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.1" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -5160,6 +7034,17 @@ "engines": { "node": ">=10" } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } }, "dependencies": { @@ -5635,6 +7520,112 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true + }, + "@cypress/request": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.6.tgz", + "integrity": "sha512-fi0eVdCOtKu5Ed6+E8mYxUF6ZTFJDZvHogCBelM0xVXmrDEkyM22gRArQzq1YcHPm1V47Vf/iAD+WgVdUlJCGg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~4.0.0", + "http-signature": "~1.4.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.13.0", + "safe-buffer": "^5.1.2", + "tough-cookie": "^5.0.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } + }, + "tough-cookie": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "dev": true, + "requires": { + "tldts": "^6.1.32" + } + } + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + }, + "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" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -5884,6 +7875,27 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -5994,6 +8006,18 @@ "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", "dev": true }, + "@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz", + "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", + "dev": true + }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -6015,6 +8039,16 @@ "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, + "@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -6092,6 +8126,22 @@ } } }, + "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" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -6126,6 +8176,18 @@ "picomatch": "^2.0.4" } }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -6140,12 +8202,87 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "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 + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true + }, + "axios": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", + "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + } + } + }, "babel-jest": { "version": "27.3.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz", @@ -6238,6 +8375,12 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -6246,12 +8389,33 @@ "safe-buffer": "5.1.2" } }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, "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 }, + "blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, "body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -6328,6 +8492,22 @@ "node-int64": "^0.4.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" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -6339,13 +8519,22 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, + "cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true + }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "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": { @@ -6366,6 +8555,12 @@ "integrity": "sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA==", "dev": true }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -6382,6 +8577,12 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -6410,6 +8611,41 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "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==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -6448,6 +8684,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -6457,6 +8699,18 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "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 + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -6514,6 +8768,12 @@ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6548,6 +8808,136 @@ } } }, + "cypress": { + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.16.0.tgz", + "integrity": "sha512-g6XcwqnvzXrqiBQR/5gN+QsyRmKRhls1y5E42fyOvsmU7JuY+wM6uHJWj4ZPttjabzbnRvxcik2WemR8+xT6FA==", + "dev": true, + "requires": { + "@cypress/request": "^3.0.6", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.7.1", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "ci-info": "^4.0.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.5.3", + "supports-color": "^8.1.1", + "tmp": "~0.2.3", + "tree-kill": "1.2.2", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "ci-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", + "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", + "dev": true + }, + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "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" + } + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -6559,6 +8949,12 @@ "whatwg-url": "^8.0.0" } }, + "dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -6591,6 +8987,16 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "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" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -6636,6 +9042,22 @@ } } }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -6664,6 +9086,38 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, + "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==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + } + }, + "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==" + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -6717,6 +9171,27 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -6734,6 +9209,15 @@ "strip-final-newline": "^2.0.0" } }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + } + }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -6821,6 +9305,56 @@ "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", "requires": {} }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, "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", @@ -6848,6 +9382,24 @@ "bser": "2.1.1" } }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -6891,6 +9443,18 @@ "path-exists": "^4.0.0" } }, + "follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -6918,6 +9482,32 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "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" + }, + "dependencies": { + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + } + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -6932,9 +9522,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "gensync": { "version": "1.0.0-beta.2", @@ -6949,13 +9539,15 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "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-package-type": { @@ -6970,6 +9562,24 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, + "getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "requires": { + "async": "^3.2.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -6993,12 +9603,29 @@ "is-glob": "^4.0.1" } }, + "global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "requires": { + "ini": "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 }, + "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.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -7009,6 +9636,7 @@ "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" } @@ -7019,10 +9647,31 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-symbols": { + "has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "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==" + }, + "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" + } }, "html-encoding-sniffer": { "version": "2.0.1", @@ -7079,6 +9728,17 @@ } } }, + "http-signature": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + } + }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -7120,6 +9780,12 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -7142,6 +9808,12 @@ "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", @@ -7157,6 +9829,12 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -7207,12 +9885,28 @@ "is-extglob": "^2.1.1" } }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, "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-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-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", @@ -7231,12 +9925,24 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "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 }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -7798,6 +10504,19 @@ } } }, + "joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7814,6 +10533,12 @@ "esprima": "^4.0.0" } }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, "jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -7855,18 +10580,66 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "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-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, "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" + }, + "dependencies": { + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + } + } + }, + "jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true + }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -7883,6 +10656,22 @@ "type-check": "~0.3.2" } }, + "listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -7898,6 +10687,58 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -7916,6 +10757,12 @@ "tmpl": "1.0.5" } }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -7980,6 +10827,12 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, "morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -8113,9 +10966,9 @@ "dev": true }, "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==" }, "on-finished": { "version": "2.3.0", @@ -8162,6 +11015,12 @@ "word-wrap": "~1.2.3" } }, + "ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -8180,6 +11039,15 @@ "p-limit": "^2.2.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-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -8226,6 +11094,27 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -8238,6 +11127,12 @@ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", @@ -8262,6 +11157,12 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "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-format": { "version": "27.3.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", @@ -8282,6 +11183,12 @@ } } }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -8301,6 +11208,21 @@ "ipaddr.js": "1.9.1" } }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "requires": { + "event-stream": "=3.3.4" + } + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -8313,6 +11235,16 @@ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, + "pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "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", @@ -8375,6 +11307,15 @@ "picomatch": "^2.2.1" } }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -8418,6 +11359,22 @@ "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==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -8427,6 +11384,15 @@ "glob": "^7.1.3" } }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -8498,6 +11464,19 @@ "send": "0.18.0" } }, + "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" + } + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -8519,13 +11498,14 @@ "dev": true }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { @@ -8563,6 +11543,17 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8579,12 +11570,38 @@ "source-map": "^0.6.0" } }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "requires": { + "through": "2" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", @@ -8602,11 +11619,53 @@ } } }, + "start-server-and-test": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.8.tgz", + "integrity": "sha512-v2fV6NV2F7tL1ocwfI4Wpait+IKjRbT5l3ZZ+ZikXdMLmxYsS8ynGAsCQAUVXkVyGyS+UibsRnvgHkMvJIvCsw==", + "dev": true, + "requires": { + "arg": "^5.0.2", + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.3.7", + "execa": "5.1.1", + "lazy-ass": "1.6.0", + "ps-tree": "1.2.0", + "wait-on": "8.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "requires": { + "duplexer": "~0.1.1" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -8776,6 +11835,39 @@ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, + "throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "tldts": { + "version": "6.1.64", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.64.tgz", + "integrity": "sha512-ph4AE5BXWIOsSy9stpoeo7bYe/Cy7VfpciIH4RhVZUPItCJmhqWCN0EVzxd8BOHiyNb42vuJc6NWTjJkg91Tuw==", + "dev": true, + "requires": { + "tldts-core": "^6.1.64" + } + }, + "tldts-core": { + "version": "6.1.64", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.64.tgz", + "integrity": "sha512-uqnl8vGV16KsyflHOzqrYjjArjfXaU6rMPXYy2/ZWoRKCkXtghgB4VwTDXUG+t0OTGeSewNAG31/x1gCTfLt+Q==", + "dev": true + }, + "tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -8832,6 +11924,33 @@ "punycode": "^2.1.1" } }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -8871,6 +11990,12 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true + }, "undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -8888,6 +12013,12 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, "url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -8909,6 +12040,12 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, "v8-to-istanbul": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", @@ -8933,6 +12070,17 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -8951,6 +12099,19 @@ "xml-name-validator": "^3.0.0" } }, + "wait-on": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.1.tgz", + "integrity": "sha512-1wWQOyR2LVVtaqrcIL2+OM+x7bkpmzVROa0Nf6FryXkS+er5Sa1kzFGjzZRqLnHa3n1rACFLeTwUqE1ETL9Mig==", + "dev": true, + "requires": { + "axios": "^1.7.7", + "joi": "^17.13.3", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.1" + } + }, "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -9081,6 +12242,16 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } } diff --git a/1-Authentication/1-sign-in/package.json b/1-Authentication/1-sign-in/package.json index 3fd9d06..ee9c5ca 100644 --- a/1-Authentication/1-sign-in/package.json +++ b/1-Authentication/1-sign-in/package.json @@ -6,7 +6,9 @@ "scripts": { "start": "node server.js", "dev": "nodemon server.js", - "test": "jest --forceExit" + "test": "jest --forceExit", + "cy:run": "cypress run", + "ci:run": "start-test start 3000 cy:run" }, "repository": { "type": "git", @@ -34,8 +36,11 @@ "morgan": "^1.10.0" }, "devDependencies": { + "cypress": "^13.16.0", "jest": "^27.0.6", "nodemon": "^3.1.3", - "supertest": "^6.1.4" + "start-server-and-test": "^2.0.8", + "supertest": "^6.1.4", + "typescript": "^5.7.2" } } From f34bdd0d2b2d89e297edef0d94b487c72f66e05f Mon Sep 17 00:00:00 2001 From: Leonardo Hernandez Date: Thu, 28 Nov 2024 22:10:19 -0300 Subject: [PATCH 2/6] set cypress config --- 1-Authentication/1-sign-in/cypress.config.ts | 12 +++++++++++ .../1-sign-in/cypress/global.d.ts | 7 +++++++ 1-Authentication/1-sign-in/tsconfig.json | 20 +++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 1-Authentication/1-sign-in/cypress.config.ts create mode 100644 1-Authentication/1-sign-in/cypress/global.d.ts create mode 100644 1-Authentication/1-sign-in/tsconfig.json diff --git a/1-Authentication/1-sign-in/cypress.config.ts b/1-Authentication/1-sign-in/cypress.config.ts new file mode 100644 index 0000000..48bd213 --- /dev/null +++ b/1-Authentication/1-sign-in/cypress.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "cypress"; + +export default defineConfig({ + e2e: { + baseUrl: 'http://localhost:3000', + watchForFileChanges: false, + experimentalModifyObstructiveThirdPartyCode: true, + setupNodeEvents(on, config) { + // implement node event listeners here + }, + }, +}); diff --git a/1-Authentication/1-sign-in/cypress/global.d.ts b/1-Authentication/1-sign-in/cypress/global.d.ts new file mode 100644 index 0000000..6c6f398 --- /dev/null +++ b/1-Authentication/1-sign-in/cypress/global.d.ts @@ -0,0 +1,7 @@ +/// + +declare namespace Cypress { + interface Chainable { + loginToAAD(username: string, password: string): Chainable + } +} \ No newline at end of file diff --git a/1-Authentication/1-sign-in/tsconfig.json b/1-Authentication/1-sign-in/tsconfig.json new file mode 100644 index 0000000..0e02efe --- /dev/null +++ b/1-Authentication/1-sign-in/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "baseUrl": "/", + "module": "commonjs", + "moduleResolution": "node", + "preserveValueImports": false, + "target": "es5", + "lib": [ + "es5", + "dom" + ], + "types": [ + "cypress", + "node" + ] + }, + "include": [ + "**/*.ts" + ] +} \ No newline at end of file From c83652546cf2408173abd5cfe2c56a0593cb61b2 Mon Sep 17 00:00:00 2001 From: Leonardo Hernandez Date: Thu, 28 Nov 2024 22:12:14 -0300 Subject: [PATCH 3/6] minor environment changes --- 1-Authentication/1-sign-in/.gitignore | 8 +++++++ 1-Authentication/1-sign-in/App/authConfig.js | 12 +++++----- 1-Authentication/1-sign-in/App/index.html | 23 +++++++++++--------- 1-Authentication/1-sign-in/server.js | 4 ++-- 4 files changed, 29 insertions(+), 18 deletions(-) create mode 100644 1-Authentication/1-sign-in/.gitignore diff --git a/1-Authentication/1-sign-in/.gitignore b/1-Authentication/1-sign-in/.gitignore new file mode 100644 index 0000000..a586f22 --- /dev/null +++ b/1-Authentication/1-sign-in/.gitignore @@ -0,0 +1,8 @@ +# Node +node_modules/ + +# Cypress +cypress/screenshots/ + +# Environments +cypress.env.json \ No newline at end of file diff --git a/1-Authentication/1-sign-in/App/authConfig.js b/1-Authentication/1-sign-in/App/authConfig.js index 7b37a44..a96f098 100644 --- a/1-Authentication/1-sign-in/App/authConfig.js +++ b/1-Authentication/1-sign-in/App/authConfig.js @@ -6,8 +6,8 @@ const msalConfig = { auth: { - clientId: 'Enter_the_Application_Id_Here', // This is the ONLY mandatory field that you need to supply. - authority: 'https://login.microsoftonline.com/Enter_the_Tenant_Info_Here', // Defaults to "https://login.microsoftonline.com/common" + clientId: '8a3f1e7b-284f-48a4-85d0-60fc62280148', // Enter_the_Application_Id_Here - This is the ONLY mandatory field that you need to supply. + authority: 'https://login.microsoftonline.com/5db860bd-0c26-4a06-9834-7fe6c8d30cf1', // Enter_the_Tenant_Info_Here - Defaults to "https://login.microsoftonline.com/common" redirectUri: '/', // You must register this URI on Azure Portal/App Registration. Defaults to window.location.href e.g. http://localhost:3000/ navigateToLoginRequestUrl: true, // If "true", will navigate back to the original request location before processing the auth code response. }, @@ -55,10 +55,10 @@ const loginRequest = { * between applications by providing a "login_hint" property. */ -// const silentRequest = { -// scopes: ["openid", "profile"], -// loginHint: "example@domain.net" -// }; + const silentRequest = { + scopes: ["openid", "profile"], + loginHint: "hernandeez00@hotmail.com" + }; // exporting config object for jest if (typeof exports !== 'undefined') { diff --git a/1-Authentication/1-sign-in/App/index.html b/1-Authentication/1-sign-in/App/index.html index c8ceb23..65bcaf5 100644 --- a/1-Authentication/1-sign-in/App/index.html +++ b/1-Authentication/1-sign-in/App/index.html @@ -9,13 +9,12 @@ - + - - + + @@ -48,22 +47,26 @@
head over to the jwt.ms

- + - - + + + + + - + + - + \ No newline at end of file diff --git a/1-Authentication/1-sign-in/server.js b/1-Authentication/1-sign-in/server.js index aa234a1..dcbe840 100644 --- a/1-Authentication/1-sign-in/server.js +++ b/1-Authentication/1-sign-in/server.js @@ -19,14 +19,14 @@ const app = express(); */ const limiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 minutes - max: 100, // Limit each IP to 100 requests per `window` (here, per 15 minutes) + max: 1000000, // Limit each IP to 100 requests per `window` (here, per 15 minutes) standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers legacyHeaders: false, // Disable the `X-RateLimit-*` headers }); // Apply the rate limiting middleware to all requests -app.use(limiter); +//app.use(limiter); // Configure morgan module to log all requests. From ed1bf699b35f83df079619610903b6a8adc8e07d Mon Sep 17 00:00:00 2001 From: Leonardo Hernandez Date: Thu, 28 Nov 2024 22:13:14 -0300 Subject: [PATCH 4/6] cypress: login via azure active directory --- .../1-sign-in/cypress/e2e/auth.cy.ts | 21 ++++ .../1-sign-in/cypress/support/commands.ts | 116 ++++++++++++++++++ .../1-sign-in/cypress/support/e2e.ts | 20 +++ 3 files changed, 157 insertions(+) create mode 100644 1-Authentication/1-sign-in/cypress/e2e/auth.cy.ts create mode 100644 1-Authentication/1-sign-in/cypress/support/commands.ts create mode 100644 1-Authentication/1-sign-in/cypress/support/e2e.ts diff --git a/1-Authentication/1-sign-in/cypress/e2e/auth.cy.ts b/1-Authentication/1-sign-in/cypress/e2e/auth.cy.ts new file mode 100644 index 0000000..f35996d --- /dev/null +++ b/1-Authentication/1-sign-in/cypress/e2e/auth.cy.ts @@ -0,0 +1,21 @@ +describe('Azure Active Directory Authentication', () => { + beforeEach(() => { + // log into Azure Active Directory through our sample SPA using our custom command + cy.loginToAAD(Cypress.env('aad_username'), Cypress.env('aad_password')) + cy.visit('/') + }) + + it('verifies the user logged in has the correct name', () => { + cy.get('#table-body-div td:contains("name") + td').should( + 'contain', + `${Cypress.env('aad_name')}` + ) + }) + + it('verifies the user logged in has the correct preferred name', () => { + cy.get('#table-body-div td:contains("preferred_username") + td').should( + 'contain', + `${Cypress.env('aad_username')}` + ) + }) +}) \ No newline at end of file diff --git a/1-Authentication/1-sign-in/cypress/support/commands.ts b/1-Authentication/1-sign-in/cypress/support/commands.ts new file mode 100644 index 0000000..db0e6bc --- /dev/null +++ b/1-Authentication/1-sign-in/cypress/support/commands.ts @@ -0,0 +1,116 @@ +// @ts-check +/// + +// *********************************************** +// This example commands.ts shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add('login', (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) +// +// declare global { +// namespace Cypress { +// interface Chainable { +// login(email: string, password: string): Chainable +// drag(subject: string, options?: Partial): Chainable +// dismiss(subject: string, options?: Partial): Chainable +// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable +// } +// } +// } + +function loginViaAAD(username: string, password: string) { + cy.visit('/') + cy.get('button#signIn').click() + + // Login to your AAD tenant. + cy.origin( + 'login.microsoftonline.com', + { + args: { + username, + }, + }, + ({ username }) => { + cy.get('input[type="email"]').type(username, { + log: false, + }) + cy.get('input[type="submit"]').click() + } + ) + + // depending on the user and how they are registered with Microsoft, the origin may go to live.com + cy.origin( + 'login.live.com', + { + args: { + password, + }, + }, + ({ password }) => { + cy.get('input[type="password"]').type(password, { + log: false, + }) + cy.get('button[type="submit"]').click() + cy.get('#acceptButton').click() + } + ) + + // Ensure Microsoft has redirected us back to the sample app with our logged in user. + cy.location().should('equal', 'http://localhost:3000/') + cy.get('#welcome-div').should( + 'contain', + `Welcome ${Cypress.env('aad_username')}!` + ) +} + +Cypress.Commands.add('loginToAAD', (username: string, password: string) => { + cy.session( + `aad-${username}`, + () => { + const log = Cypress.log({ + displayName: 'Azure Active Directory Login', + message: [`🔐 Authenticating | ${username}`], + // @ts-ignore + autoEnd: false, + }) + + log.snapshot('before') + + loginViaAAD(username, password) + + log.snapshot('after') + log.end() + }, + { + validate: () => { + // this is a very basic form of session validation for this demo. + // depending on your needs, something more verbose might be needed + cy.visit('/') + cy.get('#welcome-div').should( + 'contain', + `Welcome ${Cypress.env('aad_username')}!` + ) + }, + } + ) +}) \ No newline at end of file diff --git a/1-Authentication/1-sign-in/cypress/support/e2e.ts b/1-Authentication/1-sign-in/cypress/support/e2e.ts new file mode 100644 index 0000000..f80f74f --- /dev/null +++ b/1-Authentication/1-sign-in/cypress/support/e2e.ts @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/e2e.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands' + +// Alternatively you can use CommonJS syntax: +// require('./commands') \ No newline at end of file From 07d7a60a5117d6183654a5a1d5b107f77ae0fda8 Mon Sep 17 00:00:00 2001 From: Leonardo Hernandez Date: Sun, 1 Dec 2024 12:21:03 -0300 Subject: [PATCH 5/6] remove default comment from cypress --- .../1-sign-in/cypress/support/commands.ts | 37 ------------------- 1 file changed, 37 deletions(-) diff --git a/1-Authentication/1-sign-in/cypress/support/commands.ts b/1-Authentication/1-sign-in/cypress/support/commands.ts index db0e6bc..eafcade 100644 --- a/1-Authentication/1-sign-in/cypress/support/commands.ts +++ b/1-Authentication/1-sign-in/cypress/support/commands.ts @@ -1,43 +1,6 @@ // @ts-check /// -// *********************************************** -// This example commands.ts shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add('login', (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This will overwrite an existing command -- -// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) -// -// declare global { -// namespace Cypress { -// interface Chainable { -// login(email: string, password: string): Chainable -// drag(subject: string, options?: Partial): Chainable -// dismiss(subject: string, options?: Partial): Chainable -// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable -// } -// } -// } - function loginViaAAD(username: string, password: string) { cy.visit('/') cy.get('button#signIn').click() From 78a1fa5538f23717be46bd99bca6963a77473eef Mon Sep 17 00:00:00 2001 From: Leonardo Hernandez Date: Tue, 3 Dec 2024 21:36:50 -0300 Subject: [PATCH 6/6] folder changes --- .gitignore | 112 +- 1-Authentication/1-sign-in/.gitignore | 8 - 1-Authentication/1-sign-in/README.md | 325 - .../2-sign-in-b2c/App/authConfig.js | 98 - .../2-sign-in-b2c/App/authPopup.js | 230 - .../2-sign-in-b2c/App/authRedirect.js | 206 - .../2-sign-in-b2c/App/favicon.svg | 25 - 1-Authentication/2-sign-in-b2c/App/index.html | 75 - .../2-sign-in-b2c/App/redirect.html | 6 - .../2-sign-in-b2c/App/signout.html | 18 - 1-Authentication/2-sign-in-b2c/App/styles.css | 14 - 1-Authentication/2-sign-in-b2c/App/ui.js | 37 - .../2-sign-in-b2c/App/utils/claimUtils.js | 224 - .../AppCreationScripts/sample.json | 47 - 1-Authentication/2-sign-in-b2c/README.md | 391 - .../2-sign-in-b2c/ReadmeFiles/screenshot.png | Bin 32616 -> 0 bytes .../ReadmeFiles/topology_b2c_signin.png | Bin 13723 -> 0 bytes .../2-sign-in-b2c/package-lock.json | 9054 ----------------- 1-Authentication/2-sign-in-b2c/package.json | 40 - 1-Authentication/2-sign-in-b2c/sample.test.js | 68 - 1-Authentication/2-sign-in-b2c/server.js | 34 - .../1-call-graph/App/authConfig.js | 77 - .../1-call-graph/App/authPopup.js | 153 - .../1-call-graph/App/authRedirect.js | 153 - .../1-call-graph/App/favicon.svg | 23 - 2-Authorization-I/1-call-graph/App/fetch.js | 119 - 2-Authorization-I/1-call-graph/App/graph.js | 109 - 2-Authorization-I/1-call-graph/App/index.html | 143 - .../1-call-graph/App/redirect.html | 6 - 2-Authorization-I/1-call-graph/App/styles.css | 13 - 2-Authorization-I/1-call-graph/App/ui.js | 87 - .../1-call-graph/App/utils/storageUtils.js | 27 - .../AppCreationScripts/AppCreationScripts.md | 148 - .../AppCreationScripts/Cleanup.ps1 | 151 - .../AppCreationScripts/Configure.ps1 | 362 - .../AppCreationScripts/sample.json | 51 - 2-Authorization-I/1-call-graph/README.md | 509 - .../1-call-graph/ReadmeFiles/screenshot.png | Bin 27763 -> 0 bytes .../ReadmeFiles/topology_callgraph.png | Bin 77856 -> 0 bytes .../1-call-graph/package-lock.json | 9054 ----------------- 2-Authorization-I/1-call-graph/package.json | 43 - 2-Authorization-I/1-call-graph/sample.test.js | 59 - 2-Authorization-I/1-call-graph/server.js | 29 - 3-Authorization-II/1-call-api/API/app.js | 160 - .../1-call-api/API/auth/permissionUtils.js | 66 - .../1-call-api/API/authConfig.js | 32 - .../1-call-api/API/controllers/todolist.js | 157 - .../1-call-api/API/data/db.json | 3 - .../1-call-api/API/package-lock.json | 5081 --------- .../1-call-api/API/package.json | 41 - .../1-call-api/API/routes/index.js | 16 - .../1-call-api/API/sample.test.js | 37 - .../AppCreationScripts/AppCreationScripts.md | 138 - .../1-call-api/AppCreationScripts/Cleanup.ps1 | 189 - .../AppCreationScripts/Configure.ps1 | 497 - .../1-call-api/AppCreationScripts/sample.json | 92 - 3-Authorization-II/1-call-api/README.md | 499 - .../1-call-api/ReadmeFiles/screenshot.png | Bin 28918 -> 0 bytes .../ReadmeFiles/topology_callapi.png | Bin 17798 -> 0 bytes .../1-call-api/SPA/package-lock.json | 4921 --------- .../1-call-api/SPA/package.json | 22 - .../1-call-api/SPA/public/authConfig.js | 85 - .../1-call-api/SPA/public/authPopup.js | 99 - .../1-call-api/SPA/public/authRedirect.js | 93 - .../1-call-api/SPA/public/claimUtils.js | 224 - .../1-call-api/SPA/public/favicon.svg | 23 - .../1-call-api/SPA/public/fetch.js | 116 - .../1-call-api/SPA/public/index.html | 83 - .../1-call-api/SPA/public/redirect.html | 6 - .../1-call-api/SPA/public/styles.css | 21 - .../1-call-api/SPA/public/ui.js | 69 - .../1-call-api/SPA/sample.test.js | 59 - 3-Authorization-II/1-call-api/SPA/server.js | 30 - 3-Authorization-II/2-call-api-b2c/API/app.js | 148 - .../API/auth/permissionUtils.js | 20 - .../2-call-api-b2c/API/authConfig.js | 33 - .../API/controllers/todolist.js | 101 - .../2-call-api-b2c/API/data/db.json | 3 - .../2-call-api-b2c/API/package-lock.json | 5081 --------- .../2-call-api-b2c/API/package.json | 41 - .../2-call-api-b2c/API/routes/index.js | 16 - .../2-call-api-b2c/API/sample.test.js | 32 - .../AppCreationScripts/sample.json | 104 - 3-Authorization-II/2-call-api-b2c/README.md | 371 - .../2-call-api-b2c/ReadmeFiles/screenshot.png | Bin 27111 -> 0 bytes .../ReadmeFiles/topology_b2c_callapi.png | Bin 18042 -> 0 bytes .../2-call-api-b2c/SPA/package-lock.json | 4921 --------- .../2-call-api-b2c/SPA/package.json | 22 - .../2-call-api-b2c/SPA/public/authConfig.js | 113 - .../2-call-api-b2c/SPA/public/authPopup.js | 113 - .../2-call-api-b2c/SPA/public/authRedirect.js | 107 - .../2-call-api-b2c/SPA/public/claimUtils.js | 224 - .../2-call-api-b2c/SPA/public/favicon.svg | 23 - .../2-call-api-b2c/SPA/public/fetch.js | 116 - .../2-call-api-b2c/SPA/public/index.html | 85 - .../2-call-api-b2c/SPA/public/redirect.html | 6 - .../2-call-api-b2c/SPA/public/styles.css | 21 - .../2-call-api-b2c/SPA/public/ui.js | 71 - .../2-call-api-b2c/SPA/sample.test.js | 59 - .../2-call-api-b2c/SPA/server.js | 30 - 4-Deployment/README.md | 188 - 4-Deployment/ReadmeFiles/api_step1.png | Bin 11098 -> 0 bytes 4-Deployment/ReadmeFiles/api_step2.png | Bin 5683 -> 0 bytes 4-Deployment/ReadmeFiles/api_step3.png | Bin 6989 -> 0 bytes .../ReadmeFiles/disable_easy_auth.png | Bin 43444 -> 0 bytes 4-Deployment/ReadmeFiles/enable_cors.png | Bin 60398 -> 0 bytes 4-Deployment/ReadmeFiles/screenshot.png | Bin 28918 -> 0 bytes 4-Deployment/ReadmeFiles/spa_step1.png | Bin 66238 -> 0 bytes 4-Deployment/ReadmeFiles/spa_step2.png | Bin 44744 -> 0 bytes 4-Deployment/ReadmeFiles/spa_step3.png | Bin 2829 -> 0 bytes 4-Deployment/ReadmeFiles/spa_step4.png | Bin 46144 -> 0 bytes 4-Deployment/ReadmeFiles/topology_dep.png | Bin 18850 -> 0 bytes .../1-sign-in/App => App}/authConfig.js | 0 .../1-sign-in/App => App}/authPopup.js | 0 .../1-sign-in/App => App}/authRedirect.js | 0 .../1-sign-in/App => App}/favicon.svg | 0 .../1-sign-in/App => App}/index.html | 0 .../1-sign-in/App => App}/redirect.html | 0 .../1-sign-in/App => App}/signout.html | 0 .../1-sign-in/App => App}/styles.css | 0 {1-Authentication/1-sign-in/App => App}/ui.js | 0 .../AppCreationScripts.md | 0 .../Cleanup.ps1 | 0 .../Configure.ps1 | 0 .../sample.json | 0 CHANGELOG.md | 16 - CONTRIBUTING.md | 76 - LICENSE.md | 21 - README.md | 359 +- .../screenshot.png | Bin .../topology_signin.png | Bin .../cypress.config.ts => cypress.config.ts | 0 .../cypress => cypress}/e2e/auth.cy.ts | 0 .../1-sign-in/cypress => cypress}/global.d.ts | 0 .../cypress => cypress}/support/commands.ts | 0 .../cypress => cypress}/support/e2e.ts | 0 .../package-lock.json => package-lock.json | 0 .../1-sign-in/package.json => package.json | 0 .../sample.test.js => sample.test.js | 0 .../1-sign-in/server.js => server.js | 0 .../1-sign-in/tsconfig.json => tsconfig.json | 0 141 files changed, 287 insertions(+), 47421 deletions(-) delete mode 100644 1-Authentication/1-sign-in/.gitignore delete mode 100644 1-Authentication/1-sign-in/README.md delete mode 100644 1-Authentication/2-sign-in-b2c/App/authConfig.js delete mode 100644 1-Authentication/2-sign-in-b2c/App/authPopup.js delete mode 100644 1-Authentication/2-sign-in-b2c/App/authRedirect.js delete mode 100644 1-Authentication/2-sign-in-b2c/App/favicon.svg delete mode 100644 1-Authentication/2-sign-in-b2c/App/index.html delete mode 100644 1-Authentication/2-sign-in-b2c/App/redirect.html delete mode 100644 1-Authentication/2-sign-in-b2c/App/signout.html delete mode 100644 1-Authentication/2-sign-in-b2c/App/styles.css delete mode 100644 1-Authentication/2-sign-in-b2c/App/ui.js delete mode 100644 1-Authentication/2-sign-in-b2c/App/utils/claimUtils.js delete mode 100644 1-Authentication/2-sign-in-b2c/AppCreationScripts/sample.json delete mode 100644 1-Authentication/2-sign-in-b2c/README.md delete mode 100644 1-Authentication/2-sign-in-b2c/ReadmeFiles/screenshot.png delete mode 100644 1-Authentication/2-sign-in-b2c/ReadmeFiles/topology_b2c_signin.png delete mode 100644 1-Authentication/2-sign-in-b2c/package-lock.json delete mode 100644 1-Authentication/2-sign-in-b2c/package.json delete mode 100644 1-Authentication/2-sign-in-b2c/sample.test.js delete mode 100644 1-Authentication/2-sign-in-b2c/server.js delete mode 100644 2-Authorization-I/1-call-graph/App/authConfig.js delete mode 100644 2-Authorization-I/1-call-graph/App/authPopup.js delete mode 100644 2-Authorization-I/1-call-graph/App/authRedirect.js delete mode 100644 2-Authorization-I/1-call-graph/App/favicon.svg delete mode 100644 2-Authorization-I/1-call-graph/App/fetch.js delete mode 100644 2-Authorization-I/1-call-graph/App/graph.js delete mode 100644 2-Authorization-I/1-call-graph/App/index.html delete mode 100644 2-Authorization-I/1-call-graph/App/redirect.html delete mode 100644 2-Authorization-I/1-call-graph/App/styles.css delete mode 100644 2-Authorization-I/1-call-graph/App/ui.js delete mode 100644 2-Authorization-I/1-call-graph/App/utils/storageUtils.js delete mode 100644 2-Authorization-I/1-call-graph/AppCreationScripts/AppCreationScripts.md delete mode 100644 2-Authorization-I/1-call-graph/AppCreationScripts/Cleanup.ps1 delete mode 100644 2-Authorization-I/1-call-graph/AppCreationScripts/Configure.ps1 delete mode 100644 2-Authorization-I/1-call-graph/AppCreationScripts/sample.json delete mode 100644 2-Authorization-I/1-call-graph/README.md delete mode 100644 2-Authorization-I/1-call-graph/ReadmeFiles/screenshot.png delete mode 100644 2-Authorization-I/1-call-graph/ReadmeFiles/topology_callgraph.png delete mode 100644 2-Authorization-I/1-call-graph/package-lock.json delete mode 100644 2-Authorization-I/1-call-graph/package.json delete mode 100644 2-Authorization-I/1-call-graph/sample.test.js delete mode 100644 2-Authorization-I/1-call-graph/server.js delete mode 100644 3-Authorization-II/1-call-api/API/app.js delete mode 100644 3-Authorization-II/1-call-api/API/auth/permissionUtils.js delete mode 100644 3-Authorization-II/1-call-api/API/authConfig.js delete mode 100644 3-Authorization-II/1-call-api/API/controllers/todolist.js delete mode 100644 3-Authorization-II/1-call-api/API/data/db.json delete mode 100644 3-Authorization-II/1-call-api/API/package-lock.json delete mode 100644 3-Authorization-II/1-call-api/API/package.json delete mode 100644 3-Authorization-II/1-call-api/API/routes/index.js delete mode 100644 3-Authorization-II/1-call-api/API/sample.test.js delete mode 100644 3-Authorization-II/1-call-api/AppCreationScripts/AppCreationScripts.md delete mode 100644 3-Authorization-II/1-call-api/AppCreationScripts/Cleanup.ps1 delete mode 100644 3-Authorization-II/1-call-api/AppCreationScripts/Configure.ps1 delete mode 100644 3-Authorization-II/1-call-api/AppCreationScripts/sample.json delete mode 100644 3-Authorization-II/1-call-api/README.md delete mode 100644 3-Authorization-II/1-call-api/ReadmeFiles/screenshot.png delete mode 100644 3-Authorization-II/1-call-api/ReadmeFiles/topology_callapi.png delete mode 100644 3-Authorization-II/1-call-api/SPA/package-lock.json delete mode 100644 3-Authorization-II/1-call-api/SPA/package.json delete mode 100644 3-Authorization-II/1-call-api/SPA/public/authConfig.js delete mode 100644 3-Authorization-II/1-call-api/SPA/public/authPopup.js delete mode 100644 3-Authorization-II/1-call-api/SPA/public/authRedirect.js delete mode 100644 3-Authorization-II/1-call-api/SPA/public/claimUtils.js delete mode 100644 3-Authorization-II/1-call-api/SPA/public/favicon.svg delete mode 100644 3-Authorization-II/1-call-api/SPA/public/fetch.js delete mode 100644 3-Authorization-II/1-call-api/SPA/public/index.html delete mode 100644 3-Authorization-II/1-call-api/SPA/public/redirect.html delete mode 100644 3-Authorization-II/1-call-api/SPA/public/styles.css delete mode 100644 3-Authorization-II/1-call-api/SPA/public/ui.js delete mode 100644 3-Authorization-II/1-call-api/SPA/sample.test.js delete mode 100644 3-Authorization-II/1-call-api/SPA/server.js delete mode 100644 3-Authorization-II/2-call-api-b2c/API/app.js delete mode 100644 3-Authorization-II/2-call-api-b2c/API/auth/permissionUtils.js delete mode 100644 3-Authorization-II/2-call-api-b2c/API/authConfig.js delete mode 100644 3-Authorization-II/2-call-api-b2c/API/controllers/todolist.js delete mode 100644 3-Authorization-II/2-call-api-b2c/API/data/db.json delete mode 100644 3-Authorization-II/2-call-api-b2c/API/package-lock.json delete mode 100644 3-Authorization-II/2-call-api-b2c/API/package.json delete mode 100644 3-Authorization-II/2-call-api-b2c/API/routes/index.js delete mode 100644 3-Authorization-II/2-call-api-b2c/API/sample.test.js delete mode 100644 3-Authorization-II/2-call-api-b2c/AppCreationScripts/sample.json delete mode 100644 3-Authorization-II/2-call-api-b2c/README.md delete mode 100644 3-Authorization-II/2-call-api-b2c/ReadmeFiles/screenshot.png delete mode 100644 3-Authorization-II/2-call-api-b2c/ReadmeFiles/topology_b2c_callapi.png delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/package-lock.json delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/package.json delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/public/authConfig.js delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/public/authPopup.js delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/public/authRedirect.js delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/public/claimUtils.js delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/public/favicon.svg delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/public/fetch.js delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/public/index.html delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/public/redirect.html delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/public/styles.css delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/public/ui.js delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/sample.test.js delete mode 100644 3-Authorization-II/2-call-api-b2c/SPA/server.js delete mode 100644 4-Deployment/README.md delete mode 100644 4-Deployment/ReadmeFiles/api_step1.png delete mode 100644 4-Deployment/ReadmeFiles/api_step2.png delete mode 100644 4-Deployment/ReadmeFiles/api_step3.png delete mode 100644 4-Deployment/ReadmeFiles/disable_easy_auth.png delete mode 100644 4-Deployment/ReadmeFiles/enable_cors.png delete mode 100644 4-Deployment/ReadmeFiles/screenshot.png delete mode 100644 4-Deployment/ReadmeFiles/spa_step1.png delete mode 100644 4-Deployment/ReadmeFiles/spa_step2.png delete mode 100644 4-Deployment/ReadmeFiles/spa_step3.png delete mode 100644 4-Deployment/ReadmeFiles/spa_step4.png delete mode 100644 4-Deployment/ReadmeFiles/topology_dep.png rename {1-Authentication/1-sign-in/App => App}/authConfig.js (100%) rename {1-Authentication/1-sign-in/App => App}/authPopup.js (100%) rename {1-Authentication/1-sign-in/App => App}/authRedirect.js (100%) rename {1-Authentication/1-sign-in/App => App}/favicon.svg (100%) rename {1-Authentication/1-sign-in/App => App}/index.html (100%) rename {1-Authentication/1-sign-in/App => App}/redirect.html (100%) rename {1-Authentication/1-sign-in/App => App}/signout.html (100%) rename {1-Authentication/1-sign-in/App => App}/styles.css (100%) rename {1-Authentication/1-sign-in/App => App}/ui.js (100%) rename {1-Authentication/1-sign-in/AppCreationScripts => AppCreationScripts}/AppCreationScripts.md (100%) rename {1-Authentication/1-sign-in/AppCreationScripts => AppCreationScripts}/Cleanup.ps1 (100%) rename {1-Authentication/1-sign-in/AppCreationScripts => AppCreationScripts}/Configure.ps1 (100%) rename {1-Authentication/1-sign-in/AppCreationScripts => AppCreationScripts}/sample.json (100%) delete mode 100644 CHANGELOG.md delete mode 100644 CONTRIBUTING.md delete mode 100644 LICENSE.md rename {1-Authentication/1-sign-in/ReadmeFiles => ReadmeFiles}/screenshot.png (100%) rename {1-Authentication/1-sign-in/ReadmeFiles => ReadmeFiles}/topology_signin.png (100%) rename 1-Authentication/1-sign-in/cypress.config.ts => cypress.config.ts (100%) rename {1-Authentication/1-sign-in/cypress => cypress}/e2e/auth.cy.ts (100%) rename {1-Authentication/1-sign-in/cypress => cypress}/global.d.ts (100%) rename {1-Authentication/1-sign-in/cypress => cypress}/support/commands.ts (100%) rename {1-Authentication/1-sign-in/cypress => cypress}/support/e2e.ts (100%) rename 1-Authentication/1-sign-in/package-lock.json => package-lock.json (100%) rename 1-Authentication/1-sign-in/package.json => package.json (100%) rename 1-Authentication/1-sign-in/sample.test.js => sample.test.js (100%) rename 1-Authentication/1-sign-in/server.js => server.js (100%) rename 1-Authentication/1-sign-in/tsconfig.json => tsconfig.json (100%) diff --git a/.gitignore b/.gitignore index e412d91..a586f22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,110 +1,8 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories +# Node node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port -# Visual Studio Cache -.vs/ +# Cypress +cypress/screenshots/ -# VS Code Cache -.vscode/ +# Environments +cypress.env.json \ No newline at end of file diff --git a/1-Authentication/1-sign-in/.gitignore b/1-Authentication/1-sign-in/.gitignore deleted file mode 100644 index a586f22..0000000 --- a/1-Authentication/1-sign-in/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Node -node_modules/ - -# Cypress -cypress/screenshots/ - -# Environments -cypress.env.json \ No newline at end of file diff --git a/1-Authentication/1-sign-in/README.md b/1-Authentication/1-sign-in/README.md deleted file mode 100644 index c964548..0000000 --- a/1-Authentication/1-sign-in/README.md +++ /dev/null @@ -1,325 +0,0 @@ ---- -page_type: sample -name: Vanilla JavaScript single-page application using MSAL.js to authenticate users with Microsoft Entra ID -description: Vanilla JavaScript single-page application using MSAL.js to authenticate users with Microsoft Entra ID -languages: - - javascript -products: - - microsoft-entra-id - - msal-js - - msal-browser -urlFragment: ms-identity-javascript-tutorial -extensions: -- services: ms-identity -- platform: JavaScript -- endpoint: Microsoft identity platform -- level: 100 -- client: Vanilla JavaScript SPA ---- - -# Vanilla JavaScript single-page application using MSAL.js to authenticate users with Microsoft Entra ID - -* [Overview](#overview) -* [Scenario](#scenario) -* [Contents](#contents) -* [Prerequisites](#prerequisites) -* [Setup the sample](#setup-the-sample) -* [Explore the sample](#explore-the-sample) -* [Troubleshooting](#troubleshooting) -* [About the code](#about-the-code) -* [Next Steps](#next-steps) -* [Contributing](#contributing) -* [Learn More](#learn-more) - -## Overview - -This sample demonstrates a Vanilla JavaScript single-page application (SPA) that lets users sign-in to [Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/fundamentals/active-directory-whatis) (Microsoft Entra ID) using the [Microsoft Authentication Library for JavaScript](https://github.com/AzureAD/microsoft-authentication-library-for-js) (MSAL.js). In doing so, it also illustrates various authentication concepts, such as [ID Tokens](https://docs.microsoft.com/azure/active-directory/develop/id-tokens), [OIDC scopes](https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes), [single-sign on](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso), **account selection**, **silent requests** and more. - -## Scenario - -1. The client application uses **MSAL.js** to sign-in a user and obtain an **ID Token** from **Microsoft Entra ID**. -2. The **ID Token** proves that the user has successfully signed-in with their organization's tenant. - -![Overview](./ReadmeFiles/topology_signin.png) - -## Contents - -| File/folder | Description | -|-----------------------|---------------------------------------------------------------------------| -| `AppCreationScripts/` | Contains Powershell scripts to automate app registration. | -| `App/authPopup.js` | Main authentication logic resides here (using popup flow). | -| `App/authRedirect.js` | Use this instead of `authPopup.js` for authentication with redirect flow. | -| `App/authConfig.js` | Contains configuration parameters for the sample. | -| `App/ui.js` | Contains UI logic. | -| `server.js` | Simple Node server for `index.html`. | - -## Prerequisites - -* [Node.js](https://nodejs.org/en/download/) must be installed to run this sample. -* [Visual Studio Code](https://code.visualstudio.com/download) is recommended for running and editing this sample. -* [VS Code Azure Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) extension is recommended for interacting with Azure through VS Code Interface. -* A modern web browser. -* An **Microsoft Entra ID** tenant. For more information, see: [How to get a Microsoft Entra tenant](https://docs.microsoft.com/azure/active-directory/develop/test-setup-environment#get-a-test-tenant) -* A user account in your **Microsoft Entra ID** tenant. - ->This sample will not work with a **personal Microsoft account**. If you're signed in to the [Microsoft Entra admin center](https://entra.microsoft.com) with a personal Microsoft account and have not created a user account in your directory before, you will need to create one before proceeding. - -## Setup the sample - -### Step 1: Clone or download this repository - -From your shell or command line: - -```console -git clone https://github.com/Azure-Samples/ms-identity-javascript-tutorial.git -``` - -or download and extract the repository *.zip* file. - -> :warning: To avoid path length limitations on Windows, we recommend cloning into a directory near the root of your drive. - -### Step 2: Install project dependencies - -```console - cd 1-Authentication\1-sign-in - npm install -``` - -### Step 3: Register the sample application(s) in your tenant - -There is one project in this sample. To register it, you can: - -* follow the steps below for manually register your apps -* or use PowerShell scripts that: - * **automatically** creates the Microsoft Entra applications and related objects (passwords, permissions, dependencies) for you. - * modify the projects' configuration files. - -
- Expand this section if you want to use this automation: - - > :warning: If you have never used **Microsoft Graph PowerShell** before, we recommend you go through the [App Creation Scripts Guide](./AppCreationScripts/AppCreationScripts.md) once to ensure that your environment is prepared correctly for this step. - - 1. On Windows, run PowerShell as **Administrator** and navigate to the root of the cloned directory - 1. In PowerShell run: - - ```PowerShell - Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force - ``` - - 1. Run the script to create your Microsoft Entra application and configure the code of the sample application accordingly. - 1. For interactive process -in PowerShell, run: - - ```PowerShell - cd .\AppCreationScripts\ - .\Configure.ps1 -TenantId "[Optional] - your tenant id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" - ``` - - > Other ways of running the scripts are described in [App Creation Scripts guide](./AppCreationScripts/AppCreationScripts.md). The scripts also provide a guide to automated application registration, configuration and removal which can help in your CI/CD scenarios. - -
- -#### Choose the Microsoft Entra tenant where you want to create your applications - -To manually register the apps, as a first step you'll need to: - -1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com). -1. If your account is present in more than one Microsoft Entra tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired Microsoft Entra tenant. - -#### Register the client app (ms-identity-javascript-c1s1) - -1. Navigate to the [Microsoft Entra admin center](https://entra.microsoft.com) and select the **Microsoft Entra ID** service. -1. Select the **App Registrations** blade on the left, then select **New registration**. -1. In the **Register an application page** that appears, enter your application's registration information: - 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `ms-identity-javascript-c1s1`. - 1. Under **Supported account types**, select **Accounts in this organizational directory only** - 1. Select **Register** to create the application. -1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. -1. In the app's registration screen, select the **Authentication** blade to the left. -1. If you don't have a platform added, select **Add a platform** and select the **Single-page application** option. - 1. In the **Redirect URI** section enter the following redirect URIs: - 1. `http://localhost:3000` - 1. `http://localhost:3000/redirect` - 1. Click **Save** to save your changes. - -##### Configure Optional Claims - -1. Still on the same app registration, select the **Token configuration** blade to the left. -1. Select **Add optional claim**: - 1. Select **optional claim type**, then choose **ID**. - 1. Select the optional claim **acct**. - > Provides user's account status in tenant. If the user is a **member** of the tenant, the value is *0*. If they're a **guest**, the value is *1*. - 1. Select **Add** to save your changes. - -##### Configure the client app (ms-identity-javascript-c1s1) to use your app registration - -Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. - -> In the steps below, "ClientID" is the same as "Application ID" or "AppId". - -1. Open the `App\authConfig.js` file. -1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of `ms-identity-javascript-c1s1` app copied from the Microsoft Entra admin center. -1. Find the key `Enter_the_Tenant_Info_Here` and replace the existing value with your Microsoft Entra tenant/directory ID. - -### Step 4: Running the sample - -```console - cd 1-Authorization\1-sign-in - npm start -``` - -## Explore the sample - -1. Open your browser and navigate to `http://localhost:3000`. -1. Click the **sign-in** button on the top right corner. - -![Screenshot](./ReadmeFiles/screenshot.png) - -> :information_source: Did the sample not work for you as expected? Then please reach out to us using the [GitHub Issues](../../../../issues) page. - -## We'd love your feedback! - -Were we successful in addressing your learning objective? Consider taking a moment to [share your experience with us](https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR73pcsbpbxNJuZCMKN0lURpUNDVHTkg2VVhWMTNYUTZEM05YS1hSN01EOSQlQCN0PWcu). - -## Troubleshooting - -
- Expand for troubleshooting info - -Use [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) to get support from the community. Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. -Make sure that your questions or comments are tagged with [`azure-active-directory` `ms-identity` `adal` `msal`]. - -
- -## About the code - -## Sign-in - -MSAL.js provides 3 login APIs: `loginPopup()`, `loginRedirect()` and `ssoSilent()`: - -```javascript - myMSALObj.loginPopup(loginRequest) - .then((response) => { - // your logic - }) - .catch(error => { - console.error(error); - }); -``` - -To use the redirect flow, you must register a handler for redirect promise. **MSAL.js** provides`handleRedirectPromise()` API: - -```javascript - myMSALObj.handleRedirectPromise() - .then((response) => { - // your logic - }) - .catch(err => { - console.error(err); - }); - - myMSALObj.loginRedirect(loginRequest); -``` - -The recommended pattern is that you fallback to an **interactive method** should the silent SSO fails. - -```javascript - - const silentRequest = { - scopes: ["openid", "profile"], - loginHint: "example@domain.net" - }; - - myMSALObj.ssoSilent(silentRequest) - .then((response) => { - // your logic - }).catch(error => { - console.error("Silent Error: " + error); - if (error instanceof msal.InteractionRequiredAuthError) { - myMSALObj.loginRedirect(loginRequest); - } - }); -``` - -You can get all the active accounts of a user with the get `getAllAccounts()` API. If you know the **username** or **home ID** of an account, you can select it by: - -```javascript - myMSALObj.getAccountByUsername(username); - // or - myMSALObj.getAccountByHomeId(homeId); -``` - -### Sign-out - -The Application redirects the user to the **Microsoft identity platform** logout endpoint to sign out. This endpoint clears the user's session from the browser. If your app did not go to the logout endpoint, the user may re-authenticate to your app without entering their credentials again, because they would have a valid single sign-in session with the **Microsoft identity platform** endpoint. For more, see: [Send a sign-out request](https://docs.microsoft.com/azure/active-directory/develop/v2-protocols-oidc#send-a-sign-out-request) - -### ID Token Validation - -A single-page application does not benefit from validating ID tokens, since the application runs without a back-end and as such, attackers can intercept and edit the keys used for validation of the token. - -### Sign-in Audience and Account Types - -This sample is meant to work with accounts in your organization (aka *single-tenant*). If you would like to allow sign-ins with other type accounts, you have to configure your `authority` string in `authConfig.js` accordingly. For example: - -```javascript -const msalConfig = { - auth: { - clientId: "", - authority: "https://login.microsoftonline.com/consumers", // allows sign-ins with personal Microsoft accounts. - redirectUri: "", - }, -``` - -For more information about audiences and account types, please see: [Validation differences by supported account types (signInAudience)](https://docs.microsoft.com/azure/active-directory/develop/supported-accounts-validation) - -> :warning: Be aware that making an application multi-tenant entails more than just modifying the `authority` string. For more information, please see [How to: Sign in any Microsoft Entra ID user using the multi-tenant application pattern](https://docs.microsoft.com/azure/active-directory/develop/howto-convert-app-to-be-multi-tenant). - -### Authentication in National Clouds - -National clouds (aka Sovereign clouds) are physically isolated instances of Azure. These regions of Azure are designed to make sure that data residency, sovereignty, and compliance requirements are honored within geographical boundaries. Enabling your application for sovereign clouds requires you to: - -* register your application in a specific portal, depending on the cloud. -* use a specific authority, depending on the cloud in the configuration file for your application. -* in case you want to call the MS Graph, this requires a specific Graph endpoint URL, depending on the cloud. - -For instance, to configure this sample for **Microsoft Entra ID Germany** national cloud: - -1. Open the `App\authConfig.js` file. -1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of the `ms-identity-javascript-tutorial-c1s1` application copied from the Microsoft Entra admin center. -1. Find the key `Enter_the_Cloud_Instance_Id_Here/Enter_the_Tenant_Info_Here` and replace the existing value with `https://portal.microsoftazure.de/`. -1. Find the key `Enter_the_Redirect_Uri_Here` and replace the existing value with the base address of the `ms-identity-javascript-tutorial-c1s1` application (by default `http://localhost:3000`). - -See [National Clouds](https://docs.microsoft.com/azure/active-directory/develop/authentication-national-cloud#app-registration-endpoints) for more information. - -## Next Steps - -Learn how to: - -* [Vanilla JavaScript single-page application using MSAL.js to authorize users for calling Microsoft Graph](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/tree/main/2-Authorization-I/1-call-graph) -* [Vanilla JavaScript single-page application (SPA) using MSAL.js to authorize users for calling a protected web API on Microsoft Entra ID](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/tree/main/3-Authorization-II/1-call-api) - -## Contributing - -If you'd like to contribute to this sample, see [CONTRIBUTING.MD](/CONTRIBUTING.md). - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - -## Learn More - -* [Microsoft identity platform (Microsoft Entra ID for developers)](https://docs.microsoft.com/azure/active-directory/develop/) -* [Microsoft Entra ID code samples](https://docs.microsoft.com/azure/active-directory/develop/sample-v2-code) -* [Overview of Microsoft Authentication Library (MSAL)](https://docs.microsoft.com/azure/active-directory/develop/msal-overview) -* [Register an application with the Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/quickstart-register-app) -* [Configure a client application to access web APIs](https://docs.microsoft.com/azure/active-directory/develop/quickstart-configure-app-access-web-apis) -* [Understanding Microsoft Entra application consent experiences](https://docs.microsoft.com/azure/active-directory/develop/application-consent-experience) -* [Understand user and admin consent](https://docs.microsoft.com/azure/active-directory/develop/howto-convert-app-to-be-multi-tenant#understand-user-and-admin-consent) -* [Application and service principal objects in Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/develop/app-objects-and-service-principals) -* [Authentication Scenarios for Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/develop/authentication-flows-app-scenarios) -* [Building Zero Trust ready apps](https://aka.ms/ztdevsession) -* [National Clouds](https://docs.microsoft.com/azure/active-directory/develop/authentication-national-cloud#app-registration-endpoints) -* [Initialize client applications using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-initializing-client-applications) -* [Single sign-on with MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso) -* [Handle MSAL.js exceptions and errors](https://docs.microsoft.com/azure/active-directory/develop/msal-handling-exceptions?tabs=javascript) -* [Logging in MSAL.js applications](https://docs.microsoft.com/azure/active-directory/develop/msal-logging?tabs=javascript) -* [Pass custom state in authentication requests using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-pass-custom-state-authentication-request) -* [Prompt behavior in MSAL.js interactive requests](https://docs.microsoft.com/azure/active-directory/develop/msal-js-prompt-behavior) -* [Use MSAL.js to work with Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory/develop/msal-b2c-overview) diff --git a/1-Authentication/2-sign-in-b2c/App/authConfig.js b/1-Authentication/2-sign-in-b2c/App/authConfig.js deleted file mode 100644 index 0239e84..0000000 --- a/1-Authentication/2-sign-in-b2c/App/authConfig.js +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Enter here the user flows and custom policies for your B2C application - * To learn more about user flows, visit: https://docs.microsoft.com/en-us/azure/active-directory-b2c/user-flow-overview - * To learn more about custom policies, visit: https://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-overview - */ -const b2cPolicies = { - names: { - signUpSignIn: 'B2C_1_susi_v2', - forgotPassword: 'B2C_1_reset_v3', - editProfile: 'B2C_1_edit_profile_v2', - }, - authorities: { - signUpSignIn: { - authority: 'https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/B2C_1_susi_v2', - }, - forgotPassword: { - authority: 'https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/B2C_1_reset_v3', - }, - editProfile: { - authority: 'https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/B2C_1_edit_profile_v2', - }, - }, - authorityDomain: 'fabrikamb2c.b2clogin.com', -}; - -/** - * Configuration object to be passed to MSAL instance on creation. - * For a full list of MSAL.js configuration parameters, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md - * For more details on MSAL.js and Azure AD B2C, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/working-with-b2c.md - */ - -const msalConfig = { - auth: { - clientId: '2fdd06f3-7b34-49a3-a78b-0cf1dd87878e', // Replace with your AppID/ClientID obtained from Azure Portal. - authority: b2cPolicies.authorities.signUpSignIn.authority, // Choose sign-up/sign-in user-flow as your default. - knownAuthorities: [b2cPolicies.authorityDomain], // You must identify your tenant's domain as a known authority. - redirectUri: '/', // You must register this URI on Azure Portal/App Registration. Defaults to "window.location.href". - postLogoutRedirectUri: '/signout', // Simply remove this line if you would like navigate to index page after logout. - navigateToLoginRequestUrl: false, // If "true", will navigate back to the original request location before processing the auth code response. - }, - cache: { - cacheLocation: 'localStorage', // Configures cache location. "sessionStorage" is more secure, but "localStorage" gives you SSO. - storeAuthStateInCookie: false, // If you wish to store cache items in cookies as well as browser cache, set this to "true". - }, - system: { - loggerOptions: { - loggerCallback: (level, message, containsPii) => { - if (containsPii) { - return; - } - switch (level) { - case msal.LogLevel.Error: - console.error(message); - return; - case msal.LogLevel.Info: - console.info(message); - return; - case msal.LogLevel.Verbose: - console.debug(message); - return; - case msal.LogLevel.Warning: - console.warn(message); - return; - } - }, - }, - }, -}; - -/** - * Scopes you add here will be prompted for user consent during sign-in. - * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request. - * For more information about OIDC scopes, visit: - * https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes - */ -const loginRequest = { - scopes: ['openid', 'offline_access'], -}; - -/** - * An optional silentRequest object can be used to achieve silent SSO - * between applications by providing a "login_hint" property. - */ - -// const silentRequest = { -// scopes: ["openid", "profile"], -// loginHint: "example@domain.net" -// }; - -// exporting config object for jest -if (typeof exports !== 'undefined') { - module.exports = { - msalConfig: msalConfig, - b2cPolicies: b2cPolicies, - }; -} diff --git a/1-Authentication/2-sign-in-b2c/App/authPopup.js b/1-Authentication/2-sign-in-b2c/App/authPopup.js deleted file mode 100644 index 41e1028..0000000 --- a/1-Authentication/2-sign-in-b2c/App/authPopup.js +++ /dev/null @@ -1,230 +0,0 @@ -// Create the main myMSALObj instance -// configuration parameters are located at authConfig.js -const myMSALObj = new msal.PublicClientApplication(msalConfig); - -let accountId = ''; -let username = ''; - -/** - * This method adds an event callback function to the MSAL object - * to handle the response from redirect flow. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/events.md - */ -myMSALObj.addEventCallback((event) => { - console.log(event.eventType); - if ( - (event.eventType === msal.EventType.LOGIN_SUCCESS || - event.eventType === msal.EventType.ACQUIRE_TOKEN_SUCCESS) && - event.payload.account - ) { - /** - * For the purpose of setting an active account for UI update, we want to consider only the auth - * response resulting from SUSI flow. "tfp" claim in the id token tells us the policy (NOTE: legacy - * policies may use "acr" instead of "tfp"). To learn more about B2C tokens, visit: - * https://docs.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview - */ - - if (event.payload.idTokenClaims['tfp'] === b2cPolicies.names.editProfile) { - const originalSignInAccount = myMSALObj - .getAllAccounts() - .find( - (account) => - account.idTokenClaims.sub === event.payload.idTokenClaims.sub && - account.idTokenClaims['tfp'] === b2cPolicies.names.signUpSignIn - ); - - let signUpSignInFlowRequest = { - authority: b2cPolicies.authorities.signUpSignIn.authority, - account: originalSignInAccount, - }; - - // silently login again with the signUpSignIn policy - myMSALObj.ssoSilent(signUpSignInFlowRequest) - .then(() => { - window.location.reload(); - }).catch((error) => { - console.log(error); - if (error instanceof msal.InteractionRequiredAuthError) { - myMSALObj.loginPopup({ - ...signUpSignInFlowRequest, - }); - } - }); - } - - /** - * Below we are checking if the user is returning from the reset password flow. - * If so, we will ask the user to reauthenticate with their new password. - * If you do not want this behavior and prefer your users to stay signed in instead, - * you can replace the code below with the same pattern used for handling the return from - * profile edit flow - */ - - if (event.payload.idTokenClaims['tfp'] === b2cPolicies.names.forgotPassword) { - let signUpSignInFlowRequest = { - authority: b2cPolicies.authorities.signUpSignIn.authority, - }; - myMSALObj - .loginPopup(signUpSignInFlowRequest) - .then(handleResponse) - .catch((error) => { - console.log(error); - }); - } - } -}); - -function selectAccount() { - /** - * See here for more info on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - - const currentAccounts = myMSALObj.getAllAccounts(); - - if (currentAccounts.length === 0) { - return; - } else if (currentAccounts.length > 1) { - // Add your account choosing logic here - console.log('Multiple accounts detected.'); - - const originalSignInAccount = myMSALObj - .getAllAccounts() - .find((account) => account.idTokenClaims['tfp'] === b2cPolicies.names.signUpSignIn); - - accountId = originalSignInAccount.homeAccountId; - - username = originalSignInAccount.username ? originalSignInAccount.username : originalSignInAccount.name; - welcomeUser(username); - myMSALObj - .acquireTokenSilent({ - account: myMSALObj.getAccountByHomeId(accountId), - scopes: ['openid'], - }) - .then((response) => { - updateTable(response.idTokenClaims); - }); - - } else if (currentAccounts.length === 1) { - accountId = currentAccounts[0].homeAccountId; - username = currentAccounts[0].username; - welcomeUser(username); - - /** - * In order to obtain the ID Token in the cached obtained previously, you can initiate a - * silent token request by passing the current user's account and the scope "openid". - */ - myMSALObj - .acquireTokenSilent({ - account: myMSALObj.getAccountByHomeId(accountId), - scopes: ['openid'], - }) - .then((response) => { - updateTable(response.idTokenClaims); - }); - } -} - -// in case of page refresh -selectAccount(); - -function handleResponse(response) { - /** - * To see the full list of response object properties, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#response - */ - - if (response !== null) { - accountId = response.account.homeAccountId; - username = response.account.username; - welcomeUser(username); - updateTable(response.idTokenClaims); - } else { - selectAccount(); - } -} - -function signIn() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - myMSALObj - .loginPopup({ - ...loginRequest, - }) - .then(handleResponse) - .catch((error) => { - console.log(error); - // Error handling - if (error.errorMessage) { - // Check for forgot password error - // Learn more about AAD error codes at https://docs.microsoft.com/en-us/azure/active-directory/develop/reference-aadsts-error-codes - if (error.errorMessage.indexOf('AADB2C90118') > -1) { - myMSALObj.loginPopup(b2cPolicies.authorities.forgotPassword); - } - } - }); -} - -function signOut() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - // Choose which account to logout from. - - const logoutRequest = { - mainWindowRedirectUri: 'http://localhost:6420/signout', - }; - - myMSALObj.logoutPopup(logoutRequest); -} - -function getTokenPopup(request) { - /** - * See here for more information on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - - request.account = myMSALObj.getAccountByHomeId(accountId); - - return myMSALObj - .acquireTokenSilent(request) - .then((response) => { - // In case the response from B2C server has an empty accessToken field - // throw an error to initiate token acquisition - if (!response.accessToken || response.accessToken === '') { - throw new msal.InteractionRequiredAuthError(); - } - return response; - }) - .catch((error) => { - console.log(error); - console.log('silent token acquisition fails. acquiring token using popup'); - if (error instanceof msal.InteractionRequiredAuthError) { - // fallback to interaction when silent call fails - return myMSALObj - .acquireTokenPopup({ - ...request, - redirectUri: '/redirect', - }) - .then((response) => { - console.log(response); - return response; - }) - .catch((error) => { - console.log(error); - }); - } else { - console.log(error); - } - }); -} - -function editProfile() { - myMSALObj.loginPopup({ - ...b2cPolicies.authorities.editProfile, - }); -} \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/authRedirect.js b/1-Authentication/2-sign-in-b2c/App/authRedirect.js deleted file mode 100644 index 1f3bd05..0000000 --- a/1-Authentication/2-sign-in-b2c/App/authRedirect.js +++ /dev/null @@ -1,206 +0,0 @@ -// Create the main myMSALObj instance -// configuration parameters are located at authConfig.js -const myMSALObj = new msal.PublicClientApplication(msalConfig); - -let accountId = ''; -let username = ''; -let accessToken = null; - -/** - * This method adds an event callback function to the MSAL object - * to handle the response from redirect flow. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/events.md - */ -myMSALObj.addEventCallback((event) => { - if ( - (event.eventType === msal.EventType.LOGIN_SUCCESS || - event.eventType === msal.EventType.ACQUIRE_TOKEN_SUCCESS) && - event.payload.account - ) { - /** - * For the purpose of setting an active account for UI update, we want to consider only the auth - * response resulting from SUSI flow. "tfp" claim in the id token tells us the policy (NOTE: legacy - * policies may use "acr" instead of "tfp"). To learn more about B2C tokens, visit: - * https://docs.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview - */ - - if (event.payload.idTokenClaims['tfp'] === b2cPolicies.names.editProfile) { - const originalSignInAccount = myMSALObj - .getAllAccounts() - .find( - (account) => - account.idTokenClaims.oid === event.payload.idTokenClaims.oid && - account.idTokenClaims.sub === event.payload.idTokenClaims.sub && - account.idTokenClaims['tfp'] === b2cPolicies.names.signUpSignIn - ); - - let signUpSignInFlowRequest = { - authority: b2cPolicies.authorities.signUpSignIn.authority, - account: originalSignInAccount, - }; - - // silently login again with the signUpSignIn policy - myMSALObj.ssoSilent(signUpSignInFlowRequest) - .redirect(() => { - window.location.reload(); - }).catch((error) => { - console.log(error); - if (error instanceof msal.InteractionRequiredAuthError) { - myMSALObj.loginRedirect({ - ...signUpSignInFlowRequest, - }); - } - }); - } - - /** - * Below we are checking if the user is returning from the reset password flow. - * If so, we will ask the user to reauthenticate with their new password. - * If you do not want this behavior and prefer your users to stay signed in instead, - * you can replace the code below with the same pattern used for handling the return from - * profile edit flow - */ - if (event.payload.idTokenClaims['tfp'] === b2cPolicies.names.forgotPassword) { - myMSALObj.loginRedirect(b2cPolicies.authorities.signUpSignIn).catch((error) => { - console.log(error); - }); - } - } -}); - -myMSALObj - .handleRedirectPromise() - .then(handleResponse) - .catch((error) => { - console.log(error); - - // Check for forgot password error - // Learn more about AAD error codes at https://docs.microsoft.com/en-us/azure/active-directory/develop/reference-aadsts-error-codes - if (error.errorMessage.indexOf('AADB2C90118') > -1) { - try { - myMSALObj.loginRedirect(b2cPolicies.authorities.forgotPassword); - } catch (err) { - console.log(err); - } - } - }); - -function selectAccount() { - /** - * See here for more information on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - - const currentAccounts = myMSALObj.getAllAccounts(); - if (currentAccounts.length === 0) { - return; - } else if (currentAccounts.length > 1) { - // Add your account choosing logic here - console.log('Multiple accounts detected.'); - const originalSignInAccount = myMSALObj - .getAllAccounts() - .find((account) => account.idTokenClaims['tfp'] === b2cPolicies.names.signUpSignIn); - - accountId = originalSignInAccount.homeAccountId; - - username = originalSignInAccount.username ? originalSignInAccount.username : originalSignInAccount.name; - welcomeUser(username); - myMSALObj - .acquireTokenSilent({ - account: myMSALObj.getAccountByHomeId(accountId), - scopes: ['openid'], - }) - .then((response) => { - updateTable(response.idTokenClaims); - }); - } else if (currentAccounts.length === 1) { - accountId = currentAccounts[0].homeAccountId; - username = currentAccounts[0].username ? currentAccounts[0].username : currentAccounts[0].name; - welcomeUser(username); - - /** - * In order to obtain the ID Token in the cached obtained previously, you can initiate a - * silent token request by passing the current user's account and the scope "openid". - */ - myMSALObj - .acquireTokenSilent({ - account: myMSALObj.getAccountByHomeId(accountId), - scopes: ['openid'], - }) - .then((response) => { - updateTable(response.idTokenClaims); - }); - } -} - -// in case of page refresh - -function handleResponse(response) { - /** - * To see the full list of response object properties, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#response - */ - - if (response) { - // if response contains an access token, store it - if (response.accessToken && response.accessToken !== '') { - accessToken = response.accessToken; - } - - // for handling B2C user-flows and policies - selectAccount(); - } -} - -function signIn() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - myMSALObj.loginRedirect(loginRequest); -} - -function signOut() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - myMSALObj.logoutRedirect(); -} - -function getTokenRedirect(request) { - /** - * See here for more info on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - - request.account = myMSALObj.getAccountByHomeId(accountId); - - return myMSALObj - .acquireTokenSilent(request) - .then((response) => { - // In case the response from B2C server has an empty accessToken field - // throw an error to initiate token acquisition - if (!response.accessToken || response.accessToken === '') { - throw new msal.InteractionRequiredAuthError(); - } - return handleResponse(response); - }) - .catch((error) => { - console.log('silent token acquisition fails. acquiring token using popup'); - if (error instanceof msal.InteractionRequiredAuthError) { - // fallback to interaction when silent call fails - return myMSALObj.acquireTokenRedirect(request); - } else { - console.log(error); - } - }); -} - -function editProfile() { - myMSALObj.loginRedirect(b2cPolicies.authorities.editProfile); -} - -selectAccount(); diff --git a/1-Authentication/2-sign-in-b2c/App/favicon.svg b/1-Authentication/2-sign-in-b2c/App/favicon.svg deleted file mode 100644 index 0ae869e..0000000 --- a/1-Authentication/2-sign-in-b2c/App/favicon.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - Icon-identity-228 - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/index.html b/1-Authentication/2-sign-in-b2c/App/index.html deleted file mode 100644 index 364957a..0000000 --- a/1-Authentication/2-sign-in-b2c/App/index.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - Microsoft identity platform - - - - - - - - - - - - -
-
Vanilla JavaScript single-page application built with MSAL.js
-
-
-
- - - - - - - - - - -
Claim TypeValueDescription
-
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/redirect.html b/1-Authentication/2-sign-in-b2c/App/redirect.html deleted file mode 100644 index dcc8b0e..0000000 --- a/1-Authentication/2-sign-in-b2c/App/redirect.html +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/signout.html b/1-Authentication/2-sign-in-b2c/App/signout.html deleted file mode 100644 index c6a3398..0000000 --- a/1-Authentication/2-sign-in-b2c/App/signout.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - Microsoft identity platform - - - - - -
-

Goodbye!

-

You have signed out and your cache has been cleared.

- Take me back -
- - \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/styles.css b/1-Authentication/2-sign-in-b2c/App/styles.css deleted file mode 100644 index 4a5d384..0000000 --- a/1-Authentication/2-sign-in-b2c/App/styles.css +++ /dev/null @@ -1,14 +0,0 @@ -.navbarStyle { - padding: .5rem 1rem !important; -} - -.profileButton { - margin: .5rem .5rem; -} - - -.table-responsive-ms { - max-height: 39rem !important; - margin-left: 1.5rem; - margin-right: 1.5rem; -} \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/ui.js b/1-Authentication/2-sign-in-b2c/App/ui.js deleted file mode 100644 index eb78356..0000000 --- a/1-Authentication/2-sign-in-b2c/App/ui.js +++ /dev/null @@ -1,37 +0,0 @@ -// Select DOM elements to work with -const signInButton = document.getElementById('signIn'); -const signOutButton = document.getElementById('signOut') -const titleDiv = document.getElementById('title-div'); -const welcomeDiv = document.getElementById('welcome-div'); -const tableDiv = document.getElementById('table-div'); -const tableBody = document.getElementById('table-body-div'); -const footerDiv = document.getElementById('footer'); -const editProfileButton = document.getElementById('editProfileButton'); -const table = document.getElementById('table'); - -function welcomeUser(username) { - - signInButton.classList.add('d-none'); - signOutButton.classList.remove('d-none'); - titleDiv.classList.add('d-none'); - editProfileButton.classList.remove('d-none'); - welcomeDiv.classList.remove('d-none'); - welcomeDiv.innerHTML = `Welcome ${username}!` - table.style.overflow = 'scroll'; -} - -function updateTable(idTokenClaims) { - tableDiv.classList.remove('d-none'); - footerDiv.classList.remove('d-none'); - const tokenClaims = createClaimsTable(idTokenClaims); - Object.keys(tokenClaims).forEach((key) => { - let row = tableBody.insertRow(0); - let cell1 = row.insertCell(0); - let cell2 = row.insertCell(1); - let cell3 = row.insertCell(2); - cell1.innerHTML = tokenClaims[key][0]; - cell2.innerHTML = tokenClaims[key][1]; - cell3.innerHTML = tokenClaims[key][2]; - }) - -} \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/utils/claimUtils.js b/1-Authentication/2-sign-in-b2c/App/utils/claimUtils.js deleted file mode 100644 index 1638b14..0000000 --- a/1-Authentication/2-sign-in-b2c/App/utils/claimUtils.js +++ /dev/null @@ -1,224 +0,0 @@ -/** - * Populate claims table with appropriate description - * @param {Object} claims ID token claims - * @returns claimsObject - */ -const createClaimsTable = (claims) => { - let claimsObj = {}; - let index = 0; - - Object.keys(claims).forEach((key) => { - if (typeof claims[key] !== 'string' && typeof claims[key] !== 'number') return; - switch (key) { - case 'aud': - populateClaim( - key, - claims[key], - "Identifies the intended recipient of the token. In ID tokens, the audience is your app's Application ID, assigned to your app in the Azure portal.", - index, - claimsObj - ); - index++; - break; - case 'iss': - populateClaim( - key, - claims[key], - 'Identifies the issuer, or authorization server that constructs and returns the token. It also identifies the Azure AD tenant for which the user was authenticated. If the token was issued by the v2.0 endpoint, the URI will end in /v2.0. The GUID that indicates that the user is a consumer user from a Microsoft account is 9188040d-6c67-4c5b-b112-36a304b66dad.', - index, - claimsObj - ); - index++; - break; - case 'iat': - populateClaim( - key, - changeDateFormat(claims[key]), - 'Issued At indicates when the authentication for this token occurred.', - index, - claimsObj - ); - index++; - break; - case 'nbf': - populateClaim( - key, - changeDateFormat(claims[key]), - 'The nbf (not before) claim identifies the time (as UNIX timestamp) before which the JWT must not be accepted for processing.', - index, - claimsObj - ); - index++; - break; - case 'exp': - populateClaim( - key, - changeDateFormat(claims[key]), - "The exp (expiration time) claim identifies the expiration time (as UNIX timestamp) on or after which the JWT must not be accepted for processing. It's important to note that in certain circumstances, a resource may reject the token before this time. For example, if a change in authentication is required or a token revocation has been detected.", - index, - claimsObj - ); - index++; - break; - case 'name': - populateClaim( - key, - claims[key], - "The principal about which the token asserts information, such as the user of an application. This value is immutable and can't be reassigned or reused. It can be used to perform authorization checks safely, such as when the token is used to access a resource. By default, the subject claim is populated with the object ID of the user in the directory", - index, - claimsObj - ); - index++; - break; - case 'preferred_username': - populateClaim( - key, - claims[key], - 'The primary username that represents the user. It could be an email address, phone number, or a generic username without a specified format. Its value is mutable and might change over time. Since it is mutable, this value must not be used to make authorization decisions. It can be used for username hints, however, and in human-readable UI as a username. The profile scope is required in order to receive this claim.', - index, - claimsObj - ); - index++; - break; - case 'nonce': - populateClaim( - key, - claims[key], - 'The nonce matches the parameter included in the original /authorize request to the IDP. If it does not match, your application should reject the token.', - index, - claimsObj - ); - index++; - break; - case 'oid': - populateClaim( - key, - claims[key], - 'The oid (user’s object id) is the only claim that should be used to uniquely identify a user in an Azure AD tenant. The token might have one or more of the following claim, that might seem like a unique identifier, but is not and should not be used as such.', - index, - claimsObj - ); - index++; - break; - case 'tid': - populateClaim( - key, - claims[key], - 'The tenant ID. You will use this claim to ensure that only users from the current Azure AD tenant can access this app.', - index, - claimsObj - ); - index++; - break; - case 'upn': - populateClaim( - key, - claims[key], - '(user principal name) – might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place or might change to reflect a personal change like marriage.', - index, - claimsObj - ); - index++; - break; - case 'email': - populateClaim( - key, - claims[key], - 'Email might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place.', - index, - claimsObj - ); - index++; - break; - case 'acct': - populateClaim( - key, - claims[key], - 'Available as an optional claim, it lets you know what the type of user (homed, guest) is. For example, for an individual’s access to their data you might not care for this claim, but you would use this along with tenant id (tid) to control access to say a company-wide dashboard to just employees (homed users) and not contractors (guest users).', - index, - claimsObj - ); - index++; - break; - case 'sid': - populateClaim(key, claims[key], 'Session ID, used for per-session user sign-out.', index, claimsObj); - index++; - break; - case 'sub': - populateClaim( - key, - claims[key], - 'The sub claim is a pairwise identifier - it is unique to a particular application ID. If a single user signs into two different apps using two different client IDs, those apps will receive two different values for the subject claim.', - index, - claimsObj - ); - index++; - break; - case 'ver': - populateClaim( - key, - claims[key], - 'Version of the token issued by the Microsoft identity platform', - index, - claimsObj - ); - index++; - break; - case 'auth_time': - populateClaim( - key, - claims[key], - 'The time at which a user last entered credentials, represented in epoch time. There is no discrimination between that authentication being a fresh sign-in, a single sign-on (SSO) session, or another sign-in type.', - index, - claimsObj - ); - index++; - break; - case 'at_hash': - populateClaim( - key, - claims[key], - 'An access token hash included in an ID token only when the token is issued together with an OAuth 2.0 access token. An access token hash can be used to validate the authenticity of an access token', - index, - claimsObj - ); - index++; - break; - case 'uti': - case 'rh': - index++; - break; - default: - populateClaim(key, claims[key], '', index, claimsObj); - index++; - } - }); - - return claimsObj; -}; - -/** - * Populates claim, description, and value into an claimsObject - * @param {String} claim - * @param {String} value - * @param {String} description - * @param {Number} index - * @param {Object} claimsObject - */ -const populateClaim = (claim, value, description, index, claimsObject) => { - let claimsArray = []; - claimsArray[0] = claim; - claimsArray[1] = value; - claimsArray[2] = description; - claimsObject[index] = claimsArray; -}; - -/** - * Transforms Unix timestamp to date and returns a string value of that date - * @param {String} date Unix timestamp - * @returns - */ -const changeDateFormat = (date) => { - let dateObj = new Date(date * 1000); - return `${date} - [${dateObj.toString()}]`; -}; \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/AppCreationScripts/sample.json b/1-Authentication/2-sign-in-b2c/AppCreationScripts/sample.json deleted file mode 100644 index 6ac9f13..0000000 --- a/1-Authentication/2-sign-in-b2c/AppCreationScripts/sample.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "Sample": { - "Title": "Vanilla JavaScript single-page application (SPA) using MSAL.js to authenticate users against Azure AD B2C", - "Level": 100, - "Client": "Vanilla JavaScript SPA", - "RepositoryUrl": "ms-identity-javascript-tutorial", - "Endpoint": "AAD v2.0", - "Languages": ["javascript"], - "Description": "Vanilla JavaScript single-page application (SPA) using MSAL.js to authenticate users against Azure AD B2C", - "Products": ["azure-active-directory-b2c", "msal-js", "msal-browser"], - "Platform": "JavaScript", - "Provider": "B2C" - }, - - "AADApps": [ - { - "Id": "client", - "Name": "ms-identity-javascript-c1s2", - "Kind": "SinglePageApplication", - "Audience": "AzureADandPersonalMicrosoftAccount", - "HomePage": "http://localhost:6420", - "SampleSubPath": "1-Authentication\\2-sign-in-b2c", - "ReplyUrls": "http://localhost:6420, http://localhost:6420/redirect" - } - ], - "CodeConfiguration": [ - { - "App": "client", - "SettingKind": "Replace", - "SettingFile": "\\..\\App\\src\\authConfig.js", - "Mappings": [ - { - "key": "Enter_the_Application_Id_Here", - "value": ".AppId" - }, - { - "key": "policyName", - "value": "Enter_The_Your_policy_Name" - }, - { - "key": "b2cDomain", - "value": "Enter_The_Tenant_Domain_name" - } - ] - } - ] -} diff --git a/1-Authentication/2-sign-in-b2c/README.md b/1-Authentication/2-sign-in-b2c/README.md deleted file mode 100644 index ecce84b..0000000 --- a/1-Authentication/2-sign-in-b2c/README.md +++ /dev/null @@ -1,391 +0,0 @@ ---- -page_type: sample -name: Vanilla JavaScript single-page application (SPA) using MSAL.js to authenticate users against Azure AD B2C -description: Vanilla JavaScript single-page application (SPA) using MSAL.js to authenticate users against Azure AD B2C -languages: - - javascript -products: - - azure-active-directory-b2c - - msal-js - - msal-browser -urlFragment: ms-identity-javascript-tutorial -extensions: -- services: ms-identity -- platform: JavaScript -- endpoint: AAD v2.0 -- level: 100 -- client: Vanilla JavaScript SPA ---- - -# Vanilla JavaScript single-page application (SPA) using MSAL.js to authenticate users against Azure AD B2C - -* [Overview](#overview) -* [Scenario](#scenario) -* [Contents](#contents) -* [Prerequisites](#prerequisites) -* [Setup the sample](#setup-the-sample) -* [Explore the sample](#explore-the-sample) -* [Troubleshooting](#troubleshooting) -* [About the code](#about-the-code) -* [Next Steps](#next-steps) -* [Contributing](#contributing) -* [Learn More](#learn-more) - -## Overview - -This sample demonstrates a Vanilla JavaScript single-page application (SPA) that lets users sign-in with [Azure Active Directory B2C](https://azure.microsoft.com/services/active-directory/external-identities/b2c/) using the [Microsoft Authentication Library for JavaScript)](https://github.com/AzureAD/microsoft-authentication-library-for-js) (MSAL.js). In doing so, it also illustrates various authentication and **B2C** concepts, such as [ID tokens](https://docs.microsoft.com/azure/active-directory-b2c/tokens-overview#token-types), [external identity providers](https://docs.microsoft.com/azure/active-directory-b2c/technical-overview#external-identity-providers) , [consumer social accounts](https://docs.microsoft.com/azure/active-directory-b2c/technical-overview#consumer-accounts), [single-sign on (SSO)](https://docs.microsoft.com/azure/active-directory-b2c/session-overview), **account selection**, **silent requests** and more. - -## Scenario - -1. The client application uses **MSAL.js** to obtain an **ID Token** from **Azure AD B2C**. -2. The **ID Token** proves that the user has successfully authenticated against **Azure AD B2C**. - -![Overview](./ReadmeFiles/topology_b2c_signin.png) - -## Contents - -| File/folder | Description | -|-----------------------|---------------------------------------------------------------------------| -| `App/authPopup.js` | Main authentication logic resides here (using popup flow). | -| `App/authRedirect.js` | Use this instead of `authPopup.js` for authentication with redirect flow. | -| `App/authConfig.js` | Contains configuration parameters for the sample. | -| `App/ui.js` | Contains UI logic. | -| `server.js` | Simple Node server to `index.html`. | - -## Prerequisites - -* [Node.js](https://nodejs.org/en/download/) must be installed to run this sample. -* [Visual Studio Code](https://code.visualstudio.com/download) is recommended for running and editing this sample. -* [VS Code Azure Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) extension is recommended for interacting with Azure through VS Code Interface. -* A modern web browser. -* An **Azure AD B2C** tenant. For more information, see: [How to get an Azure AD B2C tenant](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-create-tenant) -* A user account in your **Azure AD B2C** tenant. - -## Setup the sample - -### Step 1: Clone or download this repository - -From your shell or command line: - -```console -git clone https://github.com/Azure-Samples/ms-identity-javascript-tutorial.git -``` - -or download and extract the repository *.zip* file. - -> :warning: To avoid path length limitations on Windows, we recommend cloning into a directory near the root of your drive. - -### Step 2: Install project dependencies - -```console - cd 1-Authentication\2-sign-in-b2c - npm install -``` - -### Step 3: Register the sample application(s) in your tenant - -> :warning: This sample comes with a pre-registered application for demo purposes. If you would like to use your own **Azure AD B2C** tenant and application, follow the steps below to register and configure the application on **Azure portal**. Otherwise, continue with the steps for [Running the sample](#step-4-running-the-sample). - -* follow the steps below for manually register your apps - -#### Choose the Azure AD B2C tenant where you want to create your applications - -To manually register the apps, as a first step you'll need to: - -1. Sign in to the [Azure portal](https://portal.azure.com). -1. If your account is present in more than one Azure AD B2C tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired Azure AD B2C tenant. - -#### Create User Flows and Custom Policies - -Please refer to: [Tutorial: Create userflows in Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-create-user-flows) - -> :warning: This sample requires B2C user-flows to emit the **emails** claim in the ID token, which is used as **username** by MSAL. To do so, navigate to the [Azure portal](https://portal.azure.com) and locate the **Azure AD B2C** service. Then, navigate to the **User flows** blade. Select the **User Attributes** tab and make sure **Email Address** is checked. Then select the **Application Claims** tab and make sure **Email Addresses** is checked. -> -> You may want additional claims (such as **object ID** (*oid*) and etc.) to appear in the ID tokens obtained from Azure AD B2C user-flows. In that case, please refer to [User profile attributes](https://learn.microsoft.com/azure/active-directory-b2c/user-profile-attributes) to learn about how to configure your user-flows to emit those claims. - -#### Add External Identity Providers - -Please refer to: [Tutorial: Add identity providers to your applications in Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-add-identity-providers) - -#### Register the client app (ms-identity-javascript-c1s2) - -1. Navigate to the [Azure portal](https://portal.azure.com) and select the **Azure Active Directory B2C** service. -1. Select the **App Registrations** blade on the left, then select **New registration**. -1. In the **Register an application page** that appears, enter your application's registration information: - 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `ms-identity-javascript-c1s2`. - 1. Under **Supported account types**, select **Accounts in any identity provider or organizational directory (for authenticating users with user flows)** - 1. Select **Register** to create the application. -1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. -1. In the app's registration screen, select the **Authentication** blade to the left. -1. If you don't have a platform added, select **Add a platform** and select the **Single-page application** option. - 1. In the **Redirect URI** section enter the following redirect URIs: - 1. `http://localhost:6420` - 1. `http://localhost:6420/redirect` - 1. Click **Save** to save your changes. - -##### Configure the client app (ms-identity-javascript-c1s2) to use your app registration - -Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. - -> In the steps below, "ClientID" is the same as "Application ID" or "AppId". - -1. Open the `App\authConfig.js` file. -1. Find the key `clientId` and replace the existing value with the application ID (clientId) of `ms-identity-javascript-c1s2` app copied from the Azure portal. - -To setup your B2C user-flows, do the following: - -1. Find the key `names` and populate it with your policy names e.g. `signUpSignIn`. -1. Find the key `authorities` and populate it with your policy authority strings e.g. `https://.b2clogin.com/.onmicrosoft.com/b2c_1_susi`. -1. Find the key `authorityDomain` and populate it with the domain portion of your authority string e.g. `.b2clogin.com`. - - -### Step 4: Running the sample - -```console - cd 1-Authentication\2-sign-in-b2c - npm start -``` - -## Explore the sample - -1. Open your browser and navigate to `http://localhost:6420`. -1. Click on the **sign-in** button on the top right corner. - -![Screenshot](./ReadmeFiles/screenshot.png) - -> :information_source: Did the sample not work for you as expected? Then please reach out to us using the [GitHub Issues](../../../../issues) page. - -> :information_source: if you believe your issue is with the B2C service itself rather than with the sample, please file a support ticket with the B2C team by following the instructions [here](https://docs.microsoft.com/azure/active-directory-b2c/support-options). - -## We'd love your feedback! - -Were we successful in addressing your learning objective? Consider taking a moment to [share your experience with us](Enter_Survey_Form_Link). - -## Troubleshooting - -
- Expand for troubleshooting info - -Use [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) to get support from the community. Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. -Make sure that your questions or comments are tagged with [`azure-active-directory` `react` `ms-identity` `adal` `msal`]. - -To provide feedback on or suggest features for Azure Active Directory, visit [User Voice page](https://feedback.azure.com/d365community/forum/79b1327d-d925-ec11-b6e6-000d3a4f06a4). -
- -## About the code - -### Sign-in - -MSAL.js provides 3 login APIs: `loginPopup()`, `loginRedirect()` and `ssoSilent()`: - -```javascript - myMSALObj.loginPopup(loginRequest) - .then((response) => { - // your logic - }) - .catch(error => { - console.error(error); - }); -``` - -To use the redirect flow, you must register a handler for redirect promise. **MSAL.js** provides `handleRedirectPromise()` API: - -```javascript - myMSALObj.handleRedirectPromise() - .then((response) => { - // your logic - }) - .catch(err => { - console.error(err); - }); - - myMSALObj.loginRedirect(loginRequest); -``` - -The recommended pattern is that you fallback to an **interactive method** should the silent SSO fails. - -```javascript - - const silentRequest = { - scopes: ["openid", "profile"], - loginHint: "example@domain.net" - }; - - myMSALObj.ssoSilent(silentRequest) - .then((response) => { - // your logic - }).catch(error => { - console.error("Silent Error: " + error); - if (error instanceof msal.InteractionRequiredAuthError) { - myMSALObj.loginRedirect(loginRequest); - } - }); -``` - -You can pass custom query string parameters to your sign-in request, using the `extraQueryParameters` property. For instance, in order to customize your B2C user interface, you can: - -```javascript - const loginRequest = { - scopes: ["openid", "profile"], - extraQueryParameters: { campaignId: 'hawaii', ui_locales: 'es' } - }; - - myMSALObj.loginRedirect(loginRequest); -``` - -See here for more: [Customize the user interface of your application in Azure AD B2C](https://docs.microsoft.com/azure/active-directory-b2c/custom-policy-ui-customization) - -You can get all the active accounts of a signed-in user with the get `getAllAccounts()` API. If you know the **home ID** of an account, you can select it by: - -```javascript - myMSALObj.getAccountByHomeId(homeId); -``` - -> :warning: MSAL.js also provides a `getAccountByUsername()` API, which is not recommended with B2C as the B2C server may not return a username and as such, **home ID** is a more robust identifier to select an account. - -### Sign-out - -The application redirects the user to the **Microsoft identity platform** logout endpoint to sign out. This endpoint clears the user's session from the browser. If your app did not go to the logout endpoint, the user may re-authenticate to your app without entering their credentials again, because they would have a valid single sign-in session with the **Microsoft identity platform** endpoint. See for more: [Send a sign-out request](https://docs.microsoft.com/azure/active-directory/develop/v2-protocols-oidc#send-a-sign-out-request). - -The sign-out clears the user's single sign-on session with **Azure AD B2C**, but it might not sign the user out of their **social identity provider** session. If the user selects the same identity provider during a subsequent sign-in, they might re-authenticate without entering their credentials. Here the assumption is that, if a user wants to sign out of the application, it doesn't necessarily mean they want to sign out of their social account (e.g. Facebook) itself. - -### ID Token validation - -A single-page application does not benefit from validating ID tokens, since the application runs without a back-end and as such, attackers can intercept and edit the keys used for validation of the token. - -### Events API - -Using the event API, you can register an event callback that will do something when an event is emitted. When registering an event callback in a react component you will need to make sure you do 2 things. - -1. The callback is registered only once -1. The callback is unregistered before the component unmounts. - -Here, we use the event API when integrating the B2C user-flows (discussed below). - -### Integrating user-flows - -* **Sign-up/sign-in** - -This user-flow allows your users to sign-in to your application if the user has an account already, or sign-up for an account if not. This is the default user-flow that we pass during the initialization of MSAL instance. - -* **Password reset** - -When a user clicks on the **forgot your password?** link during sign-in, **Azure AD B2C** will throw an error. To initiate the password reset user-flow, you need to catch this error and handle it by sending another login request with the corresponding password reset authority string. - -```javascript - myMSALObj.loginPopup(loginRequest) - .then(handleResponse) - .catch(error => { - console.error(error); - - if (error.errorMessage) { - if (error.errorMessage.indexOf("AADB2C90118") > -1) { - myMSALObj.loginPopup(b2cPolicies.authorities.forgotPassword) - .then(response => { - console.log(response); - window.alert("Password has been reset successfully. \nPlease sign-in with your new password."); - }) - } - } - }); -``` - -In case if you are using redirect flow, you should catch the error inside `handleRedirectPromise()`: - -```javascript - myMSALObj.handleRedirectPromise() - .then(handleResponse) - .catch(error => { - console.error(error); - - if (error.errorMessage.indexOf("AADB2C90118") > -1) { - try { - myMSALObj.loginRedirect(b2cPolicies.authorities.forgotPassword); - } catch(err) { - console.log(err); - } - } - }); -``` - -Then, in `addEventCallback()`: - -```javascript - if (event.payload.idTokenClaims['tfp'] === b2cPolicies.names.forgotPassword) { - let signUpSignInFlowRequest = { - authority: b2cPolicies.authorities.signUpSignIn.authority, - }; - myMSALObj.loginPopup(signUpSignInFlowRequest) - .then(handleResponse) - .catch((error) => { - console.log(error) - }) - } -``` - -* **Edit Profile** - -When a user selects the **Edit Profile** button on the navigation bar, we simply initiate a sign-in flow. Like password reset, edit profile user-flow requires users to sign-out and sign-in again. - -```javascript - /** - * For the purpose of setting an active account for UI update, we want to consider only the auth - * response resulting from SUSI flow. "tfp" claim in the id token tells us the policy (NOTE: legacy - * policies may use "acr" instead of "tfp"). To learn more about B2C tokens, visit: - * https://docs.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview - */ - - if (event.payload.idTokenClaims['tfp'] === b2cPolicies.names.editProfile) { - const originalSignInAccount = myMSALObj - .getAllAccounts() - .find( - (account) => - account.idTokenClaims.oid === event.payload.idTokenClaims.oid && - account.idTokenClaims.sub === event.payload.idTokenClaims.sub && - account.idTokenClaims['tfp'] === b2cPolicies.names.signUpSignIn - ); - - let signUpSignInFlowRequest = { - authority: b2cPolicies.authorities.signUpSignIn.authority, - account: originalSignInAccount, - }; - - // silently login again with the signUpSignIn policy - myMSALObj.ssoSilent(signUpSignInFlowRequest).catch((error) => { - console.log(error); - if (error instanceof msal.InteractionRequiredAuthError) { - myMSALObj.loginPopup({ - ...signUpSignInFlowRequest, - }); - } - }); - } -``` - -## Next Steps - -Learn how to: - -* [Vanilla JavaScript single-page application (SPA) using MSAL.js to authorize users for calling a protected web API on Azure AD B2C](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/tree/main/3-Authorization-II/2-call-api-b2c) -* [JavaScript single-page application calling Microsoft Graph with delegated permissions to manage Azure AD B2C user accounts](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/tree/main/2-Authorization-I/2-call-graph-b2c) - -## Contributing - -If you'd like to contribute to this sample, see [CONTRIBUTING.MD](/CONTRIBUTING.md). - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - -## Learn More - -* [What is Azure Active Directory B2C?](https://docs.microsoft.com/azure/active-directory-b2c/overview) -* [Application types that can be used in Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/application-types) -* [Recommendations and best practices for Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/best-practices) -* [Azure AD B2C session](https://docs.microsoft.com/azure/active-directory-b2c/session-overview) -* [Building Zero Trust ready apps](https://aka.ms/ztdevsession) -* [Initialize client applications using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-initializing-client-applications) -* [Single sign-on with MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso) -* [Handle MSAL.js exceptions and errors](https://docs.microsoft.com/azure/active-directory/develop/msal-handling-exceptions?tabs=javascript) -* [Logging in MSAL.js applications](https://docs.microsoft.com/azure/active-directory/develop/msal-logging?tabs=javascript) -* [Pass custom state in authentication requests using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-pass-custom-state-authentication-request) -* [Prompt behavior in MSAL.js interactive requests](https://docs.microsoft.com/azure/active-directory/develop/msal-js-prompt-behavior) -* [Use MSAL.js to work with Azure AD B2C](https://docs.microsoft.com/azure/active-directory/develop/msal-b2c-overview) \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/ReadmeFiles/screenshot.png b/1-Authentication/2-sign-in-b2c/ReadmeFiles/screenshot.png deleted file mode 100644 index 292d32cd367846e6632e4427146c5d383b700c56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32616 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

#b;ft0_oXOdo>nfP`665jJWJh{# z(#Hzu=ARUQ&fYZIZCAn8-JJ~HI+WVbQn4IKnjrD2-$nE-9Fd>D7oVc-E)yk<=6{okav7MgwLy=EX{P*l*`cpnc*B57Uoyzu!)uG$g0GZ4|a6_S6{wlIk z+j#{os>>B8Dy{K)9`Pb3Uqfj$Btt$n5%QFidjeiY|JKZ-N;i`TXn35Ii06WfK&SBs zd%o$_3Q;GoeeSXHNoJO*4rBgkCftA*=yT6ogs%U+ukB zP+Z~L?HSx5xI=KKkpRKngS)#!1C4udx1hl#0fM``G#1?5-Jx+i{Lj=kRdX>_-^{s~ znySsjmfd_^IZm-=wrrF1>(pMn!P1EGzK`&t{)xv6=cFtWD@pqaA+ z2y^E~P7ag)#N3JGQ-)%u)4-_WT|}IX>e}qlwwOewp_01!qH2ckbyvA)nq4J3I{Ue5 zRW#sRE=gHFV}(dH=Q+VwsF_{L1^KXFA(f-Tf0thHM!EF z&yJGWb?RgW#xHy_n1vJ(Am-4 zyJ_%b>t+{#u6mQ~OU(ln=g595pwx|x#w9Wm!phG5}_0V#z z8+S@0#b@a~-j6_S3x`F5u=L11LUG8^gG5C;z%ZQ3tMY|jui&$$qITe_1@VWV-;J`6 zOs`jj)5|&@NFnXtJlxFvfg?zkOx1;U6wyp(P}40k!r~K`V@BeO6eq?vn~Rz|Os^8K z93u_YA70-ahml6HniXsh>f+8WwV0-)KTOy3eTR_YFsY&qX_GuoT=d~qe8pkPr4gSK z(K=My6?v@v)9|F$aBz$j)*y;dU-Q`qmnq07Pk%lHB(rB9a|7k;Bj+!-+>xW<$Ct4j0PIyQ8jizuy% zX7zW-rcF8VPoH6k_yxr`inefpAM83Di{zhG>~;NUm=&|+*;s|@-WfxW_OSc=`N!SZ zF{%fTgNc?j&KCEWlF3#8LX!EWG|EL1n(ge%_oTR%8ih5{V<-!bg7YKhESHBZXhLKh z(q+q1cOCia6}9PKZ6oJnhXy@!zS7C9xBb9g<|N@hZ7mWnL?#!~6qS&84HaqMqsIA|Xcx`xFe z0nCiYEX+La1lFewA}%msq0UsLX&P&L*~FO?g>eoT zqRZ9Q?{G%f|HJ%mEmcYrpZ@x`A(kLsqfIDSL9f6tn~#710(+?#h_?qa>)iyFXjH&o zyXnPyzlo%V^|5s>I;d9|kZ02wNYz!k?KP@~IEv5l#VR+cxb!z<1_R_uHJ3NGjzhBu zXL!A-K^quiqu^WR4sR>*JLK=J80mi372w}ikkYdKNjb`QmAdy_^LUgcM+OcO2+Nw&fF@&Oi@;s3^cM!@UWMIN}GwAx}6{? zsU{%YHa-@^CrGs6IA63d?BUcJy*!ti2lav=fyFA!1FHG=_tJ#H0pTwVSwt2xR9ZEI7g3-yxnG>3k z$oebXY)E(lhb$)3gNzbv8oD$9({ha`f~=HnR)Q5shSr*Q-ac27Ij!=agv~pq{T9su z{_Ce~Z;YNty(Z_gCp3G5Z^&!#ETO~f5BJSP1=Y1iN?%{w$;V;!NdLTNl$C)^`l~XX zZophwUEV19;P?wpzeyWoN1Qts$Oo)vDj;Umdh2k$zpFEd$pq->>5Xug>l^sbtF~L* z)Y-S6^HjSIj;^XhY`NS1(jAV{NT9onCx5ZUhYlF>{KZj<{B*URjE;;@h0TX(5GVFq zwHXR}Zu_T=)5pZsF_rI-E>rL56zL7)>!B*;-%cj#W$T~Tc>?-Z`Mp#+M1F9OZ0(IY zX$O@|abi!?oc?xB^fcr6QY|O0ejN~&);KG(pWipLgHUsI$u8i19;v_dY9T>2p6v^( z)O4`e>W^V~ZGoeUWXp=V!;QV9Bh8(M)tUK6!EMjxvW|I zoG?xfPxwAPzPIRij7NFPkih;2!`MHJX0&PR>FjwZl_xF644hJTZ^G6tHTjh7Y03RX zPxra?Kj4;d|CwH5Hz4h?8_5sjrkL(*v_lTNT+O%3Wc})yJt_E;4?+Q_G?R~)E8aCE zD>!CJb?YC-t8)G*q68gMccH}&+wG>ELsnjk@J=fO9I_>+u~gSv^ZmP>Ce@Q;bp|P^ zyJTsj*uRz}-TT^n(i$e}PdYOXrag!A+Aewx`(P8NXedt`#2*1eva`0gaE-#rHXo<7 zqXWl8ekFf_H9?XY#qg14b^_rNT=*)VkQl<(8tX%P5{yRc8O6Mr6Kdfy=ZXkUqK4Wb z{H1;D39nV3gsr0Ko!XjI@mo9nJA z;V7I7*i|I{F)fkZN6P-eAE$96damd{!X^2W!e+ygEB*3s@?$Ofu)9KUO4BtY2^p`r zW7180cS0V+@U8JwALTSnCg{luXZ~bXO*r8IJt$c<9*G&o6!w?!)WznL|(n<-mviTC1FU%#zi|6q4I&K8sFIs6|=X-70GLv;#?OxN$~y0=t3 zZy#}7t+k<2P8tWASU7vJ0D%jfFd1L}g})-8Z^aJ7;NNc~{yoa~V2J1uJT6fGqkE_| zhY%hoTr)A$GuDS9o%SAN*zs&U)XbpV6wEqFq0yIWt=tI>{nEaeJB z9-D2kQIDxW#S$%uHjG%X1D}K-4CfBy;fL>&Wp+HD6Iw~OcM1~)zl0X5Q%`)-G80%2 z5fp8NTyzQI;adgw^kF;314OeYQVS)YCzQ+V6}1~KvX_h-WPi+qVNG`|^!viYQ`u>W z=6rnPZPbcQrw^<0i%1-6D3X+V@wZMVAf@hyt}I2SM+dT3l1Wkob(f{dEtHOr$JW|y zw54;U;T_RhJsW~#w9z~Q2K7x8^X8#tnPnZ}|GC}Em2SI4l)p*^;j(X?fT|QEYrUuUDS2sR0%bXp~O#0dhY$i=jj9GF}@)YdbgIy6)J2<)`I>_2AJU);BTFq!M04N`A1t6hkGKu;ZrxlZl+!V zCL;bfU2%Q$>T;j>$KJ1eoeds?yDA|Q%>1o}2Jwi~T*}xOy*Xq(sRqK~FYqtUX4(7+ zZ?x-vfbT2lXqy_8LE2#zIMS zcJ4d^mu|fqU}3pCoIDwI8nh}25>;S%>j5RR>JZ-YfA70&FiWIX;I&WxiScnJ6FZX{ ztD&MTi}@pc-rKTS*nxkkfL|gQ{Qcv7&^55JMe_tx)KnSC+;u9J9YRk22#DruLWjW@ z=vSIS2TuFt4VwsDWSp$2;?J>)uqMmzPdgNh%| z)Zs=qo?*d;^E-s0T~le!yGY{i%dd}xjkt>3V4$yQSf#*8R~qSK^?oh;FDt}VBK&{a zAO8!P*8f_?|6hk<|3CYJ3F_XoY27yWD*)e z*w8n1--YYuLAUJ3IXrcrJJsZYmgRMJ_*fUw8BHeWL)CkH_)eGgYZ}W8U4sAV%|-L} zBzh0OkHn9>EsR#OY*Q|)@ZJ$9TU9W*r+knVzpDQ!n-!4y63xHb$u4Q$n*I6c@ZE@y zvq{)Ce);V1dBL7QhsbY!)dTXXqc6FjyRqF;c+o|1z0X}w$}u-}@Y$Pm&L_Z>{1LxH zcL6?D^Hs8v|30-)?4vQ2BYZx<`(@2n8sk;(jXUuE@Hp~9v3U?bPV|wGj=f1iwBmh2 z0ii$s{Vv$}52vh{nFs>G{#Nlq-r=TM}E4~e1>(UC&I61FCue=0OuctQa}9))4^2i z_ED&knWVn``ph%|qn!7Lt!E-cfkTLwNbgR($GR zhJ^#-kcW`U%XSVQ5zezdad$dFCh1yY@Zx~QcbmOX66PgArmPEWZeZP2Z=l$|zE>h` zWF~5C-;zV|7HK*ZnXUN=vHgZK`I5`;5Y}C8ya}VgSGo&Izb)v?q*t!%CBIdFvUqid zc8k?-Bm!@n}1_MK6uAL&GQvtiO( zz9Q0*hkP-5BT<%jeqR+zS2Yif&)TS{sx;m(gQ{S_L6{bQLL)^^9K{@e*%bSDS)Ugfi$J3`zYq4nJBf4o}Q0vIUT-X zX9(kz(mANjpgW3neZC-zmHS>6HIv`BDT!EKu8*H{5W2vvb0?U;C;_#H=O*j_a6QZA zgY=JJNX&Gq?Ow59&v;{=&zBN}W7Enf>`psx;GK){H;rZBcgGT7t+ZGNN?#E$bEpBe z2)@bM-}4c5Iq_HSa)X7$4Sy?{itO$%H4`Ng4foxdcumTB?y|&vjcW?sSdP{iZQ9xG zQ^xt1W&o7@p>;p8lg|sMT8bMR5NS4ONa1#^MZoKc8YhSxt`#+l_&rnKr|W0{?lciw z!#%)An=04zWX@{n7xyR489jY|@}S?cV$PRwxL)?fHO4nye>0(FP6`#Trxw}Fgxqt! zvG9D8OzfG6$~&UE9NiyfYkSOBU;n-gNm=1PFzKJ=^0d23XdRDsp=+e{S^lTpRHG63ci~i@x5Lpm~AM%n8wK|CaX;9O`y_w`B)Wbe=lzPq`%3StqW{u~l zPzd46MMw#8sv#f4pZL zCQDZE`b<-z02`fHJbB0;5y{;oFCl>rD3tm0zHBE!WJ@h5TD7Ns)-3O{&)|3VR%Eu5od=KNP41;f8 zJTGhBr&%0uE8|(x&GNKMz~e)>${az~6-s2a1D3%vX+!#C04^{KMJ(Cz%TF6z>;B=L z!30VJ%jcG1qQEoJg#;G1*nU#XS42_#bxJlrj`o%s1Q)II?#PubdPBBMypZ$tZ^1H6 zvogo|(!Ph{S*a*~VGvp8ok_0{uweI7%0gn5x%=6JrmDqwlx^(sh}VR_RBOE>lDj^t zB>V+pOs)^ILf7dJ=wr{>5R>KfsdNq-&h6c-G+uel-yh7FL^wp~wV3j>3L( z-t+kJzU@()D~GBlL}3?Ll%}kZfJ$GP{U?HxdHAh=EhsWM#a~{`cgv)CwjLA&RZntE z&r$^=WK)p{fBLJ>I8JOXv}8K%Z@cX>Y9dPSEA;$M5oK$m6Te&Kb-JHsZ*TWP_90JC z7?}9MW{34#5idU2=b~p01S6kj4S9!gy9%u&HmH0{|&YbG@NVRcAK@X8^oxtCq7 z6OF;Os``1JnBZL2ph_4Xzbi}T{VGyjK(G`2hMS~&te65+UTP;!!d;;qWKjFw z^*sZ>W%kNExk>T#!gD(Mj442x0$^DX#Ob#zV)$_yz zy))VcgVNb$!_s~=faI4vUU=0G7RYoBRG!397>;o+6f4#t7YQWTUN^p7dM?>@?9I~P z$GpIc_-AvvLI+u9{iodtgV9$plq(qAaXK&bPa7|Uc%tBghom{!i5H62HQs+7u5!s~ zFd!@L_I0#yo)XiJZJtFx!XRAfgMv`v-q{Ya$A|o_vs)l*iQ4Ipn;A-=!WILN^tN;9 zIUR=*%k3*toe;;N@HlQA4Lf{$0uw)S6iw0+K5rBGXJ2v#jSEZGx(2FlfGT{P;ZX1^ z26~e26DrjG&ssCO@!W~k0tn-|!Y_J-C0TdnZjg!NRubl3`R48UfBb-^Nm#APUEOFP zLH2rdpr?8b3AQ#~Mn?iuh{*ko z%0kK)S@*b3{r*nKb`P)2hvIZa%XWj6z?b5uJ91~%J>6F8^*hML*O$+O^1V&3P#7w6 z4qE(}c_?)r|JO~52>3S=LL-79*&8NG)$+4x{J$Om{>G5x7W%R)N%SrpQz6g<19Ccx z-eiG*+~JL?=f2Sx&x|lwg;Gq>Yk#4kzuH^vyGq?MJ2LD&`rVcMjZ2*hyvBl3y|+ue z`Sg)}+D43;tBmulgi}^lMD+9_G&n{TKj-68&Q~TvJ((rN*!}W?*1_j}zE!O9 ztXyq^l6==5=Pv9x55JZaZN3g4tHQkr$M;e#!L-8vXcwdVjx!*Klae$k=t@6>ci>7m zRUN?-26-hU5BSvTam@4JzvH6Lh#R3}G$#>$p_nJrP`k+G&Wzqs@AzY&gJ?@zf^W85 z2lF29exP1lb>nJ+z159fUr7g_#^q1IFjfQH z`qETf?B|$XHHMozZquC!;cc5z)e;Q`Quwc@vC?=;TH|9<3sc3)`aqfML)Jo#3Bu*C zKvJF1iYC$&92e3Vup@$RU7iS7eduRXNeD3DnQd$T30W9jzt~Oq8wZBNNbJ;IcJ<83 z)y)3$hbMTTA*Il1y^Mnq|Gwwpyf82I+v%e7L(1QXqT5lkrzSyXIxz0zo@KAFA9^xN zmPV#w&{v(CFA5p;^qTdbpm(W{++8s6NH8Qj_;8(FAC1drbhE|Tt-9@hSFE8npwLKe zY++l#3N$f!+3+BQPlpjq$uL5V>b?Y5F)&v-G}@|cmS%d>x= z{7{f?gYDLIvU_^RJKRg%uEbr;8zQqhvX0u}*71HE*NwkuEoDRE%RZlP(`C@zI!rX} zc9<1ZJy02%Kis3&>+j+u=Z&({he@A73-v9sukwtwwTT=)O#oMgHkkN49F|`9K72}uPf+d|Lz~LiGsi$(562XvbRL>J=aAiE}%k-U&wKsB*-BS zzO;?F$aKN1#dh5wv{5)qG+&NOxqk;|xv3#HKJHvMDhXs(B_Yfg=oPJKyT(s<*L!F% zMX$!b&{kb$PpF5{z&|nFTE%)41RC=;8(J{R_pf5Oyt}RsKZQ+PU5VqymIV9B02`wX|AN zdIJ%q&W=;I96N%wYP~Go%ft1;>`OH21Qg$vaibMSQC%?~OthuH3;mI9kb|pM1^%uY zZO(5)FxAyInFSajs#F1oxd5nC%XdMnM!f1(+Q_4=3xn&@$ET(n46`-v7GqW4u(L5) z^yd5K24Jf1_QNL*+xa{QWJh>J1bG4X&z8-amOjleG`gt46j}`Ga<8a@-uBZY@ndJf zV@kftZBlNl8&}xlT`5TlrtlceQR#vke^12hEg-~Pyb`y;0p<{Eqb(?jVNA?omH;(Xz^nZ?W%xLIy z+X$lnNs~_@sVa628T!RV%CXNF;`@t+g=k{C4p2-fUNcgXM1DBACBG^U+07s4LAy2| zjj0DEB?vdg01&n-gPA_Y0|3>>aU$Q=@Ja=u!o%@Q&)o7XqEp$(h(mvc3)vU>`Ct&Z zYo_YB_eI9Va453kQ^hZ~b*TORJ0e#5B3D!OY0%+(>PHih}We+_r~8E$P4F2|Lp12vzZ=e zsCa2ehBR6n9xjcFhq@L^A@5Tt5vN}=SBSu9`Tgmf>Nx%g0`Jv@4B=}gM#U22-_Z#a zeRv!#0J-XShm2x4y-#8>>$VZz->>)Q`$Xm@+(=E8|4pE?ac9HC~Q?7ub)c;sqHSL(yDn>u+2EVEd_v@o}Q7y|YOTqxBzVD`^f zqlg#oOwNNso4tf!ed4|W4N0ag%OcA2t=Qc9oclLcVxK`+bwm~P3xBbX@kV0X;fV7b zy#OTq_n$engur=Teaf20MN*?xQ$wDpbi33$M@LZc_rz)|sX&mK#uo#S`LGf4FSXKC z{O}(c)@L4M$2b8zr3JdzcXqg9*XJDUzJ|b$8#NV(-Sm`Xp)R(&QnCtn z#5~?;ZQi{eEH(@|@4Goo0JgsQ^6XcvN30Z^U4CEtzGP2tP)n1M2KWK(=3OW^tEiv2 zP5OLS*mrq8l+DRc1bLHW%~2sgpTU%Ne$-%yc`U~Q?W6YRi5hKBV{ET!8Y0}y zt_a7(ec=81Nbc5}1GKIt(~qCAx&`ics1clH5(TXC!;`JfjP~g@pXe?G`{o9ZM>gRB zju;iV(?PR`5HBY4@pR&|6)uq}4m1@3Hl9`tVCc>b`Urt4oD$jgBm)zpJ9z|%eD716 z%)jK!;;WmdeDzM~hju+RPXU3r3L%RRgBJVlh!(*{>;sA3J=q-iZb$_W#v+S^7qmHA zv#~Ys21md08=Fi>s0gjA*@6KX<2d^ez8B`TxM?tK82`^o6r5F(nd{B>^eHQ1Fe`CX z6dbfl&7;$-LMMv!9vG}QE)9$u{0ynAt;~sIIC`CGDO)YaANpP41MT715=EQHR7G+{ zHApTMHm`Pdy>5|}zKT3G<-DAvdGU~%Xm+DT?e|3Da?##jy$pPC+ayuX1i>nuZ-7IW zjJA8WMHg9Y=K3_^Hq5skDmCb`#vpKU71n4ZzoLyi^rpm)uLlDwoGeDsNjk8p>Xe|X zc8A$~&XDxA7qL?ZZ=C6!Kg|vFLAK$?vp#kYmf|W*e@Hk%NdyUeXi6&g zXpEFeT}`J<@Se?osldoa8?}cUtzSWSe}e!hQk#n`n|JM)LqguHr8r}8rVY>ecA=0i zuhPEFEt-=rx7I0sRpxZQhOC^($rbUSO71M5>~H$Z)%&X&-^rK;#d8F#C%2i*ecA~5 z{hqcn_i+YQj?8L)!I)9f#kGc#^hCc4W+80ziS zVE{_@VO$>ku2tHfysq)V5$6^)?)>YcA1^pWBZs;aSdU^3xjEF#vsK@MnILBipIe~owxZXC zzvLQir{b8fQ_xmpKFyB@>pwE(0mICjAzyLY4uHKY2x-;!Z(>>PS2#)cr7lqj8TG^A z1~XPB7k`SI?^J;hGRNMnEQP5$70g{GRrsB@6w#O|f3?&vwi})VD>0&J88iuHPAoAG zrIbOb22vH^v8zppkVBTj&3XRDkJ@h?wv=~p!h_dvH%{7jxt#KiRP)DCySQcBbt40b zeOC-w1upmE=jApDtRBwhiswOfoKkt0&AcTld;pM!O)M0yLCs_R4k6RP0RCgGm4rwU z^iZl)T(&lqT(WiCGR;k%Q(=|L^&?*iZG}VT{^m=eJV?mk$BkB>v+)VT^E0WwxmwHU zn(0z6Xi?xN^wOsu-oPTza9k>}RW|Hul#qxaF9e#V-clvp7@GHR#2jY%0Ny-J3Jb&7 z(a-OCEwKT?s4I7&*E5L{rlI#XA);Y*cHU};Vt?`G3PU6ztonr4EIFOs9Xjt z12b7~+oB7mY$r>(*)z+lrkwpEQXCG?nhzq9VCIbz5-p5U`WzTW01J5SWIdSHGjft@iTl?WYtj*1)kfnN!#dYGvrmUPoTp z+qau}oVHGqoS!fkZS~->s=Zj&-};C&Ny01}+qxRWka7`dT+=1J>cS6Z?wUeW>Jm-k z((ZK{Qq5w+q4)+_%Zn~(@o$?KwP7`FLi1s~3+>`Xn;)#XuAksduQC)a{n^m|jQXRy zb-LXuhAaBP=NnA`*o}J`Pc!v4geYP$U6vbqR);vS#^HzH*c+%mEpC>|%XrnWovbw| z(J@N_9%x8Vu4>pM>DEs|SHF5c{C0;7wF~-gZUeiz2L|=#fQ2=3d5Sw*-?E3{*{m_> zrF#JK77+4j@{TsYxFfqNV^bY`iJ`lz2ZgeP+2E-#S6SgFYxTpmjvpvkwolAbJEDbC zbzX1}t^WFhnqFOg2QiTiy>uo|?6fVI>UPP{oT(QQ6gMQWMUIhlclqRrY_x+S1!{5S zg@k`!u?%|JlX_{^g&c)3nmh)7w5!mFH&aisyj5LInu~RQ zwK=t5J?5Oo*si3dX2!By;;C1Y-8F+9bw`r16vpuKqzlf4HCTG7opPJpi0*b-V3Uya zwt2p+YdhHdsUBX}#$(cxgHU4BlD7)!A8A=ab-edgcA0(rEryky`HHy>d;Y81c#qpW zQa`LfGGnWjId$AN^>xUZZ3sl0d*w5ovUWJQ2mKzO+d0VKC4M4n39C3@3 zr#f+T61JR~#L5%FPH)P_Z8av`Edx(H$eVx(RNPj7jFph523X-ZUBy9V&%4{rj&<~G=7^J5TQSwV2-U1Sa=&p;)aZn{(5Q>PEfFoBhX@2YeP#eq}i z#Iv1j`yA~8R12`5R`S{3Z>md63-a#8kTY?Pv{Ervvf=%CJ_jr4?~q4*y!-^WqB zQgVttbwj<0ofR31VV#^4C^T%G;5TLf{9H&bB&t8ea5`#)AZebiGG8dZ@OJpF!2@~n zMs{~Rfty$)_?>XGLpNR!k>=8*afeT%InQEH;EqC`f??jJ^qsT|Z*H<^=#J+QJ5>13~$AxKhU?rKA&*f=#p}Eh}-BQ&~&6=MOEN1C@J_;wS2Uoi_@S;a}#C zsnzC)-cSy&xeNTsyxg{?FjCIp(qJBH3!`NV^@kQ3=Ink%anw1~$seyy7Nu3UDFoWB z;8nYYlFQlmo}*oHUhD)g-OjLoPfC&IL<3uBl_h>#`!|6(6vaJj^=}H15(_wL2FqWl z_0z0vGC3!0ytMDNw~QW}prSot)Cn0&{lT5C1EW~YS4VJ zyrOG!3*f+}=GUIVO71EhU*Z>7c?%dX5ehkjXeK5kr%>uiZeFyxxz2>7&}lhrqtSsL5j zX&7hM#9WmXwr5FcQkOpG?dy6;yAHH$!J=)~T50@%kmwP6p~v@1xvenYF%!f`*em>D z(o7w5rkwVok~}1aUE`q80R^-yhHgF<_LF;OT(T{q81M}pP2Q1&=jhKVmcWaD<$kN3 z_22GR`@Z5uEGcI$e)4^S-Sv>Q0%xMp>}4&egmR(Y97`E+##fG;OU8qcHs{cKiRL8Q z3|khz2QWgRd*be0ad+D*RY!Yz6m%+3HaXkQ2Zn5aztCg`yyuG6 zQ|aI_>w#?nZy3@3G3w$y;xuob4vU_&gZ6J#h+X?!L1Q)&8Sl-`CAbCg3L=X9zT12Q zK`O|F-;uS3&A5AkD`XVzhx)r>|7(rS>Y0~Xc0V3x*l_FNte=J1(fK+RKdhb}wZo2i z+@TdVTh|SV@?xPU%(Eq-tb^&7)>m*NKdouXW0B6px1m12t1ui`^qiqQ-YZya}_|0~pnw$#9z&`XP1O!L$EN6={D_p_|QQXepX}q-klRwnCEgf$riCyg( ziAHw%61B8+3|}g=if|P_H-IRX%&$vqFV(Dp>8wo(8i5CZ(M-!eie|+FD>xJZA6sj( zo^W?~b8GBM!i^Nqp((A)0y=G2=$QE4;9(fS7Frh9q_6L?xR+gcwEArSI`ZSJRvDK+ ze)fpss~X_feQYoT8GQ5%>|CQ}R)$d8T;qU}u0Aj1 zQuA>$D>)0(B6w>JQw;X2tqQms@slr`cX8V;;7gKDNU?nH@92#9Q+yg9L2ATBRGb^2 zPIxR(MVje;b-ZkOm700PlP3)J^vxfwM; zjmJ|0Yg8;Vr#Ej_XBi3E6JAxl!o|fAgoI3-;k^i;=wy_-NMZSE36L2Sk%@=Ph1Q$= zs>SQiNNL-Z`qC0&u9fxePLn%$wY}6&gm_2X5L8G;WN&ly6-g?d~!Zj)X z-3?!m^teS*PBzPY-zTAe4t4!=uNc<=GSxVk*&W_?+8L3a=tum^J=UEp(pCscNvrKZ7k*SDj2TAH;|6aBf>1}2edW{}c* z=xS+cJYn|Yhts79jX7%d@2SVa(Y2NY_Z;kH;){i<8F>5oaE`UE<7@SsRT4LBnp&Q>7kr%sRv&R*#5cb^ISTgMed+hp-WKp+F9tcn_Li{;0 zTx-11aro05wsh7u%%Tc;>p90w_z8rOkS`)>ex35VMD?L;jL^`q4(SPzqdN5sp=Dlr z$~oBkC*!!>SAbik+*Ha8)yf6Pn76k2lBC}5fp`+>2s)ub={{HTV*h8@t8!-3WONjGK%skvXDUwksey^S)!rj7twHlM^Onas;qJOnO(slkU|BO2ng(q^(F?KFv_S7^0YK509r zAx|YLWvr~Y513tzD&%TU`BEP?prI)rFymp`o#@!pEjuJlO(uuoDrS}Kve^HjQHm5o z(1l&0hbHoaPwwY#pAu*0W*Z)ha-qLt%wj#+((e(FYev|c*ZfGMeaM7=M`ZSil&#wE zlrb#hF?XR{ED-VU25GRI)pW0AZzVg=~~tl@%-W7__y6svU{S({4ocrhx-cV2c#E?`cB|zR>Jx+Wm*A$$s{Afy%wf68!ezQaaQr+rc z;Ew{N22Vi+7mavsg_`;9ukhBBuEbIM-+fi&gW*$B(3mMgbY$+$*% z4 zebH*Wr(S(3<*>~1jz$H2KTtSY^l6_dki&d#4}(AJOKQ3Oh#mOVuNNmFGT+1gx-QU; z>pv?&XCO8n3@Lq(yUQ*$pdB@(l`JZdOc);vfsoGUZ$j`&mg>3eai0oJgxsL7L?cHY z8>Hc(LAVl?kh^S7o9!dI;h+(knNcEXld1a(76}MaTce~eot|AYy!`gv!yeiGzJCx_7#Nf4pQU<1H__E zu$BMpfBJp?jK+76#8lp&y^1Tp6dxIH&a#9WTUN#f=i9c$LCY-@U%Zc#-s+5``}J?o z_dCbwj-+yt4_G)swlv6nX?9d)ulftnzP**&pen3p%SUIoD_Ifibwr1a9reqruk`OGrP>k=v5`%kmyFmJ z$rP(QdTV=t5DI{S8s{n!jI6&e`msdSaa zp6Uu^ zX-CJLAfp=Lq?x7-coz}CoXXWOKP2{~R)7ljMg~*R?jn)>dQIe?8yxG5!ln3Nz-(ti zG0a^!P6hnHow!(+tXIG=_?bME!+52&8~KLz^B=I|)5}ZXEV&Sx#5?7Gxo3TU2Yxt! z{~y55{@X#I|Nj|#|Bqqf{|x}#|E@uz+W)S>|5*b%_!nV-g)^@iXdsid diff --git a/1-Authentication/2-sign-in-b2c/ReadmeFiles/topology_b2c_signin.png b/1-Authentication/2-sign-in-b2c/ReadmeFiles/topology_b2c_signin.png deleted file mode 100644 index 6528b510c077cc881443bf9d315db96b0aa2df0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13723 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 diff --git a/1-Authentication/2-sign-in-b2c/package-lock.json b/1-Authentication/2-sign-in-b2c/package-lock.json deleted file mode 100644 index 5ea317d..0000000 --- a/1-Authentication/2-sign-in-b2c/package-lock.json +++ /dev/null @@ -1,9054 +0,0 @@ -{ - "name": "ms-identity-b2c-javascript-c1s2", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "ms-identity-b2c-javascript-c1s2", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "express": "^4.17.1", - "morgan": "^1.10.0" - }, - "devDependencies": { - "jest": "^27.0.6", - "nodemon": "^2.0.20", - "supertest": "^6.1.4" - } - }, - "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, - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", - "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/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==", - "dev": true - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.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, - "dependencies": { - "@babel/types": "^7.24.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, - "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, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "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, - "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, - "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, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" - }, - "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, - "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/highlight/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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.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-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-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-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.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz", - "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==", - "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/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", - "dev": true, - "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, - "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/traverse/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/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==", - "dev": true - }, - "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, - "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/@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/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.3.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz", - "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.3.1", - "jest-util": "^27.3.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz", - "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.3.1", - "@jest/reporters": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.3.0", - "jest-config": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-resolve-dependencies": "^27.3.1", - "jest-runner": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "jest-watcher": "^27.3.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/environment": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz", - "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz", - "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.3.1", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz", - "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.3.1", - "@jest/types": "^27.2.5", - "expect": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz", - "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.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/source-map": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", - "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "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.3.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz", - "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.3.1", - "@jest/types": "^27.2.5", - "@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.3.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz", - "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.3.1", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-runtime": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz", - "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.2.5", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.3.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "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/types": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", - "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", - "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/@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==", - "dev": true, - "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.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "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/@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/@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "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.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "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/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/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "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/node": { - "version": "16.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", - "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", - "dev": true - }, - "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/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/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==", - "dev": true - }, - "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.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true, - "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-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/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==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/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==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/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/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/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/babel-jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz", - "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==", - "dev": true, - "dependencies": { - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.2.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "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-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-istanbul/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/babel-plugin-jest-hoist": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", - "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", - "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-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.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", - "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^27.2.0", - "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/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "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/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/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "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/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==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "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/browserslist": { - "version": "4.17.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", - "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "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/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-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==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001280", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz", - "integrity": "sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "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/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/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/ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", - "dev": true - }, - "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==", - "dev": true - }, - "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/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/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-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/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/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "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=", - "dev": 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-disposition/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/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "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/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "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 - }, - "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/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/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/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/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/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "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/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "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/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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/diff-sequences": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", - "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "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/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/electron-to-chromium": { - "version": "1.3.895", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.895.tgz", - "integrity": "sha512-9Ww3fB8CWctjqHwkOt7DQbMZMpal2x2reod+/lU4b9axO1XJEDUpPMBxs7YnjLhhqpKXIIB5SRYN/B4K0QpvyQ==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": 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/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "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/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "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/expect": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz", - "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-regex-util": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/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/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "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/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==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/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/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=", - "dev": true - }, - "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==", - "dev": true - }, - "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/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "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==", - "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/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==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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/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": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", - "dev": true, - "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/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "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.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "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==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "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/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/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/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "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==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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-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/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==", - "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-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-agent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/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==", - "dev": 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==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/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==", - "dev": true - }, - "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/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/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "node_modules/import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "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/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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/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-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-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/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-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-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-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-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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/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": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.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-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-lib-source-maps/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/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==", - "dev": true - }, - "node_modules/istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz", - "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==", - "dev": true, - "dependencies": { - "@jest/core": "^27.3.1", - "import-local": "^3.0.2", - "jest-cli": "^27.3.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.3.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz", - "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "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.3.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz", - "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.3.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.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-config": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz", - "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.3.1", - "@jest/types": "^27.2.5", - "babel-jest": "^27.3.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.3.1", - "jest-environment-jsdom": "^27.3.1", - "jest-environment-node": "^27.3.1", - "jest-get-type": "^27.3.1", - "jest-jasmine2": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-runner": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "micromatch": "^4.0.4", - "pretty-format": "^27.3.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-diff": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", - "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", - "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", - "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.3.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz", - "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "jest-get-type": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz", - "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.3.1", - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.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.3.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz", - "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.3.1", - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", - "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz", - "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.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.3.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz", - "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.3.1", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.3.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz", - "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==", - "dev": true, - "dependencies": { - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz", - "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.3.1", - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz", - "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.2.5", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.3.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-mock": { - "version": "27.3.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz", - "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "@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.0.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", - "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz", - "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.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.3.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz", - "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz", - "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==", - "dev": true, - "dependencies": { - "@jest/console": "^27.3.1", - "@jest/environment": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.3.1", - "jest-environment-node": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-leak-detector": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.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-runtime": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz", - "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.3.1", - "@jest/environment": "^27.3.1", - "@jest/globals": "^27.3.1", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-mock": "^27.3.0", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.2.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-serializer": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", - "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz", - "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@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.3.1", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.3.1", - "jest-get-type": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-util": "^27.3.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.3.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/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz", - "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz", - "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.3.1", - "leven": "^3.1.0", - "pretty-format": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz", - "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.3.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "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/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/jest/node_modules/jest-cli": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz", - "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==", - "dev": true, - "dependencies": { - "@jest/core": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.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/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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/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/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "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/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.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/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/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "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/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/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "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/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-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/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/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nodemon/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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "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/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/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-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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/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/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/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/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/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=", - "dev": true, - "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==", - "dev": true - }, - "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/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "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/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/pretty-format": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", - "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "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/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/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/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/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "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==", - "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/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/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==", - "dev": true, - "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/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "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-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.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/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "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/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "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==", - "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/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "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==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "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/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "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/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.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "dev": true, - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/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/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/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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/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/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/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==", - "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/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-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/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "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-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/superagent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", - "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", - "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", - "dev": true, - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", - "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", - "readable-stream": "^3.6.0", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 7.0.0" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/superagent/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==", - "dev": true - }, - "node_modules/superagent/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/supertest": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.1.6.tgz", - "integrity": "sha512-0hACYGNJ8OHRg8CRITeZOdbjur7NLuNs0mBjVhdpxi7hP6t3QIbOzLON5RTUmZcy2I9riuII3+Pr2C7yztrIIg==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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-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/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/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/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/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/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/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/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "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/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/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==", - "dev": 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/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/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "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/v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "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/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/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==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "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/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/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-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/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "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.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "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/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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": "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" - } - } - }, - "dependencies": { - "@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.16.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", - "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", - "dev": true - }, - "@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "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-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - } - }, - "@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-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.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "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.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", - "dev": true, - "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" - } - }, - "@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" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.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==", - "dev": true, - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.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-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-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-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-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.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz", - "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@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" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@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 - }, - "@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" - } - }, - "@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.3.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz", - "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.3.1", - "jest-util": "^27.3.1", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz", - "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/reporters": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.3.0", - "jest-config": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-resolve-dependencies": "^27.3.1", - "jest-runner": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "jest-watcher": "^27.3.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz", - "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0" - } - }, - "@jest/fake-timers": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz", - "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.3.1", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1" - } - }, - "@jest/globals": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz", - "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/types": "^27.2.5", - "expect": "^27.3.1" - } - }, - "@jest/reporters": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz", - "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.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" - } - }, - "@jest/source-map": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", - "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz", - "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz", - "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==", - "dev": true, - "requires": { - "@jest/test-result": "^27.3.1", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-runtime": "^27.3.1" - } - }, - "@jest/transform": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz", - "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.2.5", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.3.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", - "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", - "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" - } - }, - "@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==", - "dev": true, - "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.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true - }, - "@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==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@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==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@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" - } - }, - "@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 - }, - "@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "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.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "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/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/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "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/node": { - "version": "16.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", - "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", - "dev": true - }, - "@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", - "dev": true - }, - "@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/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 - }, - "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==", - "dev": true - }, - "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.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true - }, - "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-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 - }, - "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==", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "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==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "babel-jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz", - "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==", - "dev": true, - "requires": { - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.2.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.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" - }, - "dependencies": { - "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" - } - } - } - }, - "babel-plugin-jest-hoist": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", - "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", - "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-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.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", - "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.2.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "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" - } - }, - "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 - }, - "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": { - "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" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "requires": { - "fill-range": "^7.1.1" - } - }, - "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 - }, - "browserslist": { - "version": "4.17.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", - "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "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-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==", - "dev": true - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001280", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz", - "integrity": "sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA==", - "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" - } - }, - "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 - }, - "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" - } - }, - "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", - "dev": true - }, - "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==", - "dev": 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" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "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-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 - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "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=", - "dev": 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" - }, - "dependencies": { - "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==" - } - } - }, - "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" - } - }, - "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" - }, - "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 - }, - "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" - } - }, - "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 - } - } - }, - "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" - } - }, - "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" - } - }, - "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 - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": 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==", - "dev": true - }, - "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 - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "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 - }, - "diff-sequences": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", - "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", - "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 - } - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.895", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.895.tgz", - "integrity": "sha512-9Ww3fB8CWctjqHwkOt7DQbMZMpal2x2reod+/lU4b9axO1XJEDUpPMBxs7YnjLhhqpKXIIB5SRYN/B4K0QpvyQ==", - "dev": true - }, - "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==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": 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" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "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 - }, - "expect": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz", - "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-regex-util": "^27.0.6" - }, - "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 - } - } - }, - "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": { - "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" - } - }, - "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==" - } - } - }, - "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=", - "dev": true - }, - "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==", - "dev": true - }, - "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" - } - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "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": { - "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" - } - } - } - }, - "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" - } - }, - "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": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "dev": true - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "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.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "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==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "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 - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "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" - } - }, - "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" - } - }, - "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 - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "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 - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "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-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "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" - } - }, - "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" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": 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==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "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 - }, - "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" - } - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "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 - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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==" - }, - "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-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-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "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 - }, - "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-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-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-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-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "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 - }, - "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": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.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" - } - }, - "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" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz", - "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==", - "dev": true, - "requires": { - "@jest/core": "^27.3.1", - "import-local": "^3.0.2", - "jest-cli": "^27.3.1" - }, - "dependencies": { - "jest-cli": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz", - "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==", - "dev": true, - "requires": { - "@jest/core": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } - } - } - }, - "jest-changed-files": { - "version": "27.3.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz", - "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz", - "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.3.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - } - }, - "jest-config": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz", - "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.3.1", - "@jest/types": "^27.2.5", - "babel-jest": "^27.3.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.3.1", - "jest-environment-jsdom": "^27.3.1", - "jest-environment-node": "^27.3.1", - "jest-get-type": "^27.3.1", - "jest-jasmine2": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-runner": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "micromatch": "^4.0.4", - "pretty-format": "^27.3.1" - } - }, - "jest-diff": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", - "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-docblock": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", - "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz", - "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "jest-get-type": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-environment-jsdom": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz", - "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz", - "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1" - } - }, - "jest-get-type": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", - "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", - "dev": true - }, - "jest-haste-map": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz", - "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@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.4", - "jest-regex-util": "^27.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz", - "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.3.1", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.3.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1", - "throat": "^6.0.1" - } - }, - "jest-leak-detector": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz", - "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==", - "dev": true, - "requires": { - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-matcher-utils": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz", - "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.3.1", - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-message-util": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz", - "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.2.5", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.3.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "27.3.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz", - "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@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.0.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", - "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", - "dev": true - }, - "jest-resolve": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz", - "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz", - "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.3.1" - } - }, - "jest-runner": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz", - "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/environment": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.3.1", - "jest-environment-node": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-leak-detector": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - } - }, - "jest-runtime": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz", - "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/environment": "^27.3.1", - "@jest/globals": "^27.3.1", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-mock": "^27.3.0", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.2.0" - } - }, - "jest-serializer": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", - "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz", - "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@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.3.1", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.3.1", - "jest-get-type": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-util": "^27.3.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.3.1", - "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true - } - } - }, - "jest-util": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz", - "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz", - "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.3.1", - "leven": "^3.1.0", - "pretty-format": "^27.3.1" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz", - "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==", - "dev": true, - "requires": { - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.3.1", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "requires": { - "@types/node": "*", - "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-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "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" - } - }, - "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 - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "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.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" - } - }, - "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" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "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" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "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 - }, - "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" - } - }, - "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==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "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==" - }, - "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-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.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" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "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 - }, - "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" - } - }, - "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-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" - }, - "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=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "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" - } - }, - "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 - }, - "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==" - }, - "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 - }, - "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=", - "dev": true - }, - "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==", - "dev": true - }, - "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=" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "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" - } - }, - "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 - }, - "pretty-format": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", - "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "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 - } - } - }, - "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" - } - }, - "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" - } - }, - "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 - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "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" - } - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "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" - } - }, - "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 - }, - "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==", - "dev": true, - "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" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "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" - } - }, - "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.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 - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "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==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "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" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": 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": { - "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" - } - } - } - }, - "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" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "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 - }, - "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.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "dev": true, - "requires": { - "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 - } - } - }, - "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 - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "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 - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "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==", - "dev": 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-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" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "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-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 - }, - "superagent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", - "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", - "dev": true, - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", - "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", - "readable-stream": "^3.6.0", - "semver": "^7.3.2" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true - } - } - }, - "supertest": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.1.6.tgz", - "integrity": "sha512-0hACYGNJ8OHRg8CRITeZOdbjur7NLuNs0mBjVhdpxi7hP6t3QIbOzLON5RTUmZcy2I9riuII3+Pr2C7yztrIIg==", - "dev": true, - "requires": { - "methods": "^1.1.2", - "superagent": "^6.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" - } - }, - "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" - } - }, - "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 - }, - "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" - } - }, - "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" - } - }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "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==" - }, - "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" - } - }, - "tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - } - }, - "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" - } - }, - "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" - } - }, - "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==", - "dev": 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" - } - }, - "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" - } - }, - "undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "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 - } - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "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" - } - }, - "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 - }, - "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-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" - } - }, - "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "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.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "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 - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "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" - } - }, - "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 - } - } -} diff --git a/1-Authentication/2-sign-in-b2c/package.json b/1-Authentication/2-sign-in-b2c/package.json deleted file mode 100644 index 6aad862..0000000 --- a/1-Authentication/2-sign-in-b2c/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "ms-identity-b2c-javascript-c1s2", - "version": "1.0.0", - "description": "Vanilla JavaScript single-page application (SPA) using MSAL.js to authenticate users against Azure AD B2C", - "main": "server.js", - "scripts": { - "start": "node server.js", - "dev": "nodemon server.js", - "test": "jest --forceExit" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Azure-Samples/ms-identity-javascript-tutorial.git" - }, - "keywords": [ - "javascript", - "msal", - "authorization code", - "authentication", - "microsoft", - "ms-identity", - "azure-ad-b2c", - "single-page app" - ], - "author": "derisen", - "license": "MIT", - "bugs": { - "url": "https://github.com/Azure-Samples/ms-identity-javascript-tutorial/issues" - }, - "homepage": "https://github.com/Azure-Samples/ms-identity-javascript-tutorial#readme", - "dependencies": { - "express": "^4.17.1", - "morgan": "^1.10.0" - }, - "devDependencies": { - "jest": "^27.0.6", - "nodemon": "^2.0.20", - "supertest": "^6.1.4" - } -} diff --git a/1-Authentication/2-sign-in-b2c/sample.test.js b/1-Authentication/2-sign-in-b2c/sample.test.js deleted file mode 100644 index 17bd598..0000000 --- a/1-Authentication/2-sign-in-b2c/sample.test.js +++ /dev/null @@ -1,68 +0,0 @@ -/** - * @jest-environment jsdom - */ - -const request = require('supertest'); -const path = require('path'); -const fs = require('fs'); - -const app = require('./server.js'); - -jest.dontMock('fs'); - -const html = fs.readFileSync(path.resolve(__dirname, './App/index.html'), 'utf8'); - -describe('Sanitize index page', () => { - beforeAll(async() => { - global.document.documentElement.innerHTML = html.toString(); - }); - - it('should have valid cdn link', () => { - expect(document.getElementById("load-msal").getAttribute("src")).toContain("https://alcdn.msauth.net/browser"); - }); -}); - -describe('Sanitize configuration object', () => { - beforeAll(() => { - global.msalConfig = require('./App/authConfig.js').msalConfig; - }); - - it('should define the config object', () => { - expect(msalConfig).toBeDefined(); - }); - - it('should contain credentials', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(msalConfig.auth.clientId)).toBe(true); - }); - - it('should contain authority URI', () => { - const regexUri = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)?/gi; - expect(regexUri.test(msalConfig.auth.authority)).toBe(true); - }); -}); - -describe('Ensure pages served', () => { - - beforeAll(() => { - process.env.NODE_ENV = 'test'; - }); - - it('should get index page', async () => { - const res = await request(app) - .get('/'); - - const data = await fs.promises.readFile(path.join(__dirname, './App/index.html'), 'utf8'); - expect(res.statusCode).toEqual(200); - expect(res.text).toEqual(data); - }); - - it('should get signout page', async () => { - const res = await request(app) - .get('/signout'); - - const data = await fs.promises.readFile(path.join(__dirname, './App/signout.html'), 'utf8'); - expect(res.statusCode).toEqual(200); - expect(res.text).toEqual(data); - }); -}); \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/server.js b/1-Authentication/2-sign-in-b2c/server.js deleted file mode 100644 index f7a595c..0000000 --- a/1-Authentication/2-sign-in-b2c/server.js +++ /dev/null @@ -1,34 +0,0 @@ -const express = require('express'); -const morgan = require('morgan'); -const path = require('path'); - -const DEFAULT_PORT = process.env.PORT || 6420; - -// initialize express. -const app = express(); - -// Configure morgan module to log all requests. -app.use(morgan('dev')); - -// Setup app folders. -app.use(express.static('App')); - -// Set up a route for signout.html -app.get('/signout', (req, res) => { - res.sendFile(path.join(__dirname + '/App/signout.html')); -}); - -app.get('/redirect', (req, res) => { - res.sendFile(path.join(__dirname + '/App/redirect.html')); -}); - -// Set up a route for index.html -app.get('*', (req, res) => { - res.sendFile(path.join(__dirname + '/index.html')); -}); - -app.listen(DEFAULT_PORT, () => { - console.log(`Sample app listening on port ${DEFAULT_PORT}!`) -}); - -module.exports = app; \ No newline at end of file diff --git a/2-Authorization-I/1-call-graph/App/authConfig.js b/2-Authorization-I/1-call-graph/App/authConfig.js deleted file mode 100644 index 3d7d439..0000000 --- a/2-Authorization-I/1-call-graph/App/authConfig.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Configuration object to be passed to MSAL instance on creation. - * For a full list of MSAL.js configuration parameters, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md - */ -const msalConfig = { - auth: { - clientId: 'Enter_the_Application_Id_Here', // This is the ONLY mandatory field that you need to supply. - authority: 'https://login.microsoftonline.com/Enter_the_Tenant_Id_Here', // Defaults to "https://login.microsoftonline.com/common" - redirectUri: '/', // You must register this URI on Azure Portal/App Registration. Defaults to window.location.href - postLogoutRedirectUri: '/', //Indicates the page to navigate after logout. - clientCapabilities: ['CP1'], // this lets the resource owner know that this client is capable of handling claims challenge. - }, - cache: { - cacheLocation: 'localStorage', // This configures where your cache will be stored - storeAuthStateInCookie: false, // Set this to "true" if you are having issues on IE11 or Edge - }, - system: { - /** - * Below you can configure MSAL.js logs. For more information, visit: - * https://docs.microsoft.com/azure/active-directory/develop/msal-logging-js - */ - loggerOptions: { - loggerCallback: (level, message, containsPii) => { - if (containsPii) { - return; - } - switch (level) { - case msal.LogLevel.Error: - console.error(message); - return; - case msal.LogLevel.Info: - console.info(message); - return; - case msal.LogLevel.Verbose: - console.debug(message); - return; - case msal.LogLevel.Warning: - console.warn(message); - return; - default: - return; - } - }, - }, - }, -}; - -// Add here the endpoints for MS Graph API services you would like to use. -const graphConfig = { - graphMeEndpoint: { - uri: 'https://graph.microsoft.com/v1.0/me', - scopes: ['User.Read'], - }, - graphContactsEndpoint: { - uri: 'https://graph.microsoft.com/v1.0/me/contacts', - scopes: ['Contacts.Read'], - }, -}; - -/** - * Scopes you add here will be prompted for user consent during sign-in. - * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request. - * For more information about OIDC scopes, visit: - * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes - */ -const loginRequest = { - scopes: ["User.Read"] -}; - -// exporting config object for jest -if (typeof exports !== 'undefined') { - module.exports = { - msalConfig: msalConfig, - graphConfig: graphConfig - }; -} diff --git a/2-Authorization-I/1-call-graph/App/authPopup.js b/2-Authorization-I/1-call-graph/App/authPopup.js deleted file mode 100644 index eadb916..0000000 --- a/2-Authorization-I/1-call-graph/App/authPopup.js +++ /dev/null @@ -1,153 +0,0 @@ -// Create the main myMSALObj instance -// configuration parameters are located at authConfig.js -const myMSALObj = new msal.PublicClientApplication(msalConfig); - -let username = ''; - -/** - * This method adds an event callback function to the MSAL object - * to handle the response from redirect flow. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/events.md - */ -myMSALObj.addEventCallback((event) => { - if ( - (event.eventType === msal.EventType.LOGIN_SUCCESS || - event.eventType === msal.EventType.ACQUIRE_TOKEN_SUCCESS) && - event.payload.account - ) { - const account = event.payload.account; - myMSALObj.setActiveAccount(account); - } - - if (event.eventType === msal.EventType.LOGOUT_SUCCESS) { - if (myMSALObj.getAllAccounts().length > 0) { - myMSALObj.setActiveAccount(myMSALObj.getAllAccounts()[0]); - } - } -}); - -function selectAccount() { - /** - * See here for more info on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - const currentAccounts = myMSALObj.getAllAccounts(); - if (currentAccounts === null) { - return; - } else if (currentAccounts.length >= 1) { - // Add choose account code here - username = myMSALObj.getActiveAccount().username; - showWelcomeMessage(username, currentAccounts); - } -} - -async function addAnotherAccount(event) { - if (event.target.innerHTML.includes('@')) { - const username = event.target.innerHTML; - const account = myMSALObj.getAllAccounts().find((account) => account.username === username); - const activeAccount = myMSALObj.getActiveAccount(); - if (account && activeAccount.homeAccountId != account.homeAccountId) { - try { - myMSALObj.setActiveAccount(account); - let res = await myMSALObj.ssoSilent({ - ...loginRequest, - account: account, - }); - closeModal(); - handleResponse(res); - window.location.reload(); - } catch (error) { - if (error instanceof msal.InteractionRequiredAuthError) { - let res = await myMSALObj.loginPopup({ - ...loginRequest, - prompt: 'login', - }); - handleResponse(res); - window.location.reload(); - } - } - } else { - closeModal(); - } - } else { - try { - myMSALObj.setActiveAccount(null); - const res = await myMSALObj.loginPopup({ - ...loginRequest, - prompt: 'login', - }); - handleResponse(res); - closeModal(); - window.location.reload(); - } catch (error) { - console.log(error); - } - } -} - -function handleResponse(response) { - /** - * To see the full list of response object properties, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#response - */ - - if (response !== null) { - const accounts = myMSALObj.getAllAccounts(); - username = response.account.username; - showWelcomeMessage(username, accounts); - } else { - selectAccount(); - } -} - -function signIn() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - myMSALObj - .loginPopup(loginRequest) - .then(handleResponse) - .catch((error) => { - console.error(error); - }); -} - -function signOut() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - const account = myMSALObj.getAccountByUsername(username); - const logoutRequest = { - account: account, - mainWindowRedirectUri: '/', - }; - clearStorage(account); - myMSALObj.logoutPopup(logoutRequest).catch((error) => { - console.log(error); - }); -} - -function seeProfile() { - callGraph( - username, - graphConfig.graphMeEndpoint.scopes, - graphConfig.graphMeEndpoint.uri, - msal.InteractionType.Popup, - myMSALObj - ); -} - -function readContacts() { - callGraph( - username, - graphConfig.graphContactsEndpoint.scopes, - graphConfig.graphContactsEndpoint.uri, - msal.InteractionType.Popup, - myMSALObj - ); -} - -selectAccount(); diff --git a/2-Authorization-I/1-call-graph/App/authRedirect.js b/2-Authorization-I/1-call-graph/App/authRedirect.js deleted file mode 100644 index 79ce8de..0000000 --- a/2-Authorization-I/1-call-graph/App/authRedirect.js +++ /dev/null @@ -1,153 +0,0 @@ -// Create the main myMSALObj instance -// configuration parameters are located at authConfig.js -const myMSALObj = new msal.PublicClientApplication(msalConfig); - -let username = ''; - -/** - * This method adds an event callback function to the MSAL object - * to handle the response from redirect flow. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/events.md - */ -myMSALObj.addEventCallback((event) => { - if ( - (event.eventType === msal.EventType.LOGIN_SUCCESS || - event.eventType === msal.EventType.ACQUIRE_TOKEN_SUCCESS) && - event.payload.account - ) { - const account = event.payload.account; - myMSALObj.setActiveAccount(account); - } - - if (event.eventType === msal.EventType.LOGOUT_SUCCESS) { - if (myMSALObj.getAllAccounts().length > 0) { - myMSALObj.setActiveAccount(myMSALObj.getAllAccounts()[0]); - } - } -}); - -/** - * A promise handler needs to be registered for handling the - * response returned from redirect flow. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/acquire-token.md - */ -myMSALObj - .handleRedirectPromise() - .then(handleResponse) - .catch((error) => { - console.error(error); - }); - -function selectAccount() { - /** - * See here for more info on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - - const currentAccounts = myMSALObj.getAllAccounts(); - - if (!currentAccounts) { - return; - } else if (currentAccounts.length >= 1) { - // Add your account choosing logic here - username = myMSALObj.getActiveAccount().username; - showWelcomeMessage(username, currentAccounts); - } -} - -async function addAnotherAccount(event) { - if (event.target.innerHTML.includes("@")) { - const username = event.target.innerHTML; - const account = myMSALObj.getAllAccounts().find((account) => account.username === username); - const activeAccount = myMSALObj.getActiveAccount(); - if (account && activeAccount.homeAccountId != account.homeAccountId) { - try { - myMSALObj.setActiveAccount(account); - let res = await myMSALObj.ssoSilent({ - ...loginRequest, - account: account, - }); - handleResponse(res); - closeModal(); - window.location.reload(); - } catch (error) { - if (error instanceof msal.InteractionRequiredAuthError) { - await myMSALObj.loginRedirect({ - ...loginRequest, - prompt: 'login', - }); - } - } - } else { - closeModal(); - } - } else { - try { - myMSALObj.setActiveAccount(null); - await myMSALObj.loginRedirect({ - ...loginRequest, - prompt: 'login', - }); - } catch (error) { - console.log(error); - } - } -} - -function handleResponse(response) { - if (response !== null) { - const accounts = myMSALObj.getAllAccounts(); - username = response.account.username; - showWelcomeMessage(username, accounts); - } else { - selectAccount(); - } -} - -function signIn() { - - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - myMSALObj.loginRedirect(loginRequest); -} - -function signOut() { - - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - // Choose which account to logout from by passing a username. - const account = myMSALObj.getAccountByUsername(username); - const logoutRequest = { - account: account, - loginHint: account.idTokenClaims.login_hint, - }; - - clearStorage(account); - myMSALObj.logoutRedirect(logoutRequest); -} - -function seeProfile() { - callGraph( - username, - graphConfig.graphMeEndpoint.scopes, - graphConfig.graphMeEndpoint.uri, - msal.InteractionType.Redirect, - myMSALObj - ); -} - -function readContacts() { - callGraph( - username, - graphConfig.graphContactsEndpoint.scopes, - graphConfig.graphContactsEndpoint.uri, - msal.InteractionType.Redirect, - myMSALObj - ); -} diff --git a/2-Authorization-I/1-call-graph/App/favicon.svg b/2-Authorization-I/1-call-graph/App/favicon.svg deleted file mode 100644 index 1284553..0000000 --- a/2-Authorization-I/1-call-graph/App/favicon.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - Icon-identity-221 - - - - - - - - diff --git a/2-Authorization-I/1-call-graph/App/fetch.js b/2-Authorization-I/1-call-graph/App/fetch.js deleted file mode 100644 index d498687..0000000 --- a/2-Authorization-I/1-call-graph/App/fetch.js +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ - -/** - * This method calls the Graph API by utilizing the graph client instance. - * @param {String} username - * @param {Array} scopes - * @param {String} uri - * @param {String} interactionType - * @param {Object} myMSALObj - * @returns - */ -const callGraph = async (username, scopes, uri, interactionType, myMSALObj) => { - const account = myMSALObj.getAccountByUsername(username); - try { - let response = await getGraphClient({ - account: account, - scopes: scopes, - interactionType: interactionType, - }) - .api(uri) - .responseType('raw') - .get(); - - response = await handleClaimsChallenge(account, response, uri); - if (response && response.error === 'claims_challenge_occurred') throw response.error; - updateUI(response, uri); - } catch (error) { - if (error === 'claims_challenge_occurred') { - const resource = new URL(uri).hostname; - const claims = - account && - getClaimsFromStorage(`cc.${msalConfig.auth.clientId}.${account.idTokenClaims.oid}.${resource}`) - ? window.atob( - getClaimsFromStorage( - `cc.${msalConfig.auth.clientId}.${account.idTokenClaims.oid}.${resource}` - ) - ) - : undefined; // e.g {"access_token":{"xms_cc":{"values":["cp1"]}}} - let request = { - account: account, - scopes: scopes, - claims: claims, - }; - switch (interactionType) { - case msal.InteractionType.Popup: - - await myMSALObj.acquireTokenPopup({ - ...request, - redirectUri: '/redirect', - }); - break; - case msal.InteractionType.Redirect: - await myMSALObj.acquireTokenRedirect(request); - break; - default: - await myMSALObj.acquireTokenRedirect(request); - break; - } - } else if (error.toString().includes('404')) { - return updateUI(null, uri); - } else { - console.log(error); - } - } -} - -/** - * This method inspects the HTTPS response from a fetch call for the "www-authenticate header" - * If present, it grabs the claims challenge from the header and store it in the localStorage - * For more information, visit: https://docs.microsoft.com/en-us/azure/active-directory/develop/claims-challenge#claims-challenge-header-format - * @param {object} response - * @returns response - */ -const handleClaimsChallenge = async (account, response, apiEndpoint) => { - if (response.status === 200) { - return response.json(); - } else if (response.status === 401) { - if (response.headers.get('WWW-Authenticate')) { - const authenticateHeader = response.headers.get('WWW-Authenticate'); - const claimsChallenge = parseChallenges(authenticateHeader); - /** - * This method stores the claim challenge to the session storage in the browser to be used when acquiring a token. - * To ensure that we are fetching the correct claim from the storage, we are using the clientId - * of the application and oid (user’s object id) as the key identifier of the claim with schema - * cc... - */ - addClaimsToStorage( - claimsChallenge.claims, - `cc.${msalConfig.auth.clientId}.${account.idTokenClaims.oid}.${new URL(apiEndpoint).hostname}` - ); - return { error: 'claims_challenge_occurred', payload: claimsChallenge.claims }; - } - - throw new Error(`Unauthorized: ${response.status}`); - } else { - throw new Error(`Something went wrong with the request: ${response.status}`); - } -}; - -/** - * This method parses WWW-Authenticate authentication headers - * @param header - * @return {Object} challengeMap - */ -const parseChallenges = (header) => { - const schemeSeparator = header.indexOf(' '); - const challenges = header.substring(schemeSeparator + 1).split(', '); - const challengeMap = {}; - - challenges.forEach((challenge) => { - const [key, value] = challenge.split('='); - challengeMap[key.trim()] = window.decodeURI(value.replace(/(^"|"$)/g, '')); - }); - - return challengeMap; -} \ No newline at end of file diff --git a/2-Authorization-I/1-call-graph/App/graph.js b/2-Authorization-I/1-call-graph/App/graph.js deleted file mode 100644 index 0386cb6..0000000 --- a/2-Authorization-I/1-call-graph/App/graph.js +++ /dev/null @@ -1,109 +0,0 @@ -/** - * The code below demonstrates how you can use MSAL as a custom authentication provider for the Microsoft Graph JavaScript SDK. - * You do NOT need to implement a custom provider. Microsoft Graph JavaScript SDK v3.0 (preview) offers AuthCodeMSALBrowserAuthenticationProvider - * which handles token acquisition and renewal for you automatically. For more information on how to use it, visit: - * https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/docs/AuthCodeMSALBrowserAuthenticationProvider.md - */ - -/** - * Returns a graph client object with the provided token acquisition options - * @param {Object} providerOptions: object containing user account, required scopes and interaction type - */ -const getGraphClient = (providerOptions) => { - - /** - * Pass the instance as authProvider in ClientOptions to instantiate the Client which will create and set the default middleware chain. - * For more information, visit: https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/docs/CreatingClientInstance.md - */ - let clientOptions = { - authProvider: new MsalAuthenticationProvider(providerOptions), - }; - - const graphClient = MicrosoftGraph.Client.initWithMiddleware(clientOptions); - - return graphClient; -}; - -/** - * This class implements the IAuthenticationProvider interface, which allows a custom authentication provider to be - * used with the Graph client. See: https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/src/IAuthenticationProvider.ts - */ -class MsalAuthenticationProvider { - - account; // user account object to be used when attempting silent token acquisition - scopes; // array of scopes required for this resource endpoint - interactionType; // type of interaction to fallback to when silent token acquisition fails - claims; - - constructor(providerOptions) { - this.account = providerOptions.account; - this.scopes = providerOptions.scopes; - this.interactionType = providerOptions.interactionType; - const resource = new URL(graphConfig.graphMeEndpoint.uri).hostname; - this.claims = - this.account && getClaimsFromStorage(`cc.${msalConfig.auth.clientId}.${this.account.idTokenClaims.oid}.${resource}`) - ? window.atob( - getClaimsFromStorage(`cc.${msalConfig.auth.clientId}.${this.account.idTokenClaims.oid}.${resource}`) - ) - : undefined; // e.g {"access_token":{"xms_cc":{"values":["cp1"]}}} - } - - /** - * This method will get called before every request to the ms graph server - * This should return a Promise that resolves to an accessToken (in case of success) or rejects with error (in case of failure) - * Basically this method will contain the implementation for getting and refreshing accessTokens - */ - getAccessToken() { - return new Promise(async (resolve, reject) => { - let response; - - try { - response = await myMSALObj.acquireTokenSilent({ - account: this.account, - scopes: this.scopes, - claims: this.claims - }); - - if (response.accessToken) { - resolve(response.accessToken); - } else { - reject(Error('Failed to acquire an access token')); - } - } catch (error) { - // in case if silent token acquisition fails, fallback to an interactive method - if (error instanceof msal.InteractionRequiredAuthError) { - switch (this.interactionType) { - case msal.InteractionType.Popup: - response = await myMSALObj.acquireTokenPopup({ - scopes: this.scopes, - claims: this.claims, - redirectUri: '/redirect', - }); - - if (response.accessToken) { - resolve(response.accessToken); - } else { - reject(Error('Failed to acquire an access token')); - } - break; - - case msal.InteractionType.Redirect: - /** - * This will cause the app to leave the current page and redirect to the consent screen. - * Once consent is provided, the app will return back to the current page and then the - * silent token acquisition will succeed. - */ - myMSALObj.acquireTokenRedirect({ - scopes: this.scopes, - claims: this.claims, - }); - break; - - default: - break; - } - } - } - }); - } -} diff --git a/2-Authorization-I/1-call-graph/App/index.html b/2-Authorization-I/1-call-graph/App/index.html deleted file mode 100644 index 3ed7982..0000000 --- a/2-Authorization-I/1-call-graph/App/index.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - Microsoft identity platform - - - - - - - - - - - - - - - - -

-
-
Vanilla JavaScript SPA calling MS Graph API with MSAL.js
-
-
- -
-
-
-
-
-
- -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - diff --git a/2-Authorization-I/1-call-graph/App/redirect.html b/2-Authorization-I/1-call-graph/App/redirect.html deleted file mode 100644 index dcc8b0e..0000000 --- a/2-Authorization-I/1-call-graph/App/redirect.html +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/2-Authorization-I/1-call-graph/App/styles.css b/2-Authorization-I/1-call-graph/App/styles.css deleted file mode 100644 index 166ab61..0000000 --- a/2-Authorization-I/1-call-graph/App/styles.css +++ /dev/null @@ -1,13 +0,0 @@ -.navbarStyle { - padding: .5rem 1rem !important; -} - -.dropdown-toggle { - visibility: hidden; - display: none !important; -} - -.list-group-item { - cursor: pointer; -} - diff --git a/2-Authorization-I/1-call-graph/App/ui.js b/2-Authorization-I/1-call-graph/App/ui.js deleted file mode 100644 index 7f99f10..0000000 --- a/2-Authorization-I/1-call-graph/App/ui.js +++ /dev/null @@ -1,87 +0,0 @@ -// Select DOM elements to work with -const welcomeDiv = document.getElementById("WelcomeMessage"); -const signInButton = document.getElementById("SignIn"); -const dropdownButton = document.getElementById('dropdownMenuButton1'); -const cardDiv = document.getElementById("card-div"); -const mailButton = document.getElementById("readMail"); -const profileButton = document.getElementById("seeProfile"); -const profileDiv = document.getElementById("profile-div"); -const listGroup = document.getElementById('list-group'); - -function showWelcomeMessage(username, accounts) { - // Reconfiguring DOM elements - cardDiv.style.display = 'initial'; - signInButton.style.visibility = 'hidden'; - welcomeDiv.innerHTML = `Welcome ${username}`; - dropdownButton.setAttribute('style', 'display:inline !important; visibility:visible'); - dropdownButton.innerHTML = username; - accounts.forEach(account => { - let item = document.getElementById(account.username); - if (!item) { - const listItem = document.createElement('li'); - listItem.setAttribute('onclick', 'addAnotherAccount(event)'); - listItem.setAttribute('id', account.username); - listItem.innerHTML = account.username; - if (account.username === username) { - listItem.setAttribute('class', 'list-group-item active'); - } else { - listItem.setAttribute('class', 'list-group-item'); - } - listGroup.appendChild(listItem); - } else { - if (account.username === username) { - item.setAttribute('class', 'list-group-item active'); - } else { - item.setAttribute('active', 'list-group-item'); - } - } - }); -} - -function closeModal() { - const element = document.getElementById("closeModal"); - element.click(); -} - -function updateUI(data, endpoint) { - console.log('Graph API responded at: ' + new Date().toString()); - - if (endpoint === graphConfig.graphMeEndpoint.uri) { - profileDiv.innerHTML = ''; - const title = document.createElement('p'); - title.innerHTML = "Title: " + data.jobTitle; - const email = document.createElement('p'); - email.innerHTML = "Mail: " + data.mail; - const phone = document.createElement('p'); - phone.innerHTML = "Phone: " + data.businessPhones[0]; - const address = document.createElement('p'); - address.innerHTML = "Location: " + data.officeLocation; - profileDiv.appendChild(title); - profileDiv.appendChild(email); - profileDiv.appendChild(phone); - profileDiv.appendChild(address); - - } else if (endpoint === graphConfig.graphContactsEndpoint.uri) { - if (!data || data.value.length < 1) { - alert('Your contacts is empty!'); - } else { - const tabList = document.getElementById('list-tab'); - tabList.innerHTML = ''; // clear tabList at each readMail call - - data.value.map((d, i) => { - if (i < 10) { - const listItem = document.createElement('a'); - listItem.setAttribute('class', 'list-group-item list-group-item-action'); - listItem.setAttribute('id', 'list' + i + 'list'); - listItem.setAttribute('data-toggle', 'list'); - listItem.setAttribute('href', '#list' + i); - listItem.setAttribute('role', 'tab'); - listItem.setAttribute('aria-controls', i); - listItem.innerHTML = - ' Name: ' + d.displayName + '

' + 'Note: ' + d.personalNotes + '...'; - tabList.appendChild(listItem); - } - }); - } - } -} \ No newline at end of file diff --git a/2-Authorization-I/1-call-graph/App/utils/storageUtils.js b/2-Authorization-I/1-call-graph/App/utils/storageUtils.js deleted file mode 100644 index fc9184d..0000000 --- a/2-Authorization-I/1-call-graph/App/utils/storageUtils.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * This method stores the claim challenge to the localStorage in the browser to be used when acquiring a token - * @param {String} claimsChallenge - */ -const addClaimsToStorage = (claimsChallenge, claimsChallengeId) => { - sessionStorage.setItem(claimsChallengeId, claimsChallenge); -}; - -/** - * This method retrieves the claims challenge from the localStorage - * @param {string} claimsChallengeId - * @returns - */ -const getClaimsFromStorage = (claimsChallengeId) => { - return sessionStorage.getItem(claimsChallengeId); -}; - -/** - * This method clears localStorage of any claims challenge entry - * @param {Object} account - */ -const clearStorage = (account) => { - for (var key in sessionStorage) { - if (key.startsWith(`cc.${msalConfig.auth.clientId}.${account.idTokenClaims.oid}`)) - sessionStorage.removeItem(key); - } -}; diff --git a/2-Authorization-I/1-call-graph/AppCreationScripts/AppCreationScripts.md b/2-Authorization-I/1-call-graph/AppCreationScripts/AppCreationScripts.md deleted file mode 100644 index 5dc5b78..0000000 --- a/2-Authorization-I/1-call-graph/AppCreationScripts/AppCreationScripts.md +++ /dev/null @@ -1,148 +0,0 @@ -# Registering sample apps with the Microsoft identity platform and updating configuration files using PowerShell - -## Overview - -### Quick summary - -1. On Windows, run PowerShell as **Administrator** and navigate to the root of the cloned directory -1. In PowerShell run: - - ```PowerShell - Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force - ``` - -1. Run the script to create your Microsoft Entra application and configure the code of the sample application accordingly. - - ```PowerShell - cd .\AppCreationScripts\ - .\Configure.ps1 -TenantId "your test tenant's id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" - ``` - -### More details - -- [Goal of the provided scripts](#goal-of-the-provided-scripts) - - [Presentation of the scripts](#presentation-of-the-scripts) - - [Usage pattern for tests and DevOps scenarios](#usage-pattern-for-tests-and-DevOps-scenarios) -- [How to use the app creation scripts?](#how-to-use-the-app-creation-scripts) - - [Pre-requisites](#pre-requisites) - - [Run the script and start running](#run-the-script-and-start-running) - - [Four ways to run the script](#four-ways-to-run-the-script) - - [Option 1 (interactive)](#option-1-interactive) - - [Option 2 (Interactive, but create apps in a specified tenant)](#option-3-Interactive-but-create-apps-in-a-specified-tenant) - - [Running the script on Azure Sovereign clouds](#running-the-script-on-Azure-Sovereign-clouds) - -## Goal of the provided scripts - -### Presentation of the scripts - -This sample comes with two PowerShell scripts, which automate the creation of the Microsoft Entra applications, and the configuration of the code for this sample. Once you run them, you will only need to build the solution and you are good to test. - -These scripts are: - -- `Configure.ps1` which: - - creates Microsoft Entra applications and their related objects (permissions, dependencies, secrets, app roles), - - changes the configuration files in the sample projects. - - creates a summary file named `createdApps.html` in the folder from which you ran the script, and containing, for each Microsoft Entra application it created: - - the identifier of the application - - the AppId of the application - - the url of its registration in the [Microsoft Entra admin center](https://entra.microsoft.com). - -- `Cleanup.ps1` which cleans-up the Microsoft Entra objects created by `Configure.ps1`. Note that this script does not revert the changes done in the configuration files, though. You will need to undo the change from source control (from Visual Studio, or from the command line using, for instance, `git reset`). - -### Usage pattern for tests and DevOps scenarios - -The `Configure.ps1` will stop if it tries to create a Microsoft Entra application which already exists in the tenant. For this, if you are using the script to try/test the sample, or in DevOps scenarios, you might want to run `Cleanup.ps1` just before `Configure.ps1`. This is what is shown in the steps below. - -## How to use the app creation scripts? - -### Pre-requisites - -1. Open PowerShell (On Windows, press `Windows-R` and type `PowerShell` in the search window) -1. Navigate to the root directory of the project. -1. Until you change it, the default [Execution Policy](https:/go.microsoft.com/fwlink/?LinkID=135170) for scripts is usually `Restricted`. In order to run the PowerShell script you need to set the Execution Policy to `RemoteSigned`. You can set this just for the current PowerShell process by running the command: - - ```PowerShell - Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process - ``` - -### (Optionally) install Microsoft.Graph.Applications PowerShell modules - -The scripts install the required PowerShell module (Microsoft.Graph.Applications) for the current user if needed. However, if you want to install if for all users on the machine, you can follow the following steps: - -1. If you have never done it already, in the PowerShell window, install the Microsoft.Graph.Applications PowerShell modules. For this: - - 1. Open PowerShell as admin (On Windows, Search Powershell in the search bar, right click on it and select **Run as administrator**). - 2. Type: - - ```PowerShell - Install-Module Microsoft.Graph.Applications - ``` - - or if you cannot be administrator on your machine, run: - - ```PowerShell - Install-Module Microsoft.Graph.Applications -Scope CurrentUser - ``` - -### Run the script and start running - -1. Go to the `AppCreationScripts` sub-folder. From the folder where you cloned the repo, - - ```PowerShell - cd AppCreationScripts - ``` - -1. Run the scripts. See below for the [four options](#four-ways-to-run-the-script) to do that. -1. Open the Visual Studio solution, and in the solution's context menu, choose **Set Startup Projects**. -1. select **Start** for the projects - -You're done! - -### Two ways to run the script - -We advise four ways of running the script: - -- Interactive: you will be prompted for credentials, and the scripts decide in which tenant to create the objects, -- Interactive in specific tenant: you will provide the tenant in which you want to create the objects and then you will be prompted for credentials, and the scripts will create the objects, - -Here are the details on how to do this. - -#### Option 1 (interactive) - -- Just run ``.\Configure.ps1``, and you will be prompted to sign-in (email address, password, and if needed MFA). -- The script will be run as the signed-in user and will use the tenant in which the user is defined. - -Note that the script will choose the tenant in which to create the applications, based on the user. Also to run the `Cleanup.ps1` script, you will need to re-sign-in. - -#### Option 2 (Interactive, but create apps in a specified tenant) - - if you want to create the apps in a particular tenant, you can use the following option: - -- Open the [Microsoft Entra admin center](https://entra.microsoft.com) -- Select the Microsoft Entra ID you are interested in (in the combo-box below your name on the top right of the browser window) -- Find the "Active Directory" object in this tenant -- Go to **Properties** and copy the content of the **Directory Id** property -- Then use the full syntax to run the scripts: - -```PowerShell -$tenantId = "yourTenantIdGuid" -. .\Cleanup.ps1 -TenantId $tenantId -. .\Configure.ps1 -TenantId $tenantId -``` - -### Running the script on Azure Sovereign clouds - -All the four options listed above can be used on any Azure Sovereign clouds. By default, the script targets `AzureCloud`, but it can be changed using the parameter `-AzureEnvironmentName`. - -The acceptable values for this parameter are: - -- AzureCloud -- AzureChinaCloud -- AzureUSGovernment - -Example: - - ```PowerShell - . .\Cleanup.ps1 -AzureEnvironmentName "AzureUSGovernment" - . .\Configure.ps1 -AzureEnvironmentName "AzureUSGovernment" - ``` diff --git a/2-Authorization-I/1-call-graph/AppCreationScripts/Cleanup.ps1 b/2-Authorization-I/1-call-graph/AppCreationScripts/Cleanup.ps1 deleted file mode 100644 index ead66b7..0000000 --- a/2-Authorization-I/1-call-graph/AppCreationScripts/Cleanup.ps1 +++ /dev/null @@ -1,151 +0,0 @@ - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - - -Function Cleanup -{ - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - <# - .Description - This function removes the Azure AD applications for the sample. These applications were created by the Configure.ps1 script - #> - - # $tenantId is the Active Directory Tenant. This is a GUID which represents the "Directory ID" of the AzureAD tenant - # into which you want to create the apps. Look it up in the Azure portal in the "Properties" of the Azure AD. - - # Connect to the Microsoft Graph API - Write-Host "Connecting to Microsoft Graph" - - - if ($tenantId -eq "") - { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else - { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Removes the applications - Write-Host "Cleaning-up applications from tenant '$tenantId'" - - Write-Host "Removing 'client' (ms-identity-javascript-c2s1) if needed" - try - { - Get-MgApplication -Filter "DisplayName eq 'ms-identity-javascript-c2s1'" | ForEach-Object {Remove-MgApplication -ApplicationId $_.Id } - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove the application 'ms-identity-javascript-c2s1'. Error is $message. Try deleting manually." -ForegroundColor White -BackgroundColor Red - } - - Write-Host "Making sure there are no more (ms-identity-javascript-c2s1) applications found, will remove if needed..." - $apps = Get-MgApplication -Filter "DisplayName eq 'ms-identity-javascript-c2s1'" | Format-List Id, DisplayName, AppId, SignInAudience, PublisherDomain - - if ($apps) - { - Remove-MgApplication -ApplicationId $apps.Id - } - - foreach ($app in $apps) - { - Remove-MgApplication -ApplicationId $app.Id - Write-Host "Removed ms-identity-javascript-c2s1.." - } - - # also remove service principals of this app - try - { - Get-MgServicePrincipal -filter "DisplayName eq 'ms-identity-javascript-c2s1'" | ForEach-Object {Remove-MgServicePrincipal -ServicePrincipalId $_.Id -Confirm:$false} - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove ServicePrincipal 'ms-identity-javascript-c2s1'. Error is $message. Try deleting manually from Enterprise applications." -ForegroundColor White -BackgroundColor Red - } -} - -# Pre-requisites -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -$ErrorActionPreference = "Stop" - - -try -{ - Cleanup -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} - -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph diff --git a/2-Authorization-I/1-call-graph/AppCreationScripts/Configure.ps1 b/2-Authorization-I/1-call-graph/AppCreationScripts/Configure.ps1 deleted file mode 100644 index 8ce9b8c..0000000 --- a/2-Authorization-I/1-call-graph/AppCreationScripts/Configure.ps1 +++ /dev/null @@ -1,362 +0,0 @@ - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - -<# - This script creates the Azure AD applications needed for this sample and updates the configuration files - for the visual Studio projects from the data in the Azure AD applications. - - In case you don't have Microsoft.Graph.Applications already installed, the script will automatically install it for the current user - - There are two ways to run this script. For more information, read the AppCreationScripts.md file in the same folder as this script. -#> - -# Adds the requiredAccesses (expressed as a pipe separated string) to the requiredAccess structure -# The exposed permissions are in the $exposedPermissions collection, and the type of permission (Scope | Role) is -# described in $permissionType -Function AddResourcePermission($requiredAccess, ` - $exposedPermissions, [string]$requiredAccesses, [string]$permissionType) -{ - foreach($permission in $requiredAccesses.Trim().Split("|")) - { - foreach($exposedPermission in $exposedPermissions) - { - if ($exposedPermission.Value -eq $permission) - { - $resourceAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess - $resourceAccess.Type = $permissionType # Scope = Delegated permissions | Role = Application permissions - $resourceAccess.Id = $exposedPermission.Id # Read directory data - $requiredAccess.ResourceAccess += $resourceAccess - } - } - } -} - -# -# Example: GetRequiredPermissions "Microsoft Graph" "Graph.Read|User.Read" -# See also: http://stackoverflow.com/questions/42164581/how-to-configure-a-new-azure-ad-application-through-powershell -Function GetRequiredPermissions([string] $applicationDisplayName, [string] $requiredDelegatedPermissions, [string]$requiredApplicationPermissions, $servicePrincipal) -{ - # If we are passed the service principal we use it directly, otherwise we find it from the display name (which might not be unique) - if ($servicePrincipal) - { - $sp = $servicePrincipal - } - else - { - $sp = Get-MgServicePrincipal -Filter "DisplayName eq '$applicationDisplayName'" - } - $appid = $sp.AppId - $requiredAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess - $requiredAccess.ResourceAppId = $appid - $requiredAccess.ResourceAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess] - - # $sp.Oauth2Permissions | Select Id,AdminConsentDisplayName,Value: To see the list of all the Delegated permissions for the application: - if ($requiredDelegatedPermissions) - { - AddResourcePermission $requiredAccess -exposedPermissions $sp.Oauth2PermissionScopes -requiredAccesses $requiredDelegatedPermissions -permissionType "Scope" - } - - # $sp.AppRoles | Select Id,AdminConsentDisplayName,Value: To see the list of all the Application permissions for the application - if ($requiredApplicationPermissions) - { - AddResourcePermission $requiredAccess -exposedPermissions $sp.AppRoles -requiredAccesses $requiredApplicationPermissions -permissionType "Role" - } - return $requiredAccess -} - - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function UpdateLine([string] $line, [string] $value) -{ - $index = $line.IndexOf(':') - $lineEnd = '' - - if($line[$line.Length - 1] -eq ','){ $lineEnd = ',' } - - if ($index -ige 0) - { - $line = $line.Substring(0, $index+1) + " " + '"' + $value+ '"' + $lineEnd - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function UpdateTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = UpdateLine $line $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function ReplaceInLine([string] $line, [string] $key, [string] $value) -{ - $index = $line.IndexOf($key) - if ($index -ige 0) - { - $index2 = $index+$key.Length - $line = $line.Substring(0, $index) + $value + $line.Substring($index2) - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function ReplaceInTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = ReplaceInLine $line $key $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - - -<#.Description - This function takes a string as input and creates an instance of an Optional claim object -#> -Function CreateOptionalClaim([string] $name) -{ - <#.Description - This function creates a new Azure AD optional claims with default and provided values - #> - - $appClaim = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphOptionalClaim - $appClaim.AdditionalProperties = New-Object System.Collections.Generic.List[string] - $appClaim.Source = $null - $appClaim.Essential = $false - $appClaim.Name = $name - return $appClaim -} - -<#.Description - Primary entry method to create and configure app registrations -#> -Function ConfigureApplications -{ - $isOpenSSl = 'N' #temporary disable open certificate creation - - <#.Description - This function creates the Azure AD applications for the sample in the provided Azure AD tenant and updates the - configuration files in the client and service project of the visual studio solution (App.Config and Web.Config) - so that they are consistent with the Applications parameters - #> - - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - # Connect to the Microsoft Graph API, non-interactive is not supported for the moment (Oct 2021) - Write-Host "Connecting to Microsoft Graph" - if ($tenantId -eq "") { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Create the client AAD application - Write-Host "Creating the AAD application (ms-identity-javascript-c2s1)" - # create the application - $clientAadApplication = New-MgApplication -DisplayName "ms-identity-javascript-c2s1" ` - -Spa ` - @{ ` - RedirectUris = "http://localhost:3000", "http://localhost:3000/redirect"; ` - } ` - -SignInAudience AzureADMyOrg ` - #end of command - - $currentAppId = $clientAadApplication.AppId - $currentAppObjectId = $clientAadApplication.Id - - $tenantName = (Get-MgApplication -ApplicationId $currentAppObjectId).PublisherDomain - #Update-MgApplication -ApplicationId $currentAppObjectId -IdentifierUris @("https://$tenantName/ms-identity-javascript-c2s1") - - # create the service principal of the newly created application - $clientServicePrincipal = New-MgServicePrincipal -AppId $currentAppId -Tags {WindowsAzureActiveDirectoryIntegratedApp} - - # add the user running the script as an app owner if needed - $owner = Get-MgApplicationOwner -ApplicationId $currentAppObjectId - if ($owner -eq $null) - { - New-MgApplicationOwnerByRef -ApplicationId $currentAppObjectId -BodyParameter = @{"@odata.id" = "htps://graph.microsoft.com/v1.0/directoryObjects/$user.ObjectId"} - Write-Host "'$($user.UserPrincipalName)' added as an application owner to app '$($clientServicePrincipal.DisplayName)'" - } - - # Add Claims - - $optionalClaims = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphOptionalClaims - $optionalClaims.AccessToken = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphOptionalClaim] - $optionalClaims.IdToken = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphOptionalClaim] - $optionalClaims.Saml2Token = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphOptionalClaim] - - # Add Optional Claims - - $newClaim = CreateOptionalClaim -name "acct" - $optionalClaims.IdToken += ($newClaim) - $newClaim = CreateOptionalClaim -name "login_hint" - $optionalClaims.IdToken += ($newClaim) - Update-MgApplication -ApplicationId $currentAppObjectId -OptionalClaims $optionalClaims - Write-Host "Done creating the client application (ms-identity-javascript-c2s1)" - - # URL of the AAD application in the Azure portal - # Future? $clientPortalUrl = "https://portal.azure.com/#@"+$tenantName+"/blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Overview/appId/"+$currentAppId+"/objectId/"+$currentAppObjectId+"/isMSAApp/" - $clientPortalUrl = "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/CallAnAPI/appId/"+$currentAppId+"/objectId/"+$currentAppObjectId+"/isMSAApp/" - - Add-Content -Value "client$currentAppIdms-identity-javascript-c2s1" -Path createdApps.html - # Declare a list to hold RRA items - $requiredResourcesAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess] - - # Add Required Resources Access (from 'client' to 'Microsoft Graph') - Write-Host "Getting access from 'client' to 'Microsoft Graph'" - $requiredPermission = GetRequiredPermissions -applicationDisplayName "Microsoft Graph"` - -requiredDelegatedPermissions "User.Read|Contacts.Read" - - $requiredResourcesAccess.Add($requiredPermission) - Write-Host "Added 'Microsoft Graph' to the RRA list." - # Useful for RRA additions troubleshooting - # $requiredResourcesAccess.Count - # $requiredResourcesAccess - - Update-MgApplication -ApplicationId $currentAppObjectId -RequiredResourceAccess $requiredResourcesAccess - Write-Host "Granted permissions." - - - # print the registered app portal URL for any further navigation - Write-Host "Successfully registered and configured that app registration for 'ms-identity-javascript-c2s1' at `n $clientPortalUrl" -ForegroundColor Green - - # Update config file for 'client' - # $configFile = $pwd.Path + "\..\App\authConfig.js" - $configFile = $(Resolve-Path ($pwd.Path + "\..\App\authConfig.js")) - - $dictionary = @{ "Enter_the_Application_Id_Here" = $clientAadApplication.AppId;"Enter_the_Tenant_Id_Here" = $tenantId }; - - Write-Host "Updating the sample config '$configFile' with the following config values:" -ForegroundColor Yellow - $dictionary - Write-Host "-----------------" - - ReplaceInTextFile -configFilePath $configFile -dictionary $dictionary - -if($isOpenSSL -eq 'Y') -{ - Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" - Write-Host "You have generated certificate using OpenSSL so follow below steps: " - Write-Host "Install the certificate on your system from current folder." - Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" -} -Add-Content -Value "" -Path createdApps.html -} # end of ConfigureApplications function - -# Pre-requisites - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -Set-Content -Value "" -Path createdApps.html -Add-Content -Value "" -Path createdApps.html - -$ErrorActionPreference = "Stop" - -# Run interactively (will ask you for the tenant ID) - -try -{ - ConfigureApplications -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph \ No newline at end of file diff --git a/2-Authorization-I/1-call-graph/AppCreationScripts/sample.json b/2-Authorization-I/1-call-graph/AppCreationScripts/sample.json deleted file mode 100644 index 7a65d31..0000000 --- a/2-Authorization-I/1-call-graph/AppCreationScripts/sample.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "Sample": { - "Title": "Vanilla JavaScript single-page application using MSAL.js to authenticate users to call Microsoft Graph", - "Level": 100, - "Client": "Vanilla JavaScript SPA", - "Service": "Microsoft Graph", - "RepositoryUrl": "ms-identity-javascript-tutorial", - "Endpoint": "AAD v2.0", - "Languages": ["javascript"], - "Description": "Vanilla JavaScript single-page application using MSAL.js to authenticate users and calling the Microsoft Graph API on their behalf", - "Products": ["azure-active-directory", "msal-js", "msal-browser"], - "Platform": "JavaScript" - }, - "AADApps": [ - { - "Id": "client", - "Name": "ms-identity-javascript-c2s1", - "Kind": "SinglePageApplication", - "HomePage": "http://localhost:3000/", - "SampleSubPath": "2-Authorization-I\\1-call-graph", - "ReplyUrls": "http://localhost:3000, http://localhost:3000/redirect", - "Audience": "AzureADMyOrg", - "OptionalClaims": { - "IdTokenClaims": ["acct", "login_hint"] - }, - "RequiredResourcesAccess": [ - { - "Resource": "Microsoft Graph", - "DelegatedPermissions": ["User.Read", "Contacts.Read"] - } - ] - } - ], - "CodeConfiguration": [ - { - "App": "client", - "SettingKind": "Replace", - "SettingFile": "\\..\\App\\authConfig.js", - "Mappings": [ - { - "key": "Enter_the_Application_Id_Here", - "value": ".AppId" - }, - { - "key": "Enter_the_Tenant_Id_Here", - "value": "$tenantId" - } - ] - } - ] -} \ No newline at end of file diff --git a/2-Authorization-I/1-call-graph/README.md b/2-Authorization-I/1-call-graph/README.md deleted file mode 100644 index 7619b7d..0000000 --- a/2-Authorization-I/1-call-graph/README.md +++ /dev/null @@ -1,509 +0,0 @@ ---- -page_type: sample -name: Vanilla JavaScript single-page application using MSAL.js to authenticate users to call Microsoft Graph -description: Vanilla JavaScript single-page application using MSAL.js to authenticate users and calling the Microsoft Graph API on their behalf -languages: - - javascript -products: - - microsoft-entra-id - - msal-js - - msal-browser -urlFragment: ms-identity-javascript-tutorial -extensions: -- services: ms-identity -- platform: JavaScript -- endpoint: Microsoft identity platform -- level: 100 -- client: Vanilla JavaScript SPA -- service: Microsoft Graph ---- - -# Vanilla JavaScript single-page application using MSAL.js to authenticate users to call Microsoft Graph - -* [Overview](#overview) -* [Scenario](#scenario) -* [Contents](#contents) -* [Prerequisites](#prerequisites) -* [Setup the sample](#setup-the-sample) -* [Explore the sample](#explore-the-sample) -* [Troubleshooting](#troubleshooting) -* [About the code](#about-the-code) -* [Next Steps](#next-steps) -* [Contributing](#contributing) -* [Learn More](#learn-more) - -## Overview - -This sample demonstrates a Vanilla JavaScript single-page application that lets users authenticate against [Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/fundamentals/active-directory-whatis) (Microsoft Entra ID) using the [Microsoft Authentication Library for JavaScript](https://github.com/AzureAD/microsoft-authentication-library-for-js) (MSAL.js), then acquires an **[Access Token](https://aka.ms/access-tokens)** for Microsoft Graph and calls the [Microsoft Graph API](https://docs.microsoft.com/graph/overview). In doing so, it also illustrates various authorization concepts, such as [Access Tokens](https://docs.microsoft.com/azure/active-directory/develop/access-tokens), [Authorization Code Grant](https://docs.microsoft.com/azure/active-directory/develop/v2-oauth2-auth-code-flow), [Dynamic Scopes and Incremental Consent](https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent), **silent requests** and more. - -In addition, this sample also demonstrates how to use the [Microsoft Graph JavaScript SDK](https://github.com/microsoftgraph/msgraph-sdk-javascript) client with MSAL as a custom authentication provider to query the Graph API. Note that you are not required to implement a custom provider, as the v3.0 (preview) of the SDK offers a [default provider](https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/docs/AuthCodeMSALBrowserAuthenticationProvider.md) that implements MSAL.js. - -> :information_source: To learn how applications integrate with [Microsoft Graph](https://aka.ms/graph), consider going through the recorded session:: [An introduction to Microsoft Graph for developers](https://www.youtube.com/watch?v=EBbnpFdB92A) - -## Scenario - -1. The client application uses the **MSAL.js** to sign-in a user and obtain a JWT **Access Token** from **Microsoft Entra ID**: -1. The **Access Token** is used as a *bearer* token to authorize the user to call the **Microsoft Graph API**. -1. **Microsoft Graph API** responds with the resource that the user has access to. - -![Overview](./ReadmeFiles/topology_callgraph.png) - -## Contents - -| File/folder | Description | -|-----------------------|---------------------------------------------------------------------------| -| `AppCreationScripts/` | Contains Powershell scripts to automate app registration. | -| `App/authPopup.js` | Main authentication logic resides here (using Popup flow). | -| `App/authRedirect.js` | Use this instead of `authPopup.js` for authentication with redirect flow. | -| `App/authConfig.js` | Contains configuration parameters for the sample. | -| `App/graph.js` | Implements custom authentication provider for Graph SDK. | -| `App/ui.js` | Contains UI logic. | -| `server.js` | Simple Express server for `index.html`. | - -## Prerequisites - -* [Node.js](https://nodejs.org/en/download/) must be installed to run this sample. -* [Visual Studio Code](https://code.visualstudio.com/download) is recommended for running and editing this sample. -* [VS Code Azure Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) extension is recommended for interacting with Azure through VS Code Interface. -* A modern web browser. -* An **Microsoft Entra ID** tenant. For more information, see: [How to get a Microsoft Entra tenant](https://docs.microsoft.com/azure/active-directory/develop/test-setup-environment#get-a-test-tenant) -* A user account in your **Microsoft Entra ID** tenant. - ->This sample will not work with a **personal Microsoft account**. If you're signed in to the [Microsoft Entra admin center](https://entra.microsoft.com) with a personal Microsoft account and have not created a user account in your directory before, you will need to create one before proceeding. - -## Setup the sample - -### Step 1: Clone or download this repository - -From your shell or command line: - -```console -git clone https://github.com/Azure-Samples/ms-identity-javascript-tutorial.git -``` - -or download and extract the repository *.zip* file. - -> :warning: To avoid path length limitations on Windows, we recommend cloning into a directory near the root of your drive. - -### Step 2: Install project dependencies - -```console - cd 2-Authorization-I\1-call-graph - npm install -``` - -### Step 3: Register the sample application(s) in your tenant - -There is one project in this sample. To register it, you can: - -- follow the steps below for manually register your apps -- or use PowerShell scripts that: - - **automatically** creates the Microsoft Entra applications and related objects (passwords, permissions, dependencies) for you. - - modify the projects' configuration files. - -
- Expand this section if you want to use this automation: - - > :warning: If you have never used **Microsoft Graph PowerShell** before, we recommend you go through the [App Creation Scripts Guide](./AppCreationScripts/AppCreationScripts.md) once to ensure that your environment is prepared correctly for this step. - - 1. On Windows, run PowerShell as **Administrator** and navigate to the root of the cloned directory - 1. In PowerShell run: - - ```PowerShell - Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force - ``` - - 1. Run the script to create your Microsoft Entra application and configure the code of the sample application accordingly. - 1. For interactive process -in PowerShell, run: - - ```PowerShell - cd .\AppCreationScripts\ - .\Configure.ps1 -TenantId "[Optional] - your tenant id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" - ``` - - > Other ways of running the scripts are described in [App Creation Scripts guide](./AppCreationScripts/AppCreationScripts.md). The scripts also provide a guide to automated application registration, configuration and removal which can help in your CI/CD scenarios. - -
- -#### Choose the Microsoft Entra tenant where you want to create your applications - -To manually register the apps, as a first step you'll need to: - -1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com). -1. If your account is present in more than one Microsoft Entra tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired Microsoft Entra tenant. - -#### Register the client app (ms-identity-javascript-c2s1) - -1. Navigate to the [Microsoft Entra admin center](https://entra.microsoft.com) and select the **Microsoft Entra ID** service. -1. Select the **App Registrations** blade on the left, then select **New registration**. -1. In the **Register an application page** that appears, enter your application's registration information: - 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `ms-identity-javascript-c2s1`. - 1. Under **Supported account types**, select **Accounts in this organizational directory only** - 1. Select **Register** to create the application. -1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. -1. In the app's registration screen, select the **Authentication** blade to the left. -1. If you don't have a platform added, select **Add a platform** and select the **Single-page application** option. - 1. In the **Redirect URI** section enter the following redirect URIs: - 1. `http://localhost:3000` - 1. `http://localhost:3000/redirect` - 1. Click **Save** to save your changes. -1. Since this app signs-in users, we will now proceed to select **delegated permissions**, which is is required by apps signing-in users. - 1. In the app's registration screen, select the **API permissions** blade in the left to open the page where we add access to the APIs that your application needs: - 1. Select the **Add a permission** button and then: - 1. Ensure that the **Microsoft APIs** tab is selected. - 1. In the *Commonly used Microsoft APIs* section, select **Microsoft Graph** - 1. In the **Delegated permissions** section, select **User.Read**, **Contacts.Read** in the list. Use the search box if necessary. - 1. Select the **Add permissions** button at the bottom. - -##### Configure Optional Claims - -1. Still on the same app registration, select the **Token configuration** blade to the left. -1. Select **Add optional claim**: - 1. Select **optional claim type**, then choose **ID**. - 1. Select the optional claim **acct**. - > Provides user's account status in tenant. If the user is a **member** of the tenant, the value is *0*. If they're a **guest**, the value is *1*. - 1. Select the optional claim **login_hint**. - > An opaque, reliable login hint claim. This claim is the best value to use for the login_hint OAuth parameter in all flows to get SSO.See $[optional claims](https://docs.microsoft.com/azure/active-directory/develop/active-directory-optional-claims) for more details on this optional claim. - 1. Select **Add** to save your changes. - -##### Configure the client app (ms-identity-javascript-c2s1) to use your app registration - -Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. - -> In the steps below, "ClientID" is the same as "Application ID" or "AppId". - -1. Open the `App\authConfig.js` file. -1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of `ms-identity-javascript-c2s1` app copied from the Microsoft Entra admin center. -1. Find the key `Enter_the_Tenant_Id_Here` and replace the existing value with your Microsoft Entra tenant/directory ID. - -### Step 4: Running the sample - -```console - cd 2-Authorization-I\1-call-graph - npm start -``` - -## Explore the sample - -1. Open your browser and navigate to `http://localhost:3000`. -1. Click the **sign-in** button on the top right corner. -1. Next, click the **See my profile** button on the left. This will make a MS Graph call. -1. Click the **Read my contacts** button below to see your contacts. - -![Screenshot](./ReadmeFiles/screenshot.png) - -> :information_source: Did the sample not work for you as expected? Then please reach out to us using the [GitHub Issues](../../../../issues) page. - -## We'd love your feedback! - -Were we successful in addressing your learning objective? Consider taking a moment to[share your experience with us](https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR73pcsbpbxNJuZCMKN0lURpUNDVHTkg2VVhWMTNYUTZEM05YS1hSN01EOSQlQCN0PWcu). - -## Troubleshooting - -
- Expand for troubleshooting info - -Use [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) to get support from the community. Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. -Make sure that your questions or comments are tagged with [`azure-active-directory` `msal-js` `ms-identity` `adal` `msal`]. - -To provide feedback on or suggest features for Microsoft Entra ID, visit [User Voice page](https://feedback.azure.com/d365community/forum/79b1327d-d925-ec11-b6e6-000d3a4f06a4). -
- -## About the code - -### Protected resources and scopes - -In order to access a protected resource on behalf of a signed-in user, the app needs to present a valid **Access Token** to that resource owner (in this case, Microsoft Graph). The intended recipient of an **Access Token** is represented by the `aud` claim (in this case, it should be the Microsoft Graph API's App ID); in case the value for the `aud` claim does not mach the resource **APP ID URI**, the token should be considered invalid. Likewise, the permissions that an **Access Token** grants is represented by the `scp` claim. See [Access Token claims](https://docs.microsoft.com/azure/active-directory/develop/access-tokens#payload-claims) for more information. - -### Dynamic scopes and incremental consent - -In **Microsoft Entra ID**, the scopes (permissions) set directly on the application registration are called static scopes. Other scopes that are only defined within the code are called dynamic scopes. This has implications on the **login** (i.e. loginPopup, loginRedirect) and **acquireToken** (i.e. `acquireTokenPopup`, `acquireTokenRedirect`, `acquireTokenSilent`) methods of **MSAL.js**. Consider: - -```javascript - const loginRequest = { - scopes: [ "openid", "profile", "User.Read" ] - }; - const tokenRequest = { - scopes: [ "Contacts.Read" ] - }; - - // will return an ID Token and an Access Token with scopes: "openid", "profile" and "User.Read" - msalInstance.loginPopup(loginRequest); - - // will fail and fallback to an interactive method prompting a consent screen - // after consent, the received token will be issued for "openid", "profile" ,"User.Read" and "Mail.Read" combined - msalInstance.acquireTokenSilent(tokenRequest); -``` - -In the code snippet above, the user will be prompted for consent once they authenticate and receive an **ID Token** and an **Access Token** with scope `User.Read`. Later, if they request an **Access Token** for `User.Read`, they will not be asked for consent again (in other words, they can acquire a token *silently*). On the other hand, the user did not consented to `Mail.Read` at the authentication stage. As such, they will be asked for consent when requesting an **Access Token** for that scope. The token received will contain all the previously consented scopes, hence the term *incremental consent*. - -### Acquire a Token - -**MSAL.js** exposes 3 APIs for acquiring a token: `acquireTokenPopup()`, `acquireTokenRedirect()` and `acquireTokenSilent()`: - -```javascript - myMSALObj.acquireTokenPopup(request) - .then(response => { - // do something with response - }) - .catch(error => { - console.log(error) - }); -``` - -For `acquireTokenRedirect()`, you must register a redirect promise handler: - -```javascript - myMSALObj.handleRedirectPromise() - .then(response => { - // do something with response - }) - .catch(error => { - console.log(error); - }); - - myMSALObj.acquireTokenRedirect(request); -``` - -The **MSAL.js** exposes the `acquireTokenSilent()` API which is meant to retrieve non-expired token silently. - -```javascript - myMSALObj.acquireTokenSilent(request) - .then(tokenResponse => { - // Do something with the tokenResponse - }).catch(async (error) => { - if (error instanceof InteractionRequiredAuthError) { - // fallback to interaction when silent call fails - return myMSALObj.acquireTokenPopup(request); - } - }).catch(error => { - handleError(error); - }); -``` - -### Access Token validation - -Clients should treat access tokens as opaque strings, as the contents of the token are intended for the **resource only** (such as a web API or Microsoft Graph). For validation and debugging purposes, developers can decode **JWT**s (*JSON Web Tokens*) using a site like [jwt.ms](https://jwt.ms). This sample does not need to validate Access Tokens it acquires. - -### Calling the Microsoft Graph API - -[Microsoft Graph JavaScript SDK](https://github.com/microsoftgraph/msgraph-sdk-javascript) provides various utility methods to query the Graph API. While the SDK has a default authentication provider that can be used in basic scenarios, it can also be extended to use with a custom authentication provider such as MSAL. To do so, we will initialize the Graph SDK client with [clientOptions](https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/docs/CreatingClientInstance.md) method, which contains an `authProvider` object of class **MyAuthenticationProvider** that handles the token acquisition process for the client. - -```javascript -const getGraphClient = () => { - let clientOptions = { - authProvider: new MyAuthenticationProvider(), - }; - - const graphClient = Client.initWithMiddleware(clientOptions); - - return graphClient; -} -``` - -**MyAuthenticationProvider** needs to implement the [IAuthenticationProvider](https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/src/IAuthenticationProvider.ts) interface, which can be done as shown below: - -```javascript -class MyAuthenticationProvider { - - /** - * This method will get called before every request to the ms graph server - * This should return a Promise that resolves to an accessToken (in case of success) or rejects with error (in case of failure) - * Basically this method will contain the implementation for getting and refreshing accessTokens - */ - getAccessToken() { - return new Promise(async (resolve, reject) => { - let response; - - response = await msalInstance.acquireTokenSilent({ - account: account, - scopes: scopes - }); - - if (response.accessToken) { - resolve(response.accessToken); - } else { - reject(Error('Failed to acquire an access token')); - } - }); - } -} -``` - -See [graph.js](./App/graph.js). The Graph client then can be used as shown below: - -```javascript -function readContacts() { - const account = myMSALObj.getAccountByUsername(username); - getGraphClient({ - account: account, - scopes: graphConfig.graphContactsEndpoint.scopes, - interactionType: msal.InteractionType.Popup, - }) - .api('/me/contacts') - .responseType('raw') - .get() - .then((response) => { - return handleClaimsChallenge(account, response, graphConfig.graphContactsEndpoint.uri); - }) - .then((response) => { - if (response && response.error === 'claims_challenge_occurred') throw response.error; - return updateUI(response, graphConfig.graphContactsEndpoint.uri); - }) - .catch((error) => { - if (error === 'claims_challenge_occurred') { - const resource = new URL(graphConfig.graphContactsEndpoint.uri).hostname; - const claims = - account && - getClaimsFromStorage(`cc.${msalConfig.auth.clientId}.${account.idTokenClaims.oid}.${resource}`) - ? window.atob( - getClaimsFromStorage( - `cc.${msalConfig.auth.clientId}.${account.idTokenClaims.oid}.${resource}` - ) - ) - : undefined; // e.g {"access_token":{"xms_cc":{"values":["cp1"]}}} - let request = { - account: account, - scopes: graphConfig.graphContactsEndpoint.scopes, - claims: claims, - redirectUri: '/redirect', - }; - - myMSALObj.acquireTokenPopup(request).catch((error) => { - console.log(error); - }); - } else if (error.toString().includes('404')) { - return updateUI(null, graphConfig.graphContactsEndpoint.uri); - } else { - console.log(error); - } - }); -} -``` - -### Handle Continuous Access Evaluation (CAE) challenge from Microsoft Graph - -Continuous access evaluation (CAE) enables applications to do just-in time token validation, for instance enforcing user session revocation in the case of password change/reset but there are other benefits. For details, see [Continuous access evaluation](https://docs.microsoft.com/azure/active-directory/conditional-access/concept-continuous-access-evaluation). - -Microsoft Graph is now CAE-enabled in Preview. This means that it can ask its client apps for more claims when conditional access policies require it. Your can enable your application to be ready to consume CAE-enabled APIs by: - -1. Declaring that the client app is capable of handling claims challenges. -1. Processing these challenges when they are thrown by the web API. - -#### Declare the CAE capability in the configuration - -This sample app declares that it's CAE-capable by adding the `clientCapabilities` property in the configuration in `authConfig.js`: - -```javascript - const msalConfig = { - auth: { - clientId: 'Enter_the_Application_Id_Here', - authority: 'https://login.microsoftonline.com/Enter_the_Tenant_Info_Here', - redirectUri: "/", - postLogoutRedirectUri: "/", - navigateToLoginRequestUrl: true, - clientCapabilities: ["CP1"] // this lets the resource owner know that this client is capable of handling claims challenge. - } - } - - const msalInstance = new PublicClientApplication(msalConfig); -``` - -#### Processing the CAE challenge from Microsoft Graph - -Once the client app receives the CAE claims challenge from Microsoft Graph, it needs to present the user with a prompt for satisfying the challenge via Microsoft Entra authorization endpoint. To do so, we use MSAL's `acquireTokenRedirect` and `acquireTokenPopup` API's and provide the claims challenge as a parameter in the token request. This is shown in [fetch.js](./App/fetch.js), where we handle the response from the Microsoft Graph API with the `handleClaimsChallenge` method: - -```javascript - /** - * This method inspects the HTTPS response from a fetch call for the "www-authenticate header" - * If present, it grabs the claims challenge from the header and store it in the localStorage - * For more information, visit: https://docs.microsoft.com/en-us/azure/active-directory/develop/claims-challenge#claims-challenge-header-format - * @param {object} response - * @returns response - */ -const handleClaimsChallenge = async (account,response, apiEndpoint) => { - if (response.status === 200) { - return response.json(); - } else if (response.status === 401) { - if (response.headers.get('www-authenticate')) { - const authenticateHeader = response.headers.get('www-authenticate'); - const claimsChallenge = parseChallenges(authenticateHeader); - /** - * This method stores the claim challenge to the session storage in the browser to be used when acquiring a token. - * To ensure that we are fetching the correct claim from the storage, we are using the clientId - * of the application and oid (user’s object id) as the key identifier of the claim with schema - * cc... - */ - addClaimsToStorage( - claimsChallenge.claims, - `cc.${msalConfig.auth.clientId}.${account.idTokenClaims.oid}.${new URL(apiEndpoint).hostname}` - ); - return { error: 'claims_challenge_occurred', payload: claimsChallenge.claims }; - } - - throw new Error(`Unauthorized: ${response.status}`); - } else { - throw new Error(`Something went wrong with the request: ${response.status}`); - } -}; -``` - -After that, we require a new access token via the `acquireTokenPopup` and `acquireTokenRedirect` APIs, fetch the claims challenge from the browser's localStorage, and pass it to the `acquireTokenPopup` and `acquireTokenRedirect` APIs in the request parameter. - -```javascript -if (error === 'claims_challenge_occurred') { - const resource = new URL(graphConfig.graphMeEndpoint.uri).hostname; - const claims = - account && - getClaimsFromStorage(`cc.${msalConfig.auth.clientId}.${account.idTokenClaims.oid}.${resource}`) - ? window.atob( - getClaimsFromStorage( - `cc.${msalConfig.auth.clientId}.${account.idTokenClaims.oid}.${resource}` - ) - ) - : undefined; // e.g {"access_token":{"xms_cc":{"values":["cp1"]}}} - let request = { - account: account, - scopes: graphConfig.graphMeEndpoint.scopes, - claims: claims, - redirectUri: '/redirect', - }; - - myMSALObj.acquireTokenPopup(request).catch((error) => { - console.log(error); - }); -} -``` - -## Next Steps - -Learn how to: - -* [Vanilla JavaScript single-page application (SPA) using MSAL.js to authorize users for calling a protected web API on Microsoft Entra ID](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/tree/main/3-Authorization-II/1-call-api) - -## Contributing - -If you'd like to contribute to this sample, see [CONTRIBUTING.MD](/CONTRIBUTING.md). - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - -## Learn More - -* [Microsoft identity platform (Microsoft Entra ID for developers)](https://docs.microsoft.com/azure/active-directory/develop/) -* [Microsoft Entra ID code samples](https://docs.microsoft.com/azure/active-directory/develop/sample-v2-code) -* [Overview of Microsoft Authentication Library (MSAL)](https://docs.microsoft.com/azure/active-directory/develop/msal-overview) -* [Register an application with the Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/quickstart-register-app) -* [Configure a client application to access web APIs](https://docs.microsoft.com/azure/active-directory/develop/quickstart-configure-app-access-web-apis) -* [Understanding Microsoft Entra application consent experiences](https://docs.microsoft.com/azure/active-directory/develop/application-consent-experience) -* [Understand user and admin consent](https://docs.microsoft.com/azure/active-directory/develop/howto-convert-app-to-be-multi-tenant#understand-user-and-admin-consent) -* [Application and service principal objects in Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/develop/app-objects-and-service-principals) -* [Authentication Scenarios for Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/develop/authentication-flows-app-scenarios) -* [Building Zero Trust ready apps](https://aka.ms/ztdevsession) -* [National Clouds](https://docs.microsoft.com/azure/active-directory/develop/authentication-national-cloud#app-registration-endpoints) -* [Initialize client applications using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-initializing-client-applications) -* [Single sign-on with MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso) -* [Handle MSAL.js exceptions and errors](https://docs.microsoft.com/azure/active-directory/develop/msal-handling-exceptions?tabs=javascript) -* [Logging in MSAL.js applications](https://docs.microsoft.com/azure/active-directory/develop/msal-logging?tabs=javascript) -* [Pass custom state in authentication requests using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-pass-custom-state-authentication-request) -* [Prompt behavior in MSAL.js interactive requests](https://docs.microsoft.com/azure/active-directory/develop/msal-js-prompt-behavior) -* [Use MSAL.js to work with Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory/develop/msal-b2c-overview) diff --git a/2-Authorization-I/1-call-graph/ReadmeFiles/screenshot.png b/2-Authorization-I/1-call-graph/ReadmeFiles/screenshot.png deleted file mode 100644 index 6fe0c75c7d34dc44c40efaf862ea95d66a3bafe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27763 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 am6X%zH4 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 xkr2o4S&#vrwW(@2rxMI9@A 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

d@Y7_II`2 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 U*rtSo{sBIZwDdGf@7sj@KRBsfWdHyG diff --git a/2-Authorization-I/1-call-graph/package-lock.json b/2-Authorization-I/1-call-graph/package-lock.json deleted file mode 100644 index 9274d71..0000000 --- a/2-Authorization-I/1-call-graph/package-lock.json +++ /dev/null @@ -1,9054 +0,0 @@ -{ - "name": "ms-identity-javascript-c2s1", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "ms-identity-javascript-c2s1", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "express": "^4.17.1", - "morgan": "^1.10.0" - }, - "devDependencies": { - "jest": "^27.0.6", - "nodemon": "^2.0.20", - "supertest": "^6.1.4" - } - }, - "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, - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", - "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/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==", - "dev": true - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.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, - "dependencies": { - "@babel/types": "^7.24.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, - "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, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "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, - "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, - "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, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" - }, - "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, - "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/highlight/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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.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-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-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-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.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz", - "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==", - "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/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", - "dev": true, - "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, - "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/traverse/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/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==", - "dev": true - }, - "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, - "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/@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/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.3.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz", - "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.3.1", - "jest-util": "^27.3.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz", - "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.3.1", - "@jest/reporters": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.3.0", - "jest-config": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-resolve-dependencies": "^27.3.1", - "jest-runner": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "jest-watcher": "^27.3.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/environment": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz", - "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz", - "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.3.1", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz", - "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.3.1", - "@jest/types": "^27.2.5", - "expect": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz", - "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.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/source-map": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", - "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "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.3.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz", - "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.3.1", - "@jest/types": "^27.2.5", - "@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.3.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz", - "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.3.1", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-runtime": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz", - "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.2.5", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.3.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "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/types": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", - "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", - "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/@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==", - "dev": true, - "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.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "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/@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/@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "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.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "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/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/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "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/node": { - "version": "16.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", - "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", - "dev": true - }, - "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/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/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==", - "dev": true - }, - "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.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true, - "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-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/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==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/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==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/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/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/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/babel-jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz", - "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==", - "dev": true, - "dependencies": { - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.2.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "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-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-istanbul/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/babel-plugin-jest-hoist": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", - "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", - "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-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.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", - "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^27.2.0", - "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/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "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/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/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "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/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==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "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/browserslist": { - "version": "4.17.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", - "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "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/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-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==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001280", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz", - "integrity": "sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "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/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/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/ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", - "dev": true - }, - "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==", - "dev": true - }, - "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/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/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-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/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/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "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=", - "dev": 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-disposition/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/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "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/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "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 - }, - "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/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/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/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/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/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "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/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "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/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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/diff-sequences": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", - "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "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/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/electron-to-chromium": { - "version": "1.3.896", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.896.tgz", - "integrity": "sha512-NcGkBVXePiuUrPLV8IxP43n1EOtdg+dudVjrfVEUd/bOqpQUFZ2diL5PPYzbgEhZFEltdXV3AcyKwGnEQ5lhMA==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": 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/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "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/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "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/expect": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz", - "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-regex-util": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/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/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "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/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==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/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/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=", - "dev": true - }, - "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==", - "dev": true - }, - "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/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "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==", - "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/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==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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/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": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", - "dev": true, - "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/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "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.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "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==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "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/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/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/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "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==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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-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/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==", - "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-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-agent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/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==", - "dev": 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==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/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==", - "dev": true - }, - "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/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/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "node_modules/import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "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/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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/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-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-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/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-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-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-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-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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/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": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.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-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-lib-source-maps/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/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==", - "dev": true - }, - "node_modules/istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz", - "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==", - "dev": true, - "dependencies": { - "@jest/core": "^27.3.1", - "import-local": "^3.0.2", - "jest-cli": "^27.3.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.3.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz", - "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "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.3.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz", - "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.3.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.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-config": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz", - "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.3.1", - "@jest/types": "^27.2.5", - "babel-jest": "^27.3.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.3.1", - "jest-environment-jsdom": "^27.3.1", - "jest-environment-node": "^27.3.1", - "jest-get-type": "^27.3.1", - "jest-jasmine2": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-runner": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "micromatch": "^4.0.4", - "pretty-format": "^27.3.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-diff": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", - "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", - "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", - "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.3.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz", - "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "jest-get-type": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz", - "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.3.1", - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.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.3.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz", - "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.3.1", - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", - "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz", - "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.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.3.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz", - "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.3.1", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.3.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz", - "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==", - "dev": true, - "dependencies": { - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz", - "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.3.1", - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz", - "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.2.5", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.3.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-mock": { - "version": "27.3.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz", - "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "@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.0.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", - "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz", - "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.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.3.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz", - "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz", - "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==", - "dev": true, - "dependencies": { - "@jest/console": "^27.3.1", - "@jest/environment": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.3.1", - "jest-environment-node": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-leak-detector": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.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-runtime": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz", - "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.3.1", - "@jest/environment": "^27.3.1", - "@jest/globals": "^27.3.1", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-mock": "^27.3.0", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.2.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-serializer": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", - "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz", - "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@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.3.1", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.3.1", - "jest-get-type": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-util": "^27.3.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.3.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/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz", - "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz", - "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.3.1", - "leven": "^3.1.0", - "pretty-format": "^27.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz", - "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.3.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "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/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/jest/node_modules/jest-cli": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz", - "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==", - "dev": true, - "dependencies": { - "@jest/core": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.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/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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/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/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "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/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.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/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/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "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/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/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "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/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-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/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/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nodemon/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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "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/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/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-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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/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/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/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/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/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=", - "dev": true, - "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==", - "dev": true - }, - "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/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "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/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/pretty-format": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", - "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "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/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/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/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/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "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==", - "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/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/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==", - "dev": true, - "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/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "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-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.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/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "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/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "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==", - "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/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "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==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "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/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "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/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.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "dev": true, - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/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/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/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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/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/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/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==", - "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/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-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/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "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-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/superagent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", - "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", - "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", - "dev": true, - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", - "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", - "readable-stream": "^3.6.0", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 7.0.0" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/superagent/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==", - "dev": true - }, - "node_modules/superagent/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/supertest": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.1.6.tgz", - "integrity": "sha512-0hACYGNJ8OHRg8CRITeZOdbjur7NLuNs0mBjVhdpxi7hP6t3QIbOzLON5RTUmZcy2I9riuII3+Pr2C7yztrIIg==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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-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/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/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/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/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/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/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/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "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/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/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==", - "dev": 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/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/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "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/v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "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/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/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==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "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/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/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-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/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "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.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "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/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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": "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" - } - } - }, - "dependencies": { - "@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.16.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", - "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", - "dev": true - }, - "@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "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-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - } - }, - "@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-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.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "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.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", - "dev": true, - "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" - } - }, - "@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" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.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==", - "dev": true, - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.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-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-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-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-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.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz", - "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@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" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@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 - }, - "@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" - } - }, - "@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.3.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz", - "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.3.1", - "jest-util": "^27.3.1", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz", - "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/reporters": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.3.0", - "jest-config": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-resolve-dependencies": "^27.3.1", - "jest-runner": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "jest-watcher": "^27.3.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz", - "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0" - } - }, - "@jest/fake-timers": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz", - "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.3.1", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1" - } - }, - "@jest/globals": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz", - "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/types": "^27.2.5", - "expect": "^27.3.1" - } - }, - "@jest/reporters": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz", - "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.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" - } - }, - "@jest/source-map": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", - "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz", - "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz", - "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==", - "dev": true, - "requires": { - "@jest/test-result": "^27.3.1", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-runtime": "^27.3.1" - } - }, - "@jest/transform": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz", - "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.2.5", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.3.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", - "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", - "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" - } - }, - "@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==", - "dev": true, - "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.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true - }, - "@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==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@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==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@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" - } - }, - "@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 - }, - "@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "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.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "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/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/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "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/node": { - "version": "16.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", - "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", - "dev": true - }, - "@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", - "dev": true - }, - "@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/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 - }, - "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==", - "dev": true - }, - "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.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true - }, - "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-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 - }, - "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==", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "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==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "babel-jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz", - "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==", - "dev": true, - "requires": { - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.2.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.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" - }, - "dependencies": { - "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" - } - } - } - }, - "babel-plugin-jest-hoist": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", - "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", - "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-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.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", - "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.2.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "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" - } - }, - "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 - }, - "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": { - "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" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "requires": { - "fill-range": "^7.1.1" - } - }, - "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 - }, - "browserslist": { - "version": "4.17.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", - "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "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-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==", - "dev": true - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001280", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz", - "integrity": "sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA==", - "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" - } - }, - "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 - }, - "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" - } - }, - "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", - "dev": true - }, - "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==", - "dev": 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" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "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-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 - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "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=", - "dev": 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" - }, - "dependencies": { - "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==" - } - } - }, - "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" - } - }, - "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" - }, - "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 - }, - "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" - } - }, - "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 - } - } - }, - "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" - } - }, - "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" - } - }, - "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 - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": 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==", - "dev": true - }, - "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 - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "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 - }, - "diff-sequences": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", - "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", - "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 - } - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.896", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.896.tgz", - "integrity": "sha512-NcGkBVXePiuUrPLV8IxP43n1EOtdg+dudVjrfVEUd/bOqpQUFZ2diL5PPYzbgEhZFEltdXV3AcyKwGnEQ5lhMA==", - "dev": true - }, - "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==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": 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" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "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 - }, - "expect": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz", - "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-regex-util": "^27.0.6" - }, - "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 - } - } - }, - "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": { - "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" - } - }, - "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==" - } - } - }, - "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=", - "dev": true - }, - "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==", - "dev": true - }, - "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" - } - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "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": { - "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" - } - } - } - }, - "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" - } - }, - "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": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "dev": true - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "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.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "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==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "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 - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "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" - } - }, - "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" - } - }, - "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 - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "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 - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "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-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "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" - } - }, - "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" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": 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==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "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 - }, - "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" - } - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "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 - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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==" - }, - "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-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-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "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 - }, - "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-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-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-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-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "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 - }, - "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": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.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" - } - }, - "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" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz", - "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==", - "dev": true, - "requires": { - "@jest/core": "^27.3.1", - "import-local": "^3.0.2", - "jest-cli": "^27.3.1" - }, - "dependencies": { - "jest-cli": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz", - "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==", - "dev": true, - "requires": { - "@jest/core": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } - } - } - }, - "jest-changed-files": { - "version": "27.3.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz", - "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz", - "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.3.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - } - }, - "jest-config": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz", - "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.3.1", - "@jest/types": "^27.2.5", - "babel-jest": "^27.3.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.3.1", - "jest-environment-jsdom": "^27.3.1", - "jest-environment-node": "^27.3.1", - "jest-get-type": "^27.3.1", - "jest-jasmine2": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-runner": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "micromatch": "^4.0.4", - "pretty-format": "^27.3.1" - } - }, - "jest-diff": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", - "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-docblock": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", - "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz", - "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "jest-get-type": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-environment-jsdom": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz", - "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz", - "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1" - } - }, - "jest-get-type": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", - "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", - "dev": true - }, - "jest-haste-map": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz", - "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@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.4", - "jest-regex-util": "^27.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz", - "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.3.1", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.3.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1", - "throat": "^6.0.1" - } - }, - "jest-leak-detector": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz", - "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==", - "dev": true, - "requires": { - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-matcher-utils": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz", - "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.3.1", - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-message-util": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz", - "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.2.5", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.3.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "27.3.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz", - "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@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.0.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", - "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", - "dev": true - }, - "jest-resolve": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz", - "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz", - "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.3.1" - } - }, - "jest-runner": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz", - "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/environment": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.3.1", - "jest-environment-node": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-leak-detector": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - } - }, - "jest-runtime": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz", - "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/environment": "^27.3.1", - "@jest/globals": "^27.3.1", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-mock": "^27.3.0", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.2.0" - } - }, - "jest-serializer": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", - "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz", - "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@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.3.1", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.3.1", - "jest-get-type": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-util": "^27.3.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.3.1", - "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true - } - } - }, - "jest-util": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz", - "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz", - "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.3.1", - "leven": "^3.1.0", - "pretty-format": "^27.3.1" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz", - "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==", - "dev": true, - "requires": { - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.3.1", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "requires": { - "@types/node": "*", - "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-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "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" - } - }, - "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 - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "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.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" - } - }, - "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" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "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" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "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 - }, - "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" - } - }, - "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==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "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==" - }, - "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-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.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" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "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 - }, - "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" - } - }, - "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-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" - }, - "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=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "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" - } - }, - "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 - }, - "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==" - }, - "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 - }, - "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=", - "dev": true - }, - "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==", - "dev": true - }, - "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=" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "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" - } - }, - "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 - }, - "pretty-format": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", - "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "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 - } - } - }, - "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" - } - }, - "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" - } - }, - "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 - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "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" - } - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "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" - } - }, - "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 - }, - "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==", - "dev": true, - "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" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "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" - } - }, - "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.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 - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "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==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "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" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": 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": { - "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" - } - } - } - }, - "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" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "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 - }, - "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.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "dev": true, - "requires": { - "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 - } - } - }, - "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 - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "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 - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "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==", - "dev": 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-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" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "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-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 - }, - "superagent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", - "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", - "dev": true, - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", - "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", - "readable-stream": "^3.6.0", - "semver": "^7.3.2" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true - } - } - }, - "supertest": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.1.6.tgz", - "integrity": "sha512-0hACYGNJ8OHRg8CRITeZOdbjur7NLuNs0mBjVhdpxi7hP6t3QIbOzLON5RTUmZcy2I9riuII3+Pr2C7yztrIIg==", - "dev": true, - "requires": { - "methods": "^1.1.2", - "superagent": "^6.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" - } - }, - "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" - } - }, - "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 - }, - "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" - } - }, - "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" - } - }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "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==" - }, - "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" - } - }, - "tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - } - }, - "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" - } - }, - "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" - } - }, - "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==", - "dev": 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" - } - }, - "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" - } - }, - "undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "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 - } - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "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" - } - }, - "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 - }, - "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-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" - } - }, - "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "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.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "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 - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "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" - } - }, - "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 - } - } -} diff --git a/2-Authorization-I/1-call-graph/package.json b/2-Authorization-I/1-call-graph/package.json deleted file mode 100644 index f94f54b..0000000 --- a/2-Authorization-I/1-call-graph/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "ms-identity-javascript-c2s1", - "version": "1.0.0", - "description": "Vanilla JavaScript single-page application using MSAL.js to authorize users for calling Microsoft Graph", - "main": "server.js", - "scripts": { - "start": "node server.js", - "dev": "nodemon server.js", - "test": "jest --forceExit" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Azure-Samples/ms-identity-javascript-tutorial.git" - }, - "keywords": [ - "javascript", - "msal", - "authorization", - "code", - "authentication", - "microsoft", - "ms-identity", - "azure-ad", - "spa", - "node.js", - "msal.js" - ], - "author": "derisen", - "license": "MIT", - "bugs": { - "url": "https://github.com/Azure-Samples/ms-identity-javascript-tutorial/issues" - }, - "homepage": "https://github.com/Azure-Samples/ms-identity-javascript-tutorial#readme", - "dependencies": { - "express": "^4.17.1", - "morgan": "^1.10.0" - }, - "devDependencies": { - "jest": "^27.0.6", - "nodemon": "^2.0.20", - "supertest": "^6.1.4" - } -} diff --git a/2-Authorization-I/1-call-graph/sample.test.js b/2-Authorization-I/1-call-graph/sample.test.js deleted file mode 100644 index 3b2b370..0000000 --- a/2-Authorization-I/1-call-graph/sample.test.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @jest-environment jsdom - */ - -const request = require('supertest'); -const path = require('path'); -const fs = require('fs'); - -const app = require('./server.js'); - -jest.dontMock('fs'); - -const html = fs.readFileSync(path.resolve(__dirname, './App/index.html'), 'utf8'); - -describe('Sanitize index page', () => { - beforeAll(async() => { - global.document.documentElement.innerHTML = html.toString(); - }); - - it('should have valid cdn link', () => { - expect(document.getElementById("load-msal").getAttribute("src")).toContain("https://alcdn.msauth.net/browser"); - }); -}); - -describe('Sanitize configuration object', () => { - beforeAll(() => { - global.msalConfig = require('./App/authConfig.js').msalConfig; - }); - - it('should define the config object', () => { - expect(msalConfig).toBeDefined(); - }); - - it('should not contain credentials', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(msalConfig.auth.clientId)).toBe(false); - }); - - it('should contain authority URI', () => { - const regexUri = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)?/gi; - expect(regexUri.test(msalConfig.auth.authority)).toBe(true); - }); -}); - -describe('Ensure pages served', () => { - - beforeAll(() => { - process.env.NODE_ENV = 'test'; - }); - - it('should get index page', async () => { - const res = await request(app) - .get('/'); - - const data = await fs.promises.readFile(path.join(__dirname, './App/index.html'), 'utf8'); - expect(res.statusCode).toEqual(200); - expect(res.text).toEqual(data); - }); -}); \ No newline at end of file diff --git a/2-Authorization-I/1-call-graph/server.js b/2-Authorization-I/1-call-graph/server.js deleted file mode 100644 index 9ee042d..0000000 --- a/2-Authorization-I/1-call-graph/server.js +++ /dev/null @@ -1,29 +0,0 @@ -const express = require('express'); -const morgan = require('morgan'); -const path = require('path'); - -const DEFAULT_PORT = process.env.PORT || 3000; - -// initialize express. -const app = express(); - -// Configure morgan module to log all requests. -app.use(morgan('dev')); - -// Setup app folders. -app.use(express.static('App')); - -app.get('/redirect', (req, res) => { - res.sendFile(path.join(__dirname + '/App/redirect.html')); -}); - -// Set up a route for index.html -app.get('*', (req, res) => { - res.sendFile(path.join(__dirname + '/index.html')); -}); - -app.listen(DEFAULT_PORT, () => { - console.log(`Sample app listening on port ${DEFAULT_PORT}!`) -}); - -module.exports = app; diff --git a/3-Authorization-II/1-call-api/API/app.js b/3-Authorization-II/1-call-api/API/app.js deleted file mode 100644 index c2f060a..0000000 --- a/3-Authorization-II/1-call-api/API/app.js +++ /dev/null @@ -1,160 +0,0 @@ -const express = require('express'); -const morgan = require('morgan'); -const cors = require('cors'); -const rateLimit = require('express-rate-limit'); - -const passport = require('passport'); -const passportAzureAd = require('passport-azure-ad'); - -const authConfig = require('./authConfig'); -const router = require('./routes/index'); - -const app = express(); - -/** - * If your app is behind a proxy, reverse proxy or a load balancer, consider - * letting express know that you are behind that proxy. To do so, uncomment - * the line below. - */ - -// app.set('trust proxy', /* numberOfProxies */); - -/** - * HTTP request handlers should not perform expensive operations such as accessing the file system, - * executing an operating system command or interacting with a database without limiting the rate at - * which requests are accepted. Otherwise, the application becomes vulnerable to denial-of-service attacks - * where an attacker can cause the application to crash or become unresponsive by issuing a large number of - * requests at the same time. For more information, visit: https://cheatsheetseries.owasp.org/cheatsheets/Denial_of_Service_Cheat_Sheet.html - */ - const limiter = rateLimit({ - windowMs: 15 * 60 * 1000, // 15 minutes - max: 100, // Limit each IP to 100 requests per `window` (here, per 15 minutes) - standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers - legacyHeaders: false, // Disable the `X-RateLimit-*` headers -}); - -// Apply the rate limiting middleware to all requests -app.use(limiter) - -/** - * Enable CORS middleware. In production, modify as to allow only designated origins and methods. - * If you are using Azure App Service, we recommend removing the line below and configure CORS on the App Service itself. - */ -app.use(cors()); - -app.use(express.json()); -app.use(express.urlencoded({ extended: false })); -app.use(morgan('dev')); - -const bearerStrategy = new passportAzureAd.BearerStrategy({ - identityMetadata: `https://${authConfig.metadata.authority}/${authConfig.credentials.tenantID}/${authConfig.metadata.version}/${authConfig.metadata.discovery}`, - issuer: `https://${authConfig.metadata.authority}/${authConfig.credentials.tenantID}/${authConfig.metadata.version}`, - clientID: authConfig.credentials.clientID, - audience: authConfig.credentials.clientID, // audience is this application - validateIssuer: authConfig.settings.validateIssuer, - passReqToCallback: authConfig.settings.passReqToCallback, - loggingLevel: authConfig.settings.loggingLevel, - loggingNoPII: authConfig.settings.loggingNoPII, -}, (req, token, done) => { - - /** - * Below you can do extended token validation and check for additional claims, such as: - * - check if the caller's tenant is in the allowed tenants list via the 'tid' claim (for multi-tenant applications) - * - check if the caller's account is homed or guest via the 'acct' optional claim - * - check if the caller belongs to right roles or groups via the 'roles' or 'groups' claim, respectively - * - * Bear in mind that you can do any of the above checks within the individual routes and/or controllers as well. - * For more information, visit: https://docs.microsoft.com/azure/active-directory/develop/access-tokens#validate-the-user-has-permission-to-access-this-data - */ - - - /** - * Lines below verifies if the caller's client ID is in the list of allowed clients. - * This ensures only the applications with the right client ID can access this API. - * To do so, we use "azp" claim in the access token. Uncomment the lines below to enable this check. - */ - - // const myAllowedClientsList = [ - // /* add here the client IDs of the applications that are allowed to call this API */ - // ] - - // if (!myAllowedClientsList.includes(token.azp)) { - // return done(new Error('Unauthorized'), {}, "Client not allowed"); - // } - - - /** - * Access tokens that have neither the 'scp' (for delegated permissions) nor - * 'roles' (for application permissions) claim are not to be honored. - */ - if (!token.hasOwnProperty('scp') && !token.hasOwnProperty('roles')) { - return done(new Error('Unauthorized'), null, "No delegated or app permission claims found"); - } - - /** - * If needed, pass down additional user info to route using the second argument below. - * This information will be available in the req.user object. - */ - return done(null, {}, token); -}); - -app.use(passport.initialize()); - -passport.use(bearerStrategy); - -app.use('/api', (req, res, next) => { - passport.authenticate('oauth-bearer', { - session: false, - - /** - * If you are building a multi-tenant application and you need supply the tenant ID or name dynamically, - * uncomment the line below and pass in the tenant information. For more information, see: - * https://github.com/AzureAD/passport-azure-ad#423-options-available-for-passportauthenticate - */ - - // tenantIdOrName: - - }, (err, user, info) => { - if (err) { - /** - * An error occurred during authorization. Either pass the error to the next function - * for Express error handler to handle, or send a response with the appropriate status code. - */ - return res.status(401).json({ error: err.message }); - } - - if (!user) { - // If no user object found, send a 401 response. - return res.status(401).json({ error: 'Unauthorized' }); - } - - if (info) { - // access token payload will be available in req.authInfo downstream - req.authInfo = info; - return next(); - } - })(req, res, next); - }, - router, // the router with all the routes - (err, req, res, next) => { - /** - * Add your custom error handling logic here. For more information, see: - * http://expressjs.com/en/guide/error-handling.html - */ - - // set locals, only providing error in development - res.locals.message = err.message; - res.locals.error = req.app.get('env') === 'development' ? err : {}; - - // send error response - res.status(err.status || 500).send(err); - } -); - -const port = process.env.PORT || 5000; - -app.listen(port, () => { - console.log('Listening on port ' + port); -}); - -module.exports = app; diff --git a/3-Authorization-II/1-call-api/API/auth/permissionUtils.js b/3-Authorization-II/1-call-api/API/auth/permissionUtils.js deleted file mode 100644 index 18aadb2..0000000 --- a/3-Authorization-II/1-call-api/API/auth/permissionUtils.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Indicates whether the access token was issued to a user or an application. - * @param {Object} accessTokenPayload - * @returns {boolean} - */ -const isAppOnlyToken = (accessTokenPayload) => { - /** - * An access token issued by Azure AD will have at least one of the two claims. Access tokens - * issued to a user will have the 'scp' claim. Access tokens issued to an application will have - * the roles claim. Access tokens that contain both claims are issued only to users, where the scp - * claim designates the delegated permissions, while the roles claim designates the user's role. - * - * To determine whether an access token was issued to a user (i.e delegated) or an application - * more easily, we recommend enabling the optional claim 'idtyp'. For more information, see: - * https://docs.microsoft.com/azure/active-directory/develop/access-tokens#user-and-application-tokens - */ - if (!accessTokenPayload.hasOwnProperty('idtyp')) { - if (accessTokenPayload.hasOwnProperty('scp')) { - return false; - } else if (!accessTokenPayload.hasOwnProperty('scp') && accessTokenPayload.hasOwnProperty('roles')) { - return true; - } - } - - return accessTokenPayload.idtyp === 'app'; -}; - -/** - * Ensures that the access token has the specified delegated permissions. - * @param {Object} accessTokenPayload: Parsed access token payload - * @param {Array} requiredPermission: list of required permissions - * @returns {boolean} - */ - const hasRequiredDelegatedPermissions = (accessTokenPayload, requiredPermission) => { - const normalizedRequiredPermissions = requiredPermission.map(permission => permission.toUpperCase()); - - if (accessTokenPayload.hasOwnProperty('scp') && accessTokenPayload.scp.split(' ') - .some(claim => normalizedRequiredPermissions.includes(claim.toUpperCase()))) { - return true; - } - - return false; -} - -/** - * Ensures that the access token has the specified application permissions. - * @param {Object} accessTokenPayload: Parsed access token payload - * @param {Array} requiredPermission: list of required permissions - * @returns {boolean} - */ -const hasRequiredApplicationPermissions = (accessTokenPayload, requiredPermission) => { - const normalizedRequiredPermissions = requiredPermission.map(permission => permission.toUpperCase()); - - if (accessTokenPayload.hasOwnProperty('roles') && accessTokenPayload.roles - .some(claim => normalizedRequiredPermissions.includes(claim.toUpperCase()))) { - return true; - } - - return false; -} - -module.exports = { - isAppOnlyToken, - hasRequiredDelegatedPermissions, - hasRequiredApplicationPermissions, -} diff --git a/3-Authorization-II/1-call-api/API/authConfig.js b/3-Authorization-II/1-call-api/API/authConfig.js deleted file mode 100644 index 7a9f04f..0000000 --- a/3-Authorization-II/1-call-api/API/authConfig.js +++ /dev/null @@ -1,32 +0,0 @@ -const passportConfig = { - credentials: { - tenantID: "Enter_the_Tenant_Info_Here", - clientID: "Enter_the_Application_Id_Here" - }, - metadata: { - authority: "login.microsoftonline.com", - discovery: ".well-known/openid-configuration", - version: "v2.0" - }, - settings: { - validateIssuer: true, - passReqToCallback: true, - loggingLevel: "info", - loggingNoPII: true, - }, - protectedRoutes: { - todolist: { - endpoint: "/api/todolist", - delegatedPermissions: { - read: ["Todolist.Read", "Todolist.ReadWrite"], - write: ["Todolist.ReadWrite"] - }, - applicationPermissions: { - read: ["Todolist.Read.All", "Todolist.ReadWrite.All"], - write: ["Todolist.ReadWrite.All"] - } - } - } -} - -module.exports = passportConfig; diff --git a/3-Authorization-II/1-call-api/API/controllers/todolist.js b/3-Authorization-II/1-call-api/API/controllers/todolist.js deleted file mode 100644 index 6e84040..0000000 --- a/3-Authorization-II/1-call-api/API/controllers/todolist.js +++ /dev/null @@ -1,157 +0,0 @@ -const lowdb = require('lowdb'); -const FileSync = require('lowdb/adapters/FileSync'); -const adapter = new FileSync('./data/db.json'); -const db = lowdb(adapter); -const { v4: uuidv4 } = require('uuid'); - -const { - isAppOnlyToken, - hasRequiredDelegatedPermissions, - hasRequiredApplicationPermissions -} = require('../auth/permissionUtils'); - -const authConfig = require('../authConfig'); - -exports.getTodo = (req, res, next) => { - if (isAppOnlyToken(req.authInfo)) { - if (hasRequiredApplicationPermissions(req.authInfo, authConfig.protectedRoutes.todolist.applicationPermissions.read)) { - try { - const id = req.params.id; - - const todo = db.get('todos') - .find({ id: id }) - .value(); - - res.status(200).send(todo); - } catch (error) { - next(error); - } - } else { - next(new Error('Application does not have the required permissions')) - } - } else { - if (hasRequiredDelegatedPermissions(req.authInfo, authConfig.protectedRoutes.todolist.delegatedPermissions.read)) { - try { - /** - * The 'oid' (object id) is the only claim that should be used to uniquely identify - * a user in an Azure AD tenant. The token might have one or more of the following claim, - * that might seem like a unique identifier, but is not and should not be used as such, - * especially for systems which act as system of record (SOR): - * - * - upn (user principal name): might be unique amongst the active set of users in a tenant but - * tend to get reassigned to new employees as employees leave the organization and - * others take their place or might change to reflect a personal change like marriage. - * - * - email: might be unique amongst the active set of users in a tenant but tend to get - * reassigned to new employees as employees leave the organization and others take their place. - */ - const owner = req.authInfo['oid']; - const id = req.params.id; - - const todo = db.get('todos') - .filter({ owner: owner }) - .find({ id: id }) - .value(); - - res.status(200).send(todo); - } catch (error) { - next(error); - } - } else { - next(new Error('User does not have the required permissions')) - } - } -} - -exports.getTodos = (req, res, next) => { - if (isAppOnlyToken(req.authInfo)) { - if (hasRequiredApplicationPermissions(req.authInfo, authConfig.protectedRoutes.todolist.applicationPermissions.read)) { - try { - const todos = db.get('todos') - .value(); - - res.status(200).send(todos); - } catch (error) { - next(error); - } - } else { - next(new Error('Application does not have the required permissions')) - } - } else { - if (hasRequiredDelegatedPermissions(req.authInfo, authConfig.protectedRoutes.todolist.delegatedPermissions.read)) { - try { - const owner = req.authInfo['oid']; - - const todos = db.get('todos') - .filter({ owner: owner }) - .value(); - - res.status(200).send(todos); - } catch (error) { - next(error); - } - } else { - next(new Error('User does not have the required permissions')) - } - } -} - -exports.postTodo = (req, res, next) => { - if (hasRequiredDelegatedPermissions(req.authInfo, authConfig.protectedRoutes.todolist.delegatedPermissions.write) - || - hasRequiredApplicationPermissions(req.authInfo, authConfig.protectedRoutes.todolist.applicationPermissions.write) - ) { - try { - const todo = { - description: req.body.description, - id: uuidv4(), - owner: req.authInfo['oid'] // oid is the only claim that should be used to uniquely identify a user in an Azure AD tenant - }; - - db.get('todos').push(todo).write(); - - res.status(200).json(todo); - } catch (error) { - next(error); - } - } else ( - next(new Error('User or application does not have the required permissions')) - ) -} - -exports.deleteTodo = (req, res, next) => { - if (isAppOnlyToken(req.authInfo)) { - if (hasRequiredApplicationPermissions(req.authInfo, authConfig.protectedRoutes.todolist.applicationPermissions.write)) { - try { - const id = req.params.id; - - db.get('todos') - .remove({ id: id }) - .write(); - - res.status(200).json({ message: "success" }); - } catch (error) { - next(error); - } - } else { - next(new Error('Application does not have the required permissions')) - } - } else { - if (hasRequiredDelegatedPermissions(req.authInfo, authConfig.protectedRoutes.todolist.delegatedPermissions.write)) { - try { - const id = req.params.id; - const owner = req.authInfo['oid']; - - db.get('todos') - .remove({ owner: owner, id: id }) - .write(); - - res.status(200).json({ message: "success" }); - } catch (error) { - next(error); - } - } else { - next(new Error('User does not have the required permissions')) - } - } -} diff --git a/3-Authorization-II/1-call-api/API/data/db.json b/3-Authorization-II/1-call-api/API/data/db.json deleted file mode 100644 index 652b5cc..0000000 --- a/3-Authorization-II/1-call-api/API/data/db.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "todos": [] -} \ No newline at end of file diff --git a/3-Authorization-II/1-call-api/API/package-lock.json b/3-Authorization-II/1-call-api/API/package-lock.json deleted file mode 100644 index a2d40b1..0000000 --- a/3-Authorization-II/1-call-api/API/package-lock.json +++ /dev/null @@ -1,5081 +0,0 @@ -{ - "name": "ms-identity-react-c3s1", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ms-identity-react-c3s1", - "version": "1.0.0", - "dependencies": { - "cors": "^2.8.5", - "express": "^4.18.1", - "express-rate-limit": "^6.5.2", - "lowdb": "^1.0.0", - "morgan": "^1.10.0", - "passport": "^0.6.0", - "passport-azure-ad": "^4.3.3", - "uuid": "^9.0.0" - }, - "devDependencies": { - "jest": "^28.1.1", - "nodemon": "^2.0.16", - "supertest": "^6.2.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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, - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/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==", - "dev": true - }, - "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, - "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-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.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, - "dependencies": { - "@babel/types": "^7.24.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, - "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, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "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, - "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, - "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, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "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, - "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/highlight/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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.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-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-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-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.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "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, - "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/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/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==", - "dev": true - }, - "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, - "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/@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/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": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.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": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", - "dev": true, - "dependencies": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", - "dev": true, - "dependencies": { - "jest-get-type": "^28.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", - "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "@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": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.13", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "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": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.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.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "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/node": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", - "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "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/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "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==", - "dev": true - }, - "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/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==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/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/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==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "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/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", - "dev": true, - "dependencies": { - "@jest/transform": "^28.1.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.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": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", - "dev": true, - "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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "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": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^28.1.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true - }, - "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/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/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "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/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "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" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "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==", - "dev": true - }, - "node_modules/bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "engines": [ - "node >=0.10.0" - ], - "bin": { - "bunyan": "bin/bunyan" - }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-manager": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-3.6.3.tgz", - "integrity": "sha512-dS4DnV6c6cQcVH5OxzIU1XZaACXwvVIiUPkFytnRmLOACuBGv3GQgRQ1RJGRRw4/9DF14ZK2RFlZu1TUgDniMg==", - "dependencies": { - "async": "3.2.3", - "lodash.clonedeep": "^4.5.0", - "lru-cache": "6.0.0" - } - }, - "node_modules/cache-manager/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/cache-manager/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/cache-manager/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/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "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/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/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/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "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, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.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-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/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/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "devOptional": 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==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "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 - }, - "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/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/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/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "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/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.14.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "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==", - "dev": true - }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "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/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==" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "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": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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==", - "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-rate-limit": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz", - "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", - "engines": { - "node": ">= 12.9.0" - }, - "peerDependencies": { - "express": "^4 || ^5" - } - }, - "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-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==", - "dev": true - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "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==", - "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/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/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, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "dev": true, - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.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/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "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.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "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==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "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/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/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "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/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==", - "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/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/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/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/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/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-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "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": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "devOptional": true, - "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/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-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "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-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/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-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-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-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "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.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "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-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-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/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==", - "dev": true - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", - "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", - "dev": true, - "dependencies": { - "@jest/core": "^28.1.3", - "@jest/types": "^28.1.3", - "import-local": "^3.0.2", - "jest-cli": "^28.1.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", - "dev": true, - "dependencies": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.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": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", - "dev": true, - "dependencies": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "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": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "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.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "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-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "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/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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/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-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/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "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/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/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/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/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" - }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, - "node_modules/lowdb": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz", - "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==", - "dependencies": { - "graceful-fs": "^4.1.3", - "is-promise": "^2.1.0", - "lodash": "4", - "pify": "^3.0.0", - "steno": "^0.4.1" - }, - "engines": { - "node": ">=4" - } - }, - "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/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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "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/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "optional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "optional": true, - "engines": { - "node": "*" - } - }, - "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/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "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/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-jose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-jose/-/node-jose-2.2.0.tgz", - "integrity": "sha512-XPCvJRr94SjLrSIm4pbYHKLEaOsDvJCpyFw/6V/KK/IXmyZ6SFBzAUDO9HQf4DB/nTEFcRGH87mNciOP23kFjw==", - "dependencies": { - "base64url": "^3.0.1", - "buffer": "^6.0.3", - "es6-promise": "^4.2.8", - "lodash": "^4.17.21", - "long": "^5.2.0", - "node-forge": "^1.2.1", - "pako": "^2.0.4", - "process": "^0.11.10", - "uuid": "^9.0.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/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/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nodemon/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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "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/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/oauth": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", - "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "devOptional": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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/p-locate/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/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/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" - }, - "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/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/passport": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", - "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", - "dependencies": { - "passport-strategy": "1.x.x", - "pause": "0.0.1", - "utils-merge": "^1.0.1" - }, - "engines": { - "node": ">= 0.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jaredhanson" - } - }, - "node_modules/passport-azure-ad": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/passport-azure-ad/-/passport-azure-ad-4.3.5.tgz", - "integrity": "sha512-LBpXEght7hCMuMNFK4oegdN0uPBa3lpDMy71zQoB0zPg1RrGwdzpjwTiN1WzN0hY77fLyjz9tBr3TGAxnSgtEg==", - "dependencies": { - "async": "^3.2.3", - "base64url": "^3.0.0", - "bunyan": "^1.8.14", - "cache-manager": "^3.6.1", - "https-proxy-agent": "^5.0.0", - "jws": "^3.1.3", - "lodash": "^4.11.2", - "node-jose": "^2.2.0", - "oauth": "0.9.15", - "passport": "^0.6.0", - "valid-url": "^1.0.6" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "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/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "devOptional": true, - "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==", - "dev": true - }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "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/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "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/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "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/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/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/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "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/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.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-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.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "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/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "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==", - "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/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "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==", - "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/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "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/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==", - "dev": true - }, - "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "dev": true, - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/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/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/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/steno": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", - "integrity": "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==", - "dependencies": { - "graceful-fs": "^4.1.3" - } - }, - "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-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/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "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-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-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/superagent": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz", - "integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==", - "dev": true, - "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": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/superagent/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/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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/superagent/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==", - "dev": true - }, - "node_modules/superagent/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/superagent/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/supertest": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", - "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.0.5" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "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-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.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==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/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/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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "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/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/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==", - "dev": 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/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "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" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "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/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/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==", - "dev": true, - "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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "devOptional": true - }, - "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, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "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/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "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/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, - "engines": { - "node": ">=12" - } - }, - "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" - } - } - } -} diff --git a/3-Authorization-II/1-call-api/API/package.json b/3-Authorization-II/1-call-api/API/package.json deleted file mode 100644 index faa8b40..0000000 --- a/3-Authorization-II/1-call-api/API/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "ms-identity-react-c3s1", - "version": "1.0.0", - "description": "A Node.js & Express web API accepting authorized calls with Azure Active Directory", - "author": "derisen", - "scripts": { - "start": "node app.js", - "dev": "nodemon app.js", - "test": "jest --forceExit" - }, - "dependencies": { - "cors": "^2.8.5", - "express": "^4.18.1", - "express-rate-limit": "^6.5.2", - "lowdb": "^1.0.0", - "morgan": "^1.10.0", - "passport": "^0.6.0", - "passport-azure-ad": "^4.3.3", - "uuid": "^9.0.0" - }, - "main": "app.js", - "repository": { - "type": "git", - "url": "git+https://github.com/Azure-Samples/ms-identity-javascript-react-tutorial.git" - }, - "keywords": [ - "azure-ad", - "ms-identity", - "node", - "api" - ], - "bugs": { - "url": "https://github.com/Azure-Samples/ms-identity-javascript-react-tutorial/issues" - }, - "homepage": "https://github.com/Azure-Samples/ms-identity-javascript-react-tutorial#readme", - "devDependencies": { - "jest": "^28.1.1", - "nodemon": "^2.0.16", - "supertest": "^6.2.3" - } -} diff --git a/3-Authorization-II/1-call-api/API/routes/index.js b/3-Authorization-II/1-call-api/API/routes/index.js deleted file mode 100644 index abb00cd..0000000 --- a/3-Authorization-II/1-call-api/API/routes/index.js +++ /dev/null @@ -1,16 +0,0 @@ -const express = require('express'); - -const todolist = require('../controllers/todolist'); - -// initialize router -const router = express.Router(); - -router.get('/todolist', todolist.getTodos); - -router.get('/todolist/:id', todolist.getTodo); - -router.post('/todolist', todolist.postTodo); - -router.delete('/todolist/:id', todolist.deleteTodo); - -module.exports = router; diff --git a/3-Authorization-II/1-call-api/API/sample.test.js b/3-Authorization-II/1-call-api/API/sample.test.js deleted file mode 100644 index 9bad8eb..0000000 --- a/3-Authorization-II/1-call-api/API/sample.test.js +++ /dev/null @@ -1,37 +0,0 @@ -const request = require('supertest'); - -const app = require('./app.js'); - -describe('Sanitize configuration object', () => { - beforeAll(() => { - global.config = require('./authConfig.js'); - }); - - it('should define the config object', () => { - expect(config).toBeDefined(); - }); - - it('should not contain client Id', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(config.credentials.clientID)).toBe(false); - }); - - it('should not contain tenant Id', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(config.credentials.tenantId)).toBe(false); - }); -}); - -describe('Ensure routes served', () => { - - beforeAll(() => { - process.env.NODE_ENV = 'test'; - }); - - it('should protect todolist endpoint', async () => { - const res = await request(app) - .get('/api'); - - expect(res.statusCode).toEqual(401); - }); -}); diff --git a/3-Authorization-II/1-call-api/AppCreationScripts/AppCreationScripts.md b/3-Authorization-II/1-call-api/AppCreationScripts/AppCreationScripts.md deleted file mode 100644 index b56d506..0000000 --- a/3-Authorization-II/1-call-api/AppCreationScripts/AppCreationScripts.md +++ /dev/null @@ -1,138 +0,0 @@ -# Registering sample apps with the Microsoft identity platform and updating configuration files using PowerShell - -## Overview - -### Quick summary - -1. Run the script to create your Microsoft Entra application and configure the code of the sample application accordingly. - - ```PowerShell - cd .\AppCreationScripts\ - .\Configure.ps1 -TenantId "your test tenant's id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" - ``` - -### More details - -- [Goal of the provided scripts](#goal-of-the-provided-scripts) - - [Presentation of the scripts](#presentation-of-the-scripts) - - [Usage pattern for tests and DevOps scenarios](#usage-pattern-for-tests-and-DevOps-scenarios) -- [How to use the app creation scripts?](#how-to-use-the-app-creation-scripts) - - [Pre-requisites](#pre-requisites) - - [Run the script and start running](#run-the-script-and-start-running) - - [Four ways to run the script](#four-ways-to-run-the-script) - - [Option 1 (interactive)](#option-1-interactive) - - [Option 2 (Interactive, but create apps in a specified tenant)](#option-3-Interactive-but-create-apps-in-a-specified-tenant) - - [Running the script on Azure Sovereign clouds](#running-the-script-on-Azure-Sovereign-clouds) - -## Goal of the provided scripts - -### Presentation of the scripts - -This sample comes with two PowerShell scripts, which automate the creation of the Microsoft Entra applications, and the configuration of the code for this sample. Once you run them, you will only need to build the solution and you are good to test. - -These scripts are: - -- `Configure.ps1` which: - - creates Microsoft Entra applications and their related objects (permissions, dependencies, secrets, app roles), - - changes the configuration files in the sample projects. - - creates a summary file named `createdApps.html` in the folder from which you ran the script, and containing, for each Microsoft Entra application it created: - - the identifier of the application - - the AppId of the application - - the url of its registration in the [Microsoft Entra admin center](https://entra.microsoft.com). - -- `Cleanup.ps1` which cleans-up the Microsoft Entra objects created by `Configure.ps1`. Note that this script does not revert the changes done in the configuration files, though. You will need to undo the change from source control (from Visual Studio, or from the command line using, for instance, `git reset`). - -> :information_source: If the sample supports using certificates instead of client secrets, this folder will contain an additional set of scripts: `Configure-WithCertificates.ps1` and `Cleanup-WithCertificates.ps1`. You can use them in the same way to register app(s) that use certificates instead of client secrets. - -### Usage pattern for tests and DevOps scenarios - -The `Configure.ps1` will stop if it tries to create a Microsoft Entra application which already exists in the tenant. For this, if you are using the script to try/test the sample, or in DevOps scenarios, you might want to run `Cleanup.ps1` just before `Configure.ps1`. This is what is shown in the steps below. - -## How to use the app creation scripts? - -### Pre-requisites - -1. PowerShell 7 or later (see: [installing PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell)) -1. Open PowerShell (On Windows, press `Windows-R` and type `PowerShell` in the search window) - -### (Optionally) install Microsoft.Graph.Applications PowerShell modules - -The scripts install the required PowerShell module (Microsoft.Graph.Applications) for the current user if needed. However, if you want to install if for all users on the machine, you can follow the following steps: - -1. If you have never done it already, in the PowerShell window, install the Microsoft.Graph.Applications PowerShell modules. For this: - - 1. Open PowerShell - 2. Type: - - ```PowerShell - Install-Module Microsoft.Graph.Applications - ``` - - or if you want the modules to be installed for the current user only, run: - - ```PowerShell - Install-Module Microsoft.Graph.Applications -Scope CurrentUser - ``` - -### Run the script and start running - -1. Go to the `AppCreationScripts` sub-folder. From the folder where you cloned the repo, - - ```PowerShell - cd AppCreationScripts - ``` - -1. Run the scripts. See below for the [four options](#four-ways-to-run-the-script) to do that. -1. Open the Visual Studio solution, and in the solution's context menu, choose **Set Startup Projects**. -1. select **Start** for the projects - -You're done! - -### Two ways to run the script - -We advise four ways of running the script: - -- Interactive: you will be prompted for credentials, and the scripts decide in which tenant to create the objects, -- Interactive in specific tenant: you will provide the tenant in which you want to create the objects and then you will be prompted for credentials, and the scripts will create the objects, - -Here are the details on how to do this. - -#### Option 1 (interactive) - -- Just run ``.\Configure.ps1``, and you will be prompted to sign-in (email address, password, and if needed MFA). -- The script will be run as the signed-in user and will use the tenant in which the user is defined. - -Note that the script will choose the tenant in which to create the applications, based on the user. Also to run the `Cleanup.ps1` script, you will need to re-sign-in. - -#### Option 2 (Interactive, but create apps in a specified tenant) - - if you want to create the apps in a particular tenant, you can use the following option: - -- Open the [Microsoft Entra admin center](https://entra.microsoft.com) -- Select the Microsoft Entra ID you are interested in (in the combo-box below your name on the top right of the browser window) -- Find the "Active Directory" object in this tenant -- Go to **Properties** and copy the content of the **Directory Id** property -- Then use the full syntax to run the scripts: - -```PowerShell -$tenantId = "yourTenantIdGuid" -. .\Cleanup.ps1 -TenantId $tenantId -. .\Configure.ps1 -TenantId $tenantId -``` - -### Running the script on Azure Sovereign clouds - -All the four options listed above can be used on any Azure Sovereign clouds. By default, the script targets `AzureCloud`, but it can be changed using the parameter `-AzureEnvironmentName`. - -The acceptable values for this parameter are: - -- AzureCloud -- AzureChinaCloud -- AzureUSGovernment - -Example: - - ```PowerShell - . .\Cleanup.ps1 -AzureEnvironmentName "AzureUSGovernment" - . .\Configure.ps1 -AzureEnvironmentName "AzureUSGovernment" - ``` diff --git a/3-Authorization-II/1-call-api/AppCreationScripts/Cleanup.ps1 b/3-Authorization-II/1-call-api/AppCreationScripts/Cleanup.ps1 deleted file mode 100644 index 6ef7fb2..0000000 --- a/3-Authorization-II/1-call-api/AppCreationScripts/Cleanup.ps1 +++ /dev/null @@ -1,189 +0,0 @@ -#Requires -Version 7 - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - - -Function Cleanup -{ - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - <# - .Description - This function removes the Azure AD applications for the sample. These applications were created by the Configure.ps1 script - #> - - # $tenantId is the Active Directory Tenant. This is a GUID which represents the "Directory ID" of the AzureAD tenant - # into which you want to create the apps. Look it up in the Azure portal in the "Properties" of the Azure AD. - - # Connect to the Microsoft Graph API - Write-Host "Connecting to Microsoft Graph" - - - if ($tenantId -eq "") - { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else - { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Removes the applications - Write-Host "Cleaning-up applications from tenant '$tenantId'" - - Write-Host "Removing 'service' (msal-node-api) if needed" - try - { - Get-MgApplication -Filter "DisplayName eq 'msal-node-api'" | ForEach-Object {Remove-MgApplication -ApplicationId $_.Id } - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove the application 'msal-node-api'. Error is $message. Try deleting manually." -ForegroundColor White -BackgroundColor Red - } - - Write-Host "Making sure there are no more (msal-node-api) applications found, will remove if needed..." - $apps = Get-MgApplication -Filter "DisplayName eq 'msal-node-api'" | Format-List Id, DisplayName, AppId, SignInAudience, PublisherDomain - - if ($apps) - { - Remove-MgApplication -ApplicationId $apps.Id - } - - foreach ($app in $apps) - { - Remove-MgApplication -ApplicationId $app.Id - Write-Host "Removed msal-node-api.." - } - - # also remove service principals of this app - try - { - Get-MgServicePrincipal -filter "DisplayName eq 'msal-node-api'" | ForEach-Object {Remove-MgServicePrincipal -ServicePrincipalId $_.Id -Confirm:$false} - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove ServicePrincipal 'msal-node-api'. Error is $message. Try deleting manually from Enterprise applications." -ForegroundColor White -BackgroundColor Red - } - Write-Host "Removing 'client' (msal-javascript-spa) if needed" - try - { - Get-MgApplication -Filter "DisplayName eq 'msal-javascript-spa'" | ForEach-Object {Remove-MgApplication -ApplicationId $_.Id } - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove the application 'msal-javascript-spa'. Error is $message. Try deleting manually." -ForegroundColor White -BackgroundColor Red - } - - Write-Host "Making sure there are no more (msal-javascript-spa) applications found, will remove if needed..." - $apps = Get-MgApplication -Filter "DisplayName eq 'msal-javascript-spa'" | Format-List Id, DisplayName, AppId, SignInAudience, PublisherDomain - - if ($apps) - { - Remove-MgApplication -ApplicationId $apps.Id - } - - foreach ($app in $apps) - { - Remove-MgApplication -ApplicationId $app.Id - Write-Host "Removed msal-javascript-spa.." - } - - # also remove service principals of this app - try - { - Get-MgServicePrincipal -filter "DisplayName eq 'msal-javascript-spa'" | ForEach-Object {Remove-MgServicePrincipal -ServicePrincipalId $_.Id -Confirm:$false} - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove ServicePrincipal 'msal-javascript-spa'. Error is $message. Try deleting manually from Enterprise applications." -ForegroundColor White -BackgroundColor Red - } -} - -# Pre-requisites -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -$ErrorActionPreference = "Stop" - - -try -{ - Cleanup -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} - -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph diff --git a/3-Authorization-II/1-call-api/AppCreationScripts/Configure.ps1 b/3-Authorization-II/1-call-api/AppCreationScripts/Configure.ps1 deleted file mode 100644 index e526a87..0000000 --- a/3-Authorization-II/1-call-api/AppCreationScripts/Configure.ps1 +++ /dev/null @@ -1,497 +0,0 @@ -#Requires -Version 7 - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - -<# - This script creates the Azure AD applications needed for this sample and updates the configuration files - for the visual Studio projects from the data in the Azure AD applications. - - In case you don't have Microsoft.Graph.Applications already installed, the script will automatically install it for the current user - - There are two ways to run this script. For more information, read the AppCreationScripts.md file in the same folder as this script. -#> - -# Adds the requiredAccesses (expressed as a pipe separated string) to the requiredAccess structure -# The exposed permissions are in the $exposedPermissions collection, and the type of permission (Scope | Role) is -# described in $permissionType -Function AddResourcePermission($requiredAccess, ` - $exposedPermissions, [string]$requiredAccesses, [string]$permissionType) -{ - foreach($permission in $requiredAccesses.Trim().Split("|")) - { - foreach($exposedPermission in $exposedPermissions) - { - if ($exposedPermission.Value -eq $permission) - { - $resourceAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess - $resourceAccess.Type = $permissionType # Scope = Delegated permissions | Role = Application permissions - $resourceAccess.Id = $exposedPermission.Id # Read directory data - $requiredAccess.ResourceAccess += $resourceAccess - } - } - } -} - -# -# Example: GetRequiredPermissions "Microsoft Graph" "Graph.Read|User.Read" -# See also: http://stackoverflow.com/questions/42164581/how-to-configure-a-new-azure-ad-application-through-powershell -Function GetRequiredPermissions([string] $applicationDisplayName, [string] $requiredDelegatedPermissions, [string]$requiredApplicationPermissions, $servicePrincipal) -{ - # If we are passed the service principal we use it directly, otherwise we find it from the display name (which might not be unique) - if ($servicePrincipal) - { - $sp = $servicePrincipal - } - else - { - $sp = Get-MgServicePrincipal -Filter "DisplayName eq '$applicationDisplayName'" - } - $appid = $sp.AppId - $requiredAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess - $requiredAccess.ResourceAppId = $appid - $requiredAccess.ResourceAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess] - - # $sp.Oauth2Permissions | Select Id,AdminConsentDisplayName,Value: To see the list of all the Delegated permissions for the application: - if ($requiredDelegatedPermissions) - { - AddResourcePermission $requiredAccess -exposedPermissions $sp.Oauth2PermissionScopes -requiredAccesses $requiredDelegatedPermissions -permissionType "Scope" - } - - # $sp.AppRoles | Select Id,AdminConsentDisplayName,Value: To see the list of all the Application permissions for the application - if ($requiredApplicationPermissions) - { - AddResourcePermission $requiredAccess -exposedPermissions $sp.AppRoles -requiredAccesses $requiredApplicationPermissions -permissionType "Role" - } - return $requiredAccess -} - - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function UpdateLine([string] $line, [string] $value) -{ - $index = $line.IndexOf(':') - $lineEnd = '' - - if($line[$line.Length - 1] -eq ','){ $lineEnd = ',' } - - if ($index -ige 0) - { - $line = $line.Substring(0, $index+1) + " " + '"' + $value+ '"' + $lineEnd - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function UpdateTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = UpdateLine $line $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function ReplaceInLine([string] $line, [string] $key, [string] $value) -{ - $index = $line.IndexOf($key) - if ($index -ige 0) - { - $index2 = $index+$key.Length - $line = $line.Substring(0, $index) + $value + $line.Substring($index2) - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function ReplaceInTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = ReplaceInLine $line $key $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - -<#.Description - This function creates a new Azure AD scope (OAuth2Permission) with default and provided values -#> -Function CreateScope( [string] $value, [string] $userConsentDisplayName, [string] $userConsentDescription, [string] $adminConsentDisplayName, [string] $adminConsentDescription, [string] $consentType) -{ - $scope = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphPermissionScope - $scope.Id = New-Guid - $scope.Value = $value - $scope.UserConsentDisplayName = $userConsentDisplayName - $scope.UserConsentDescription = $userConsentDescription - $scope.AdminConsentDisplayName = $adminConsentDisplayName - $scope.AdminConsentDescription = $adminConsentDescription - $scope.IsEnabled = $true - $scope.Type = $consentType - return $scope -} - -<#.Description - This function creates a new Azure AD AppRole with default and provided values -#> -Function CreateAppRole([string] $types, [string] $name, [string] $description) -{ - $appRole = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphAppRole - $appRole.AllowedMemberTypes = New-Object System.Collections.Generic.List[string] - $typesArr = $types.Split(',') - foreach($type in $typesArr) - { - $appRole.AllowedMemberTypes += $type; - } - $appRole.DisplayName = $name - $appRole.Id = New-Guid - $appRole.IsEnabled = $true - $appRole.Description = $description - $appRole.Value = $name; - return $appRole -} - -<#.Description - This function takes a string as input and creates an instance of an Optional claim object -#> -Function CreateOptionalClaim([string] $name) -{ - <#.Description - This function creates a new Azure AD optional claims with default and provided values - #> - - $appClaim = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphOptionalClaim - $appClaim.AdditionalProperties = New-Object System.Collections.Generic.List[string] - $appClaim.Source = $null - $appClaim.Essential = $false - $appClaim.Name = $name - return $appClaim -} - -<#.Description - Primary entry method to create and configure app registrations -#> -Function ConfigureApplications -{ - <#.Description - This function creates the Azure AD applications for the sample in the provided Azure AD tenant and updates the - configuration files in the client and service project of the visual studio solution (App.Config and Web.Config) - so that they are consistent with the Applications parameters - #> - - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - # Connect to the Microsoft Graph API, non-interactive is not supported for the moment (Oct 2021) - Write-Host "Connecting to Microsoft Graph" - if ($tenantId -eq "") { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Create the service AAD application - Write-Host "Creating the AAD application (msal-node-api)" - # create the application - $serviceAadApplication = New-MgApplication -DisplayName "msal-node-api" ` - -Web ` - @{ ` - } ` - -Api ` - @{ ` - RequestedAccessTokenVersion = 2 ` - } ` - -SignInAudience AzureADMyOrg ` - #end of command - - $currentAppId = $serviceAadApplication.AppId - $currentAppObjectId = $serviceAadApplication.Id - - $serviceIdentifierUri = 'api://'+$currentAppId - Update-MgApplication -ApplicationId $currentAppObjectId -IdentifierUris @($serviceIdentifierUri) - - # create the service principal of the newly created application - $serviceServicePrincipal = New-MgServicePrincipal -AppId $currentAppId -Tags {WindowsAzureActiveDirectoryIntegratedApp} - - # add the user running the script as an app owner if needed - $owner = Get-MgApplicationOwner -ApplicationId $currentAppObjectId - if ($owner -eq $null) - { - New-MgApplicationOwnerByRef -ApplicationId $currentAppObjectId -BodyParameter @{"@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$user.ObjectId"} - Write-Host "'$($user.UserPrincipalName)' added as an application owner to app '$($serviceServicePrincipal.DisplayName)'" - } - - # Add Claims - - $optionalClaims = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphOptionalClaims - $optionalClaims.AccessToken = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphOptionalClaim] - $optionalClaims.IdToken = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphOptionalClaim] - $optionalClaims.Saml2Token = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphOptionalClaim] - - # Add Optional Claims - - $newClaim = CreateOptionalClaim -name "idtyp" - $optionalClaims.AccessToken += ($newClaim) - $newClaim = CreateOptionalClaim -name "acct" - $optionalClaims.AccessToken += ($newClaim) - Update-MgApplication -ApplicationId $currentAppObjectId -OptionalClaims $optionalClaims - - # Publish Application Permissions - $appRoles = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphAppRole] - $newRole = CreateAppRole -types "Application" -name "Todolist.Read.All" -description "e.g. Allows the app to read the signed-in user's files." - $appRoles.Add($newRole) - $newRole = CreateAppRole -types "Application" -name "Todolist.ReadWrite.All" -description "e.g. Allows the app to read the signed-in user's files." - $appRoles.Add($newRole) - Update-MgApplication -ApplicationId $currentAppObjectId -AppRoles $appRoles - - # rename the user_impersonation scope if it exists to match the readme steps or add a new scope - - # delete default scope i.e. User_impersonation - $scopes = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphPermissionScope] - $scope = $serviceAadApplication.Api.Oauth2PermissionScopes | Where-Object { $_.Value -eq "User_impersonation" } - - if($scope -ne $null) - { - # disable the scope - $scope.IsEnabled = $false - $scopes.Add($scope) - Update-MgApplication -ApplicationId $currentAppObjectId -Api @{Oauth2PermissionScopes = @($scopes)} - - # clear the scope - Update-MgApplication -ApplicationId $currentAppObjectId -Api @{Oauth2PermissionScopes = @()} - } - - $scopes = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphPermissionScope] - $scope = CreateScope -value Todolist.Read ` - -userConsentDisplayName "Todolist.Read" ` - -userConsentDescription "eg. Allows the app to read your files." ` - -adminConsentDisplayName "Todolist.Read" ` - -adminConsentDescription "e.g. Allows the app to read the signed-in user's files." ` - -consentType "User" ` - - - $scopes.Add($scope) - $scope = CreateScope -value Todolist.ReadWrite ` - -userConsentDisplayName "Todolist.ReadWrite" ` - -userConsentDescription "eg. Allows the app to read your files." ` - -adminConsentDisplayName "Todolist.ReadWrite" ` - -adminConsentDescription "e.g. Allows the app to read the signed-in user's files." ` - -consentType "User" ` - - - $scopes.Add($scope) - - # add/update scopes - Update-MgApplication -ApplicationId $currentAppObjectId -Api @{Oauth2PermissionScopes = @($scopes)} - Write-Host "Done creating the service application (msal-node-api)" - - # URL of the AAD application in the Azure portal - # Future? $servicePortalUrl = "https://portal.azure.com/#@"+$tenantName+"/blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Overview/appId/"+$currentAppId+"/objectId/"+$currentAppObjectId+"/isMSAApp/" - $servicePortalUrl = "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Overview/appId/"+$currentAppId+"/isMSAApp~/false" - - Add-Content -Value "

" -Path createdApps.html - - # print the registered app portal URL for any further navigation - Write-Host "Successfully registered and configured that app registration for 'msal-node-api' at `n $servicePortalUrl" -ForegroundColor Green - # Create the client AAD application - Write-Host "Creating the AAD application (msal-javascript-spa)" - # create the application - $clientAadApplication = New-MgApplication -DisplayName "msal-javascript-spa" ` - -Spa ` - @{ ` - RedirectUris = "http://localhost:3000", "http://localhost:3000/redirect"; ` - } ` - -SignInAudience AzureADMyOrg ` - #end of command - - $currentAppId = $clientAadApplication.AppId - $currentAppObjectId = $clientAadApplication.Id - - $tenantName = (Get-MgApplication -ApplicationId $currentAppObjectId).PublisherDomain - #Update-MgApplication -ApplicationId $currentAppObjectId -IdentifierUris @("https://$tenantName/msal-javascript-spa") - - # create the service principal of the newly created application - $clientServicePrincipal = New-MgServicePrincipal -AppId $currentAppId -Tags {WindowsAzureActiveDirectoryIntegratedApp} - - # add the user running the script as an app owner if needed - $owner = Get-MgApplicationOwner -ApplicationId $currentAppObjectId - if ($owner -eq $null) - { - New-MgApplicationOwnerByRef -ApplicationId $currentAppObjectId -BodyParameter @{"@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$user.ObjectId"} - Write-Host "'$($user.UserPrincipalName)' added as an application owner to app '$($clientServicePrincipal.DisplayName)'" - } - Write-Host "Done creating the client application (msal-javascript-spa)" - - # URL of the AAD application in the Azure portal - # Future? $clientPortalUrl = "https://portal.azure.com/#@"+$tenantName+"/blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Overview/appId/"+$currentAppId+"/objectId/"+$currentAppObjectId+"/isMSAApp/" - $clientPortalUrl = "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Overview/appId/"+$currentAppId+"/isMSAApp~/false" - - Add-Content -Value "" -Path createdApps.html - # Declare a list to hold RRA items - $requiredResourcesAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess] - - # Add Required Resources Access (from 'client' to 'service') - Write-Host "Getting access from 'client' to 'service'" - $requiredPermission = GetRequiredPermissions -applicationDisplayName "msal-node-api"` - -requiredDelegatedPermissions "Todolist.Read|Todolist.ReadWrite" - - $requiredResourcesAccess.Add($requiredPermission) - Write-Host "Added 'service' to the RRA list." - # Useful for RRA additions troubleshooting - # $requiredResourcesAccess.Count - # $requiredResourcesAccess - - Update-MgApplication -ApplicationId $currentAppObjectId -RequiredResourceAccess $requiredResourcesAccess - Write-Host "Granted permissions." - - - # print the registered app portal URL for any further navigation - Write-Host "Successfully registered and configured that app registration for 'msal-javascript-spa' at `n $clientPortalUrl" -ForegroundColor Green - - # Update config file for 'service' - # $configFile = $pwd.Path + "\..\API\authConfig.js" - $configFile = $(Resolve-Path ($pwd.Path + "\..\API\authConfig.js")) - - $dictionary = @{ "Enter_the_Application_Id_Here" = $serviceAadApplication.AppId;"Enter_the_Tenant_Info_Here" = $tenantId }; - - Write-Host "Updating the sample config '$configFile' with the following config values:" -ForegroundColor Yellow - $dictionary - Write-Host "-----------------" - - ReplaceInTextFile -configFilePath $configFile -dictionary $dictionary - - # Update config file for 'client' - # $configFile = $pwd.Path + "\..\SPA\public\authConfig.js" - $configFile = $(Resolve-Path ($pwd.Path + "\..\SPA\public\authConfig.js")) - - $dictionary = @{ "Enter_the_Application_Id_Here" = $clientAadApplication.AppId;"Enter_the_Tenant_Info_Here" = $tenantId;"Enter_the_Web_Api_Application_Id_Here" = $serviceAadApplication.AppId }; - - Write-Host "Updating the sample config '$configFile' with the following config values:" -ForegroundColor Yellow - $dictionary - Write-Host "-----------------" - - ReplaceInTextFile -configFilePath $configFile -dictionary $dictionary - Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" - Write-Host "IMPORTANT: Please follow the instructions below to complete a few manual step(s) in the Azure portal": - Write-Host "- For service" - Write-Host " - Navigate to $servicePortalUrl" - Write-Host " - Application 'service' publishes application permissions. Do remember to navigate to any client app(s) registration in the app portal and consent for those, (if required)" -ForegroundColor Red - Write-Host " - Application 'service' publishes delegated permissions. Do remember to navigate to any client app(s) registration in the app portal and consent for those, (if required)" -ForegroundColor Red - Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" - -Add-Content -Value "
ApplicationAppIdUrl in the Azure portal
service$currentAppIdmsal-node-api
client$currentAppIdmsal-javascript-spa
" -Path createdApps.html -} # end of ConfigureApplications function - -# Pre-requisites - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -Set-Content -Value "" -Path createdApps.html -Add-Content -Value "" -Path createdApps.html - -$ErrorActionPreference = "Stop" - -# Run interactively (will ask you for the tenant ID) - -try -{ - ConfigureApplications -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph \ No newline at end of file diff --git a/3-Authorization-II/1-call-api/AppCreationScripts/sample.json b/3-Authorization-II/1-call-api/AppCreationScripts/sample.json deleted file mode 100644 index 30c7a86..0000000 --- a/3-Authorization-II/1-call-api/AppCreationScripts/sample.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "Sample": { - "Author": "derisen", - "Title": "JavaScript single-page application using MSAL Brwoser to authorize users for calling a Express.js web API on Azure Active Directory", - "Level": 200, - "Client": "JavaScript SPA", - "Service": "Node.js web API", - "RepositoryUrl": "ms-identity-javascript-tutorial", - "Endpoint": "AAD v2.0", - "Languages": ["javascript", "nodejs"], - "Description": "A JavaScript single-page application using MSAL Browser to authorize users for calling a protected Express.js web API on Azure Active Directory", - "Products": ["azure-active-directory", "msal-js", "msal-js", "passport-azure-ad"] - }, - "AADApps": [ - { - "Id": "service", - "Name": "msal-node-api", - "Kind": "WebApi", - "Audience": "AzureADMyOrg", - "SDK": "MsalNode", - "SampleSubPath": "3-Authorization-II\\1-call-api\\API", - "Scopes": ["Todolist.Read", "Todolist.ReadWrite"], - "AppRoles": [ - { - "AllowedMemberTypes": ["Application"], - "Name": "Todolist.Read.All", - "Description": "Allow this application to read every users Todolist items" - }, - { - "AllowedMemberTypes": ["Application"], - "Name": "Todolist.ReadWrite.All", - "Description": "Allow this application to read and write every users Todolist items" - } - ], - "OptionalClaims": { - "AccessTokenClaims": ["idtyp", "acct"] - } - }, - { - "Id": "client", - "Name": "msal-javascript-spa", - "Kind": "SinglePageApplication", - "Audience": "AzureADMyOrg", - "HomePage": "http://localhost:3000", - "ReplyUrls": "http://localhost:3000, http://localhost:3000/redirect", - "SDK": "MsalJs", - "SampleSubPath": "3-Authorization-II\\1-call-api\\SPA", - "RequiredResourcesAccess": [ - { - "Resource": "service", - "DelegatedPermissions": ["Todolist.Read", "Todolist.ReadWrite"] - } - ] - } - ], - "CodeConfiguration": [ - { - "App": "service", - "SettingKind": "Replace", - "SettingFile": "\\..\\API\\authConfig.js", - "Mappings": [ - { - "key": "Enter_the_Application_Id_Here", - "value": ".AppId" - }, - { - "key": "Enter_the_Tenant_Info_Here", - "value": "$tenantId" - } - ] - }, - { - "App": "client", - "SettingKind": "Replace", - "SettingFile": "\\..\\SPA\\public\\authConfig.js", - "Mappings": [ - { - "key": "Enter_the_Application_Id_Here", - "value": ".AppId" - }, - { - "key": "Enter_the_Tenant_Info_Here", - "value": "$tenantId" - }, - { - "key": "Enter_the_Web_Api_Application_Id_Here", - "value": "service.AppId" - } - ] - } - ] -} \ No newline at end of file diff --git a/3-Authorization-II/1-call-api/README.md b/3-Authorization-II/1-call-api/README.md deleted file mode 100644 index ef485ad..0000000 --- a/3-Authorization-II/1-call-api/README.md +++ /dev/null @@ -1,499 +0,0 @@ -# Vanilla JavaScript single-page application (SPA) using MSAL.js to authorize users for calling a protected web API on Microsoft Entra ID - - 1. [Overview](#overview) - 1. [Scenario](#scenario) - 1. [Contents](#contents) - 1. [Prerequisites](#prerequisites) - 1. [Setup](#setup) - 1. [Registration](#registration) - 1. [Running the sample](#running-the-sample) - 1. [Explore the sample](#explore-the-sample) - 1. [About the code](#about-the-code) - 1. [More information](#more-information) - 1. [Community Help and Support](#community-help-and-support) - 1. [Contributing](#contributing) - 1. [Code of Conduct](#code-of-conduct) - -## Overview - -This sample demonstrates a Vanilla JavaScript single-page application (SPA) that lets users authenticate against [Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/fundamentals/active-directory-whatis) (Microsoft Entra ID) using the [Microsoft Authentication Library for JavaScript](https://github.com/AzureAD/microsoft-authentication-library-for-js) (MSAL.js), then acquires an **Access Token** for a protected web API for the signed-in user and calls the protected web API. In doing so, it also illustrates various authorization concepts, such as [token validation](https://docs.microsoft.com/azure/active-directory/develop/access-tokens#validating-tokens), [CORS configuration](https://docs.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services#understanding-cors-requests), **silent requests** and more. - -## Scenario - -1. The client application uses the **MSAL.js** library to sign-in a user and obtain a JWT **Access Token** from **Microsoft Entra ID**. -1. The **Access Token** is used as a **bearer** token to *authorize* the user to call the protected web API. -1. The protected web API responds with the claims in the **Access Token**. - -![Overview](./ReadmeFiles/topology_callapi.png) - -## Contents - -| File/folder | Description | -|-----------------------|--------------------------------------------| -| `AppCreationScripts/` | Contains Powershell scripts to automate app registration. | -| `App/authPopup.js` | Main authentication logic resides here (using Popup flow). | -| `App/authRedirect.js` | Use this instead of `authPopup.js` for authentication with redirect flow. | -| `App/authConfig.js` | Contains configuration parameters for the sample. | -| `SPA/server.js` | Simple Node server for `index.html`. | -| `API/index.js` | Main application logic resides here. | -| `API/config.json` | Contains authentication parameters for the sample. | - -## Prerequisites - -- [Node.js](https://nodejs.org/en/download/) must be installed to run this sample. -- A modern web browser. This sample uses **ES6** conventions and will not run on **Internet Explorer**. -- [Visual Studio Code](https://code.visualstudio.com/download) is recommended for running and editing this sample. -- [VS Code Azure Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) extension is recommended for interacting with Azure through VS Code Interface. -- An **Microsoft Entra ID** tenant. For more information, see: [How to get a Microsoft Entra tenant](https://azure.microsoft.com/documentation/articles/active-directory-howto-tenant/) -- A user account in your **Microsoft Entra ID** tenant. - -## Setup - -### Step 1: Clone or download this repository - -From your shell or command line: - -```console - git clone https://github.com/Azure-Samples/ms-identity-javascript-tutorial.git -``` - -or download and extract the repository .zip file. - -> :warning: To avoid path length limitations on Windows, we recommend cloning into a directory near the root of your drive. - -### Step 2: Install project dependencies - -```console - cd ms-identity-javascript-tutorial - cd 3-Authorization-II/1-call-api - cd API - npm install - cd.. - cd SPA - npm install -``` - -## Registration - -### Register the sample application(s) with your Microsoft Entra tenant - -There is one project in this sample. To register it, you can: - -- either follow the steps below for manually register your apps -- or use PowerShell scripts that: - - **automatically** creates the Microsoft Entra applications and related objects (passwords, permissions, dependencies) for you. - - modify the projects' configuration files. - -
- Expand this section if you want to use this automation: - -> :warning: If you have never used **Azure AD Powershell** before, we recommend you go through the [App Creation Scripts](./AppCreationScripts/AppCreationScripts.md) once to ensure that your environment is prepared correctly for this step. - -1. On Windows, run PowerShell and navigate to the root of the cloned directory. -1. In PowerShell run: - - ```PowerShell - Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force - ``` - -1. Run the script to create your Microsoft Entra application and configure the code of the sample application accordingly. -1. In PowerShell run: - - ```PowerShell - cd .\AppCreationScripts\ - .\Configure.ps1 - ``` - - > Other ways of running the scripts are described in [App Creation Scripts](./AppCreationScripts/AppCreationScripts.md) - > The scripts also provide a guide to automated application registration, configuration and removal which can help in your CI/CD scenarios. - -
- -Follow the steps below to manually walk through the steps to register and configure the applications in the Microsoft Entra admin center. - -### Choose the Microsoft Entra tenant where you want to create your applications - -As a first step you'll need to: - -1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com). -1. If your account is present in more than one Microsoft Entra tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired Microsoft Entra tenant.. - -### Register the service app (msal-node-api) - -1. Navigate to the [Microsoft Entra admin center](https://entra.microsoft.com) and select the **Microsoft Entra ID** service. -1. Select the **App Registrations** blade on the left, then select **New registration**. -1. In the **Register an application page** that appears, enter your application's registration information: - 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `msal-node-api`. - 1. Under **Supported account types**, select **Accounts in this organizational directory only** - 1. Select **Register** to create the application. -1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. -1. In the app's registration screen, select the **Authentication** blade to the left. -1. If you don't have a platform added, select **Add a platform** and select the **Web** option. - 1. In the **Redirect URI** section enter the following redirect URI: - 1. `` - 1. Click **Save** to save your changes. -1. In the app's registration screen, select the **Expose an API** blade to the left to open the page where you can publish the permission as an API for which client applications can obtain [access tokens](https://aka.ms/access-tokens) for. The first thing that we need to do is to declare the unique [resource](https://docs.microsoft.com/azure/active-directory/develop/v2-oauth2-auth-code-flow) URI that the clients will be using to obtain access tokens for this API. To declare an resource URI(Application ID URI), follow the following steps: - 1. Select **Set** next to the **Application ID URI** to generate a URI that is unique for this app. - 1. For this sample, accept the proposed Application ID URI (`api://{clientId}`) by selecting **Save**. - > :information_source: Read more about Application ID URI at [Validation differences by supported account types (signInAudience)](https://docs.microsoft.com/azure/active-directory/develop/supported-accounts-validation). - -#### Publish Delegated Permissions - -1. All APIs must publish a minimum of one [scope](https://docs.microsoft.com/azure/active-directory/develop/v2-oauth2-auth-code-flow#request-an-authorization-code), also called [Delegated Permission](https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#permission-types), for the client apps to obtain an access token for a *user* successfully. To publish a scope, follow these steps: -1. Select **Add a scope** button open the **Add a scope** screen and Enter the values as indicated below: - 1. For **Scope name**, use `Todolist.Read`. - 1. Select **Admins and users** options for **Who can consent?**. - 1. For **Admin consent display name** type in *Todolist.Read*. - 1. For **Admin consent description** type in *e.g. Allows the app to read the signed-in user's files.*. - 1. For **User consent display name** type in *scopeName*. - 1. For **User consent description** type in *eg. Allows the app to read your files.*. - 1. Keep **State** as **Enabled**. - 1. Select the **Add scope** button on the bottom to save this scope. - > Repeat the steps above for another scope named **Todolist.ReadWrite** -1. Select the **Manifest** blade on the left. - 1. Set `accessTokenAcceptedVersion` property to **2**. - 1. Select on **Save**. - -> :information_source: Follow [the principle of least privilege when publishing permissions](https://learn.microsoft.com/security/zero-trust/develop/protected-api-example) for a web API. - -#### Publish Application Permissions - -1. All APIs should publish a minimum of one [App role for applications](https://docs.microsoft.com/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps#assign-app-roles-to-applications), also called [Application Permission](https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#permission-types), for the client apps to obtain an access token as *themselves*, i.e. when they are not signing-in a user. **Application permissions** are the type of permissions that APIs should publish when they want to enable client applications to successfully authenticate as themselves and not need to sign-in users. To publish an application permission, follow these steps: -1. Still on the same app registration, select the **App roles** blade to the left. -1. Select **Create app role**: - 1. For **Display name**, enter a suitable name for your application permission, for instance **Todolist.Read.All**. - 1. For **Allowed member types**, choose **Application** to ensure other applications can be granted this permission. - 1. For **Value**, enter **Todolist.Read.All**. - 1. For **Description**, enter *e.g. Allows the app to read the signed-in user's files.*. - 1. Select **Apply** to save your changes. - > Repeat the steps above for another app permission named **Todolist.ReadWrite.All** - -#### Configure Optional Claims - -1. Still on the same app registration, select the **Token configuration** blade to the left. -1. Select **Add optional claim**: - 1. Select **optional claim type**, then choose **Access**. - 1. Select the optional claim **idtyp**. - > Indicates token type. This claim is the most accurate way for an API to determine if a token is an app token or an app+user token. This is not issued in tokens issued to users. - 1. Select the optional claim **acct**. - > Provides user's account status in tenant. If the user is a **member** of the tenant, the value is *0*. If they're a **guest**, the value is *1*. - 1. Select **Add** to save your changes. - -#### Configure the service app (msal-node-api) to use your app registration - -Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. - -> In the steps below, "ClientID" is the same as "Application ID" or "AppId". - -1. Open the `API\authConfig.js` file. -1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of `msal-node-api` app copied from the Microsoft Entra admin center. -1. Find the key `Enter_the_Tenant_Info_Here` and replace the existing value with your Microsoft Entra tenant/directory ID. - -### Register the client app (msal-javascript-spa) - -1. Navigate to the [Microsoft Entra admin center](https://entra.microsoft.com) and select the **Microsoft Entra ID** service. -1. Select the **App Registrations** blade on the left, then select **New registration**. -1. In the **Register an application page** that appears, enter your application's registration information: - 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `msal-javascript-spa`. - 1. Under **Supported account types**, select **Accounts in this organizational directory only** - 1. Select **Register** to create the application. -1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. -1. In the app's registration screen, select the **Authentication** blade to the left. -1. If you don't have a platform added, select **Add a platform** and select the **Single-page application** option. - 1. In the **Redirect URI** section enter the following redirect URIs: - 1. `http://localhost:3000` - 1. `http://localhost:3000/redirect` - 1. Click **Save** to save your changes. -1. Since this app signs-in users, we will now proceed to select **delegated permissions**, which is is required by apps signing-in users. - 1. In the app's registration screen, select the **API permissions** blade in the left to open the page where we add access to the APIs that your application needs: - 1. Select the **Add a permission** button and then: - 1. Ensure that the **My APIs** tab is selected. - 1. In the list of APIs, select the API `msal-node-api`. - 1. In the **Delegated permissions** section, select **Todolist.Read**, **Todolist.ReadWrite** in the list. Use the search box if necessary. - 1. Select the **Add permissions** button at the bottom. - -#### Configure Optional Claims - -1. Still on the same app registration, select the **Token configuration** blade to the left. -1. Select **Add optional claim**: - 1. Select the optional claim **acct**. - > Provides user's account status in tenant. If the user is a **member** of the tenant, the value is *0*. If they're a **guest**, the value is *1*. - 1. Select **Add** to save your changes. - -#### Configure the client app (msal-javascript-spa) to use your app registration - -Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. - -> In the steps below, "ClientID" is the same as "Application ID" or "AppId". - -1. Open the `SPA\public\authConfig.js` file. -1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of `msal-javascript-spa` app copied from the Microsoft Entra admin center. -1. Find the key `Enter_the_Tenant_Info_Here` and replace the existing value with your Microsoft Entra tenant/directory ID. -1. Find the key `Enter_the_Web_Api_Application_Id_Here` and replace the existing value with the application ID (clientId) of `msal-node-api` app copied from the Microsoft Entra admin center. - -## Running the sample - -```console - cd ms-identity-javascript-tutorial - cd 3-Authorization-II/1-call-api - cd API - npm start - cd .. - cd SPA - npm start -``` - -## Explore the sample - -1. Open your browser and navigate to `http://localhost:3000`. -1. Click the **sign-in** button on the top right corner. -1. Once you authenticate, click the **Call API** button at the center. - -![Screenshot](./ReadmeFiles/screenshot.png) - -## We'd love your feedback! - -Were we successful in addressing your learning objective? Consider taking a moment to [share your experience with us](https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR73pcsbpbxNJuZCMKN0lURpUNDVHTkg2VVhWMTNYUTZEM05YS1hSN01EOSQlQCN0PWcu). - -## About the code - -### Acquire a Token - -**Access Token** requests in **MSAL.js** are meant to be *per-resource-per-scope(s)*. This means that an **Access Token** requested for resource **A** with scope `scp1`: - -- cannot be used for accessing resource **A** with scope `scp2`, and, -- cannot be used for accessing resource **B** of any scope. - -The intended recipient of an **Access Token** is represented by the `aud` claim; in case the value for the `aud` claim does not mach the resource APP ID URI, the token should be considered invalid. Likewise, the permissions that an Access Token grants is represented by the `scp` claim. See [Access Token claims](https://docs.microsoft.com/azure/active-directory/develop/access-tokens#payload-claims) for more information. - -**MSAL.js** exposes 3 APIs for acquiring a token: `acquireTokenPopup()`, `acquireTokenRedirect()` and `acquireTokenSilent()`: - -```javascript - myMSALObj.acquireTokenPopup(request) - .then(response => { - // do something with response - }) - .catch(error => { - console.log(error) - }); -``` - -For `acquireTokenRedirect()`, you must register a redirect promise handler: - -```javascript - myMSALObj.handleRedirectPromise() - .then(response => { - // do something with response - }) - .catch(error => { - console.log(error); - }); - - myMSALObj.acquireTokenRedirect(request); -``` - -The **MSAL.js** exposes the `acquireTokenSilent()` API which is meant to retrieve non-expired token silently. - -```javascript - msalInstance.acquireTokenSilent(request) - .then(tokenResponse => { - // Do something with the tokenResponse - }).catch(async (error) => { - if (error instanceof InteractionRequiredAuthError) { - // fallback to interaction when silent call fails - return myMSALObj.acquireTokenPopup(request); - } - }).catch(error => { - handleError(error); - }); -``` - -### Dynamic Scopes and Incremental Consent - -In **Microsoft Entra ID**, the scopes (permissions) set directly on the application registration are called static scopes. Other scopes that are only defined within the code are called dynamic scopes. This has implications on the **login** (i.e. loginPopup, loginRedirect) and **acquireToken** (i.e. `acquireTokenPopup`, `acquireTokenRedirect`, `acquireTokenSilent`) methods of **MSAL.js**. Consider: - -```javascript - const loginRequest = { - scopes: [ "openid", "profile", "User.Read" ] - }; - const tokenRequest = { - scopes: [ "Mail.Read" ] - }; - - // will return an ID Token and an Access Token with scopes: "openid", "profile" and "User.Read" - msalInstance.loginPopup(loginRequest); - - // will fail and fallback to an interactive method prompting a consent screen - // after consent, the received token will be issued for "openid", "profile" ,"User.Read" and "Mail.Read" combined - msalInstance.acquireTokenSilent(tokenRequest); -``` - -In the code snippet above, the user will be prompted for consent once they authenticate and receive an **ID Token** and an **Access Token** with scope `User.Read`. Later, if they request an **Access Token** for `User.Read`, they will not be asked for consent again (in other words, they can acquire a token *silently*). On the other hand, the user did not consented to `Mail.Read` at the authentication stage. As such, they will be asked for consent when requesting an **Access Token** for that scope. The token received will contain all the previously consented scopes, hence the term *incremental consent*. - -### CORS settings - -For the purpose of the sample, **cross-origin resource sharing** (CORS) is enabled for **all** domains and methods, using the Express.js cors middleware. This is insecure and only used for demonstration purposes here. In production, you should modify this as to allow only the domains that you designate. If your web API is going to be hosted on **Azure App Service**, we recommend configuring CORS on the App Service itself. This is illustrated in [app.js](./API/app.js): - -```javascript -const express = require('express'); -const cors = require('cors'); - -const app = express(); - -app.use(cors()); -``` - -### Access token validation - -On the web API side, [passport-azure-ad](https://github.com/AzureAD/passport-azure-ad) verifies the incoming access token's signature and validates it's payload against the `issuer` and `audience` claims (defined in `BearerStrategy` constructor) using the `passport.authenticate()` API. In the `BearerStrategy` callback, you can add further validation steps as shown below (see [app.js](./API/app.js)): - -```javascript -const express = require('express'); -const passport = require('passport'); -const passportAzureAd = require('passport-azure-ad'); - -const app = express(); - -const bearerStrategy = new passportAzureAd.BearerStrategy({ - identityMetadata: `https://${authConfig.metadata.authority}/${authConfig.credentials.tenantID}/${authConfig.metadata.version}/${authConfig.metadata.discovery}`, - issuer: `https://${authConfig.metadata.authority}/${authConfig.credentials.tenantID}/${authConfig.metadata.version}`, - clientID: authConfig.credentials.clientID, - audience: authConfig.credentials.clientID, // audience is this application - validateIssuer: authConfig.settings.validateIssuer, - passReqToCallback: authConfig.settings.passReqToCallback, - loggingLevel: authConfig.settings.loggingLevel, - loggingNoPII: authConfig.settings.loggingNoPII, -}, (req, token, done) => { - /** - * Access tokens that have neither the 'scp' (for delegated permissions) nor - * 'roles' (for application permissions) claim are not to be honored. - */ - if (!token.hasOwnProperty('scp') && !token.hasOwnProperty('roles')) { - return done(new Error('Unauthorized'), null, "No delegated or app permission claims found"); - } - - /** - * If needed, pass down additional user info to route using the second argument below. - * This information will be available in the req.user object. - */ - return done(null, {}, token); -}); - -app.use(passport.initialize()); - -passport.use(bearerStrategy); - -// exposed API endpoint -app.use('/api', - passport.authenticate('oauth-bearer', { - session: false, - }), - router -); -``` - -For validation and debugging purposes, developers can decode **JWT**s (*JSON Web Tokens*) using [jwt.ms](https://jwt.ms). - -### Verifying permission type - -Web API endpoints should be prepared to accept calls from both users and applications, and should have control structures in place to respond each accordingly. This is illustrated in [permissionUtils.js](./API/auth/permissionUtils.js): - -```JavaScript -const isAppOnlyToken = (accessTokenPayload) => { - - if (!accessTokenPayload.hasOwnProperty('idtyp')) { - if (accessTokenPayload.hasOwnProperty('scp')) { - return false; - } else if (!accessTokenPayload.hasOwnProperty('scp') && accessTokenPayload.hasOwnProperty('roles')) { - return true; - } - } - - return accessTokenPayload.idtyp === 'app'; -}; -``` - -### Access to data - -Controllers should check if the presented access token has the necessary permissions to access the data, depending on the type of permission. This is illustrated in [todolist.js](./API/controllers/todolist.js): - -```JavaScript -exports.getTodos = (req, res, next) => { - if (isAppOnlyToken(req.authInfo)) { - if (hasRequiredApplicationPermissions(req.authInfo, authConfig.protectedRoutes.todolist.applicationPermissions.read)) { - try { - const todos = db.get('todos') - .value(); - - res.status(200).send(todos); - } catch (error) { - next(error); - } - } else { - next(new Error('Application does not have the required permissions')) - } - } else { - if (hasRequiredDelegatedPermissions(req.authInfo, authConfig.protectedRoutes.todolist.delegatedPermissions.read)) { - try { - const owner = req.authInfo['oid']; - - const todos = db.get('todos') - .filter({ owner: owner }) - .value(); - - res.status(200).send(todos); - } catch (error) { - next(error); - } - } else { - next(new Error('User does not have the required permissions')) - } - } -} -``` - -When granting access to data based on scopes, be sure to follow [the principle of least privilege](https://docs.microsoft.com/azure/active-directory/develop/secure-least-privileged-access). - -## More information - -Configure your application: - -- [Initialize client applications using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-initializing-client-applications) -- [Single sign-on with MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso) -- [Handle MSAL.js exceptions and errors](https://docs.microsoft.com/azure/active-directory/develop/msal-handling-exceptions?tabs=javascript) -- [Logging in MSAL.js applications](https://docs.microsoft.com/azure/active-directory/develop/msal-logging?tabs=javascript) -- [Pass custom state in authentication requests using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-pass-custom-state-authentication-request) -- [Prompt behavior in MSAL.js interactive requests](https://docs.microsoft.com/azure/active-directory/develop/msal-js-prompt-behavior) - -Learn more about Microsoft identity platform: - -- [Microsoft identity platform (Microsoft Entra ID for developers)](https://docs.microsoft.com/azure/active-directory/develop/) -- [Overview of Microsoft Authentication Library (MSAL)](https://docs.microsoft.com/azure/active-directory/develop/msal-overview) -- [Understanding Microsoft Entra application consent experiences](https://docs.microsoft.com/azure/active-directory/develop/application-consent-experience) -- [Understand user and admin consent](https://docs.microsoft.com/azure/active-directory/develop/howto-convert-app-to-be-multi-tenant#understand-user-and-admin-consent) -- [Microsoft identity platform and OpenID Connect protocol](https://docs.microsoft.com/azure/active-directory/develop/v2-protocols-oidc) -- [Microsoft identity platform ID Tokens](https://docs.microsoft.com/azure/active-directory/develop/id-tokens) - -For more information about how OAuth 2.0 protocols work in this scenario and other scenarios, see [Authentication Scenarios for Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/develop/authentication-flows-app-scenarios). - -## Community Help and Support - -Use [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) to get support from the community. -Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. -Make sure that your questions or comments are tagged with [`azure-ad` `azure-ad-b2c` `ms-identity` `msal`]. - -If you find a bug in the sample, please raise the issue on [GitHub Issues](../../issues). - -To provide a recommendation, visit the following [User Voice page](https://feedback.azure.com/forums/169401-azure-active-directory). - -## Contributing - -If you'd like to contribute to this sample, see [CONTRIBUTING.MD](../../CONTRIBUTING.md). - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - -## Code of Conduct - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/3-Authorization-II/1-call-api/ReadmeFiles/screenshot.png b/3-Authorization-II/1-call-api/ReadmeFiles/screenshot.png deleted file mode 100644 index 299813ed01dbaa36347aff8656aa86a46c714f36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28918 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.0.0" - } - }, - "node_modules/@azure/msal-browser": { - "version": "2.37.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.37.1.tgz", - "integrity": "sha512-EoKQISEpIY39Ru1OpWkeFZBcwp6Y0bG81bVmdyy4QJebPPDdVzfm62PSU0XFIRc3bqjZ4PBKBLMYLuo9NZYAow==", - "dependencies": { - "@azure/msal-common": "13.1.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-common": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.1.0.tgz", - "integrity": "sha512-wj+ULrRB0HTuMmtrMjg8j3guCx32GE2BCPbsMCZkHgL1BZetC3o/Su5UJEQMX1HNc9CrIaQNx5WaKWHygYDe0g==", - "engines": { - "node": ">=0.8.0" - } - }, - "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, - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/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==", - "dev": true - }, - "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, - "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-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.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, - "dependencies": { - "@babel/types": "^7.24.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, - "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, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "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, - "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, - "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, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "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, - "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/highlight/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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.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-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.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "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-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.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "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, - "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/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/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==", - "dev": true - }, - "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, - "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/@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/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": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@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.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.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 - } - } - }, - "node_modules/@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", - "dev": true, - "dependencies": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "@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": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.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 - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", - "@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/@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "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.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.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/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.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/@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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "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, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.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.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "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/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/node": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", - "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "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/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "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.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "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/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==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/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==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "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/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "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/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": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "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/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": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "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/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "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/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "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/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "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" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "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-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==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "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/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/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "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, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.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-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/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/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "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 - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "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 - }, - "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/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "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/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "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/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "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/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", - "dev": true - }, - "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, - "engines": { - "node": ">=12" - }, - "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==", - "dev": true - }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "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/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "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==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "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/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "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": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.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==", - "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/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-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==", - "dev": true - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "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==", - "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/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/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, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "dev": true, - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.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/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "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.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "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==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "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==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "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/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==", - "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-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/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==", - "dev": true - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/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==", - "dev": true - }, - "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/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/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": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "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/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-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/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-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-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-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "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.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "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-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-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/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==", - "dev": true - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", - "dev": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", - "import-local": "^3.0.2", - "jest-cli": "^29.5.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 - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.5.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/jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "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 - } - } - }, - "node_modules/jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.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.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.5.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/jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz", - "integrity": "sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0", - "jsdom": "^20.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@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.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.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-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.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/jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.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/jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@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.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", - "dev": true, - "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/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@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-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.5.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-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/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "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-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/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "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/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/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/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/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/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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "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/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "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/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "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/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/nwsapi": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.5.tgz", - "integrity": "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==", - "dev": true - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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/p-locate/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/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/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": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "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/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/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "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==", - "dev": true - }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "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/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "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/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.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/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/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/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "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==", - "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/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.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-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.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, - "engines": { - "node": ">=10" - } - }, - "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/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "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==", - "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/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "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==", - "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/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "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/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==", - "dev": true - }, - "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/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "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-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/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "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-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-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/superagent": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz", - "integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==", - "dev": true, - "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": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/superagent/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/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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/superagent/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==", - "dev": true - }, - "node_modules/superagent/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/superagent/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/supertest": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", - "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.0.5" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/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/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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "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/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "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==", - "dev": 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/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "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" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dev": true, - "dependencies": { - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "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/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-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==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "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/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==", - "dev": true, - "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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "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, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "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/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "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/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "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/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "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/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, - "engines": { - "node": ">=12" - } - }, - "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" - } - } - } -} diff --git a/3-Authorization-II/1-call-api/SPA/package.json b/3-Authorization-II/1-call-api/SPA/package.json deleted file mode 100644 index 686f923..0000000 --- a/3-Authorization-II/1-call-api/SPA/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "ciam-sign-in-javascript", - "version": "1.0.0", - "description": "Vanilla JavaScript single-page application using MSAL.js to authenticate users against Azure AD Customer Identity Access Management (Azure AD for Customers)", - "main": "server.js", - "scripts": { - "start": "node server.js", - "test": "jest --forceExit" - }, - "author": "", - "license": "ISC", - "dependencies": { - "@azure/msal-browser": "^2.37.0", - "express": "^4.18.2", - "morgan": "^1.10.0" - }, - "devDependencies": { - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "supertest": "^6.3.3" - } -} diff --git a/3-Authorization-II/1-call-api/SPA/public/authConfig.js b/3-Authorization-II/1-call-api/SPA/public/authConfig.js deleted file mode 100644 index 85c3acf..0000000 --- a/3-Authorization-II/1-call-api/SPA/public/authConfig.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * Configuration object to be passed to MSAL instance on creation. - * For a full list of MSAL.js configuration parameters, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md - */ -const msalConfig = { - auth: { - clientId: 'Enter_the_Application_Id_Here', // This is the ONLY mandatory field that you need to supply. - authority: 'https://login.microsoftonline.com/Enter_the_Tenant_Info_Here', // Replace the placeholder with your tenant name - redirectUri: '/', // You must register this URI on Azure Portal/App Registration. Defaults to window.location.href e.g. http://localhost:3000/, - postLogoutRedirectUri: '/', // Indicates the page to navigate after logout. - }, - cache: { - cacheLocation: 'sessionStorage', // Configures cache location. "sessionStorage" is more secure, but "localStorage" gives you SSO. - storeAuthStateInCookie: false, // set this to true if you have to support IE - }, - system: { - loggerOptions: { - loggerCallback: (level, message, containsPii) => { - if (containsPii) { - return; - } - switch (level) { - case msal.LogLevel.Error: - console.error(message); - return; - case msal.LogLevel.Info: - console.info(message); - return; - case msal.LogLevel.Verbose: - console.debug(message); - return; - case msal.LogLevel.Warning: - console.warn(message); - return; - default: - return; - } - }, - }, - }, -}; - -/** - * Add here the endpoints and scopes when obtaining an access token for protected web APIs. For more information, see: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/resources-and-scopes.md - */ -const protectedResources = { - todolistApi: { - endpoint: 'http://localhost:5000/api/todolist', - scopes: { - read: ['api://Enter_the_Web_Api_Application_Id_Here/Todolist.Read'], - write: ['api://Enter_the_Web_Api_Application_Id_Here/Todolist.ReadWrite'], - }, - }, -}; - -/** - * Scopes you add here will be prompted for user consent during sign-in. - * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request. - * For more information about OIDC scopes, visit: - * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes - */ -const loginRequest = { - scopes: [...protectedResources.todolistApi.scopes.read, ...protectedResources.todolistApi.scopes.write], -}; - -/** - * An optional silentRequest object can be used to achieve silent SSO - * between applications by providing a "login_hint" property. - */ - -// const silentRequest = { -// scopes: ["openid", "profile"], -// loginHint: "example@domain.net" -// }; - -// exporting config object for jest -if (typeof exports !== 'undefined') { - module.exports = { - msalConfig, - loginRequest, - protectedResources, - }; -} diff --git a/3-Authorization-II/1-call-api/SPA/public/authPopup.js b/3-Authorization-II/1-call-api/SPA/public/authPopup.js deleted file mode 100644 index 7fbcc08..0000000 --- a/3-Authorization-II/1-call-api/SPA/public/authPopup.js +++ /dev/null @@ -1,99 +0,0 @@ -// Create the main myMSALObj instance -// configuration parameters are located at authConfig.js -const myMSALObj = new msal.PublicClientApplication(msalConfig); - -let username = ''; - -function selectAccount() { - /** - * See here for more info on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - - const currentAccounts = myMSALObj.getAllAccounts(); - if (!currentAccounts || currentAccounts.length < 1) { - return; - } else if (currentAccounts.length > 1) { - // Add your account choosing logic here - console.warn('Multiple accounts detected.'); - } else if (currentAccounts.length === 1) { - username = currentAccounts[0].username; - welcomeUser(username); - updateTable(currentAccounts[0]); - } -} - -function handleResponse(response) { - /** - * To see the full list of response object properties, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#response - */ - - if (response !== null) { - username = response.account.username; - welcomeUser(username); - updateTable(response.account); - } else { - selectAccount(); - } -} - -function signIn() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - myMSALObj - .loginPopup({ - ...loginRequest, - redirectUri: '/redirect', - }) - .then(handleResponse) - .catch((error) => { - console.log(error); - }); -} - - -function getTokenPopup(request) { - /** - * See here for more information on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - request.account = myMSALObj.getAccountByUsername(username); - return myMSALObj.acquireTokenSilent(request).catch((error) => { - console.warn(error); - console.warn('silent token acquisition fails. acquiring token using popup'); - if (error instanceof msal.InteractionRequiredAuthError) { - // fallback to interaction when silent call fails - return myMSALObj - .acquireTokenPopup(request) - .then((response) => { - return response; - }) - .catch((error) => { - console.error(error); - }); - } else { - console.warn(error); - } - }); -} - -function signOut() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - // Choose which account to logout from by passing a username. - const logoutRequest = { - account: myMSALObj.getAccountByUsername(username), - }; - myMSALObj.logoutPopup(logoutRequest).then(() => { - window.location.reload(); - }); -} - -selectAccount(); diff --git a/3-Authorization-II/1-call-api/SPA/public/authRedirect.js b/3-Authorization-II/1-call-api/SPA/public/authRedirect.js deleted file mode 100644 index 204c384..0000000 --- a/3-Authorization-II/1-call-api/SPA/public/authRedirect.js +++ /dev/null @@ -1,93 +0,0 @@ -// Create the main myMSALObj instance -// configuration parameters are located at authConfig.js -const myMSALObj = new msal.PublicClientApplication(msalConfig); - -let username = ''; - -/** - * A promise handler needs to be registered for handling the - * response returned from redirect flow. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/initialization.md#redirect-apis - */ -myMSALObj - .handleRedirectPromise() - .then(handleResponse) - .catch((error) => { - console.error(error); - }); - -function selectAccount() { - /** - * See here for more info on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - - const currentAccounts = myMSALObj.getAllAccounts(); - - if (!currentAccounts) { - return; - } else if (currentAccounts.length > 1) { - // Add your account choosing logic here - console.warn('Multiple accounts detected.'); - } else if (currentAccounts.length === 1) { - username = currentAccounts[0].username; - welcomeUser(username); - updateTable(currentAccounts[0]); - } -} - -function handleResponse(response) { - /** - * To see the full list of response object properties, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#response - */ - - if (response !== null) { - username = response.account.username; - welcomeUser(username); - updateTable(response.account); - } else { - selectAccount(); - } -} - -function signIn() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - myMSALObj.loginRedirect(loginRequest); -} - -function getTokenRedirect(request) { - /** - * See here for more info on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - request.account = myMSALObj.getAccountByUsername(username); - return myMSALObj.acquireTokenSilent(request).catch((error) => { - console.error(error); - console.warn('silent token acquisition fails. acquiring token using popup'); - if (error instanceof msal.InteractionRequiredAuthError) { - // fallback to interaction when silent call fails - return myMSALObj.acquireTokenRedirect(request); - } else { - console.error(error); - } - }); -} - -function signOut() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - // Choose which account to logout from by passing a username. - const logoutRequest = { - account: myMSALObj.getAccountByUsername(username), - }; - - myMSALObj.logoutRedirect(logoutRequest); -} diff --git a/3-Authorization-II/1-call-api/SPA/public/claimUtils.js b/3-Authorization-II/1-call-api/SPA/public/claimUtils.js deleted file mode 100644 index f875aba..0000000 --- a/3-Authorization-II/1-call-api/SPA/public/claimUtils.js +++ /dev/null @@ -1,224 +0,0 @@ -/** - * Populate claims table with appropriate description - * @param {Object} claims ID token claims - * @returns claimsObject - */ -const createClaimsTable = (claims) => { - let claimsObj = {}; - let index = 0; - - Object.keys(claims).forEach((key) => { - if (typeof claims[key] !== 'string' && typeof claims[key] !== 'number') return; - switch (key) { - case 'aud': - populateClaim( - key, - claims[key], - "Identifies the intended recipient of the token. In ID tokens, the audience is your app's Application ID, assigned to your app in the Azure portal.", - index, - claimsObj - ); - index++; - break; - case 'iss': - populateClaim( - key, - claims[key], - 'Identifies the issuer, or authorization server that constructs and returns the token. It also identifies the Azure AD tenant for which the user was authenticated. If the token was issued by the v2.0 endpoint, the URI will end in /v2.0. The GUID that indicates that the user is a consumer user from a Microsoft account is 9188040d-6c67-4c5b-b112-36a304b66dad.', - index, - claimsObj - ); - index++; - break; - case 'iat': - populateClaim( - key, - changeDateFormat(claims[key]), - 'Issued At indicates when the authentication for this token occurred.', - index, - claimsObj - ); - index++; - break; - case 'nbf': - populateClaim( - key, - changeDateFormat(claims[key]), - 'The nbf (not before) claim identifies the time (as UNIX timestamp) before which the JWT must not be accepted for processing.', - index, - claimsObj - ); - index++; - break; - case 'exp': - populateClaim( - key, - changeDateFormat(claims[key]), - "The exp (expiration time) claim identifies the expiration time (as UNIX timestamp) on or after which the JWT must not be accepted for processing. It's important to note that in certain circumstances, a resource may reject the token before this time. For example, if a change in authentication is required or a token revocation has been detected.", - index, - claimsObj - ); - index++; - break; - case 'name': - populateClaim( - key, - claims[key], - "The principal about which the token asserts information, such as the user of an application. This value is immutable and can't be reassigned or reused. It can be used to perform authorization checks safely, such as when the token is used to access a resource. By default, the subject claim is populated with the object ID of the user in the directory", - index, - claimsObj - ); - index++; - break; - case 'preferred_username': - populateClaim( - key, - claims[key], - 'The primary username that represents the user. It could be an email address, phone number, or a generic username without a specified format. Its value is mutable and might change over time. Since it is mutable, this value must not be used to make authorization decisions. It can be used for username hints, however, and in human-readable UI as a username. The profile scope is required in order to receive this claim.', - index, - claimsObj - ); - index++; - break; - case 'nonce': - populateClaim( - key, - claims[key], - 'The nonce matches the parameter included in the original /authorize request to the IDP. If it does not match, your application should reject the token.', - index, - claimsObj - ); - index++; - break; - case 'oid': - populateClaim( - key, - claims[key], - 'The oid (user’s object id) is the only claim that should be used to uniquely identify a user in an Azure AD tenant. The token might have one or more of the following claim, that might seem like a unique identifier, but is not and should not be used as such.', - index, - claimsObj - ); - index++; - break; - case 'tid': - populateClaim( - key, - claims[key], - 'The tenant ID. You will use this claim to ensure that only users from the current Azure AD tenant can access this app.', - index, - claimsObj - ); - index++; - break; - case 'upn': - populateClaim( - key, - claims[key], - '(user principal name) – might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place or might change to reflect a personal change like marriage.', - index, - claimsObj - ); - index++; - break; - case 'email': - populateClaim( - key, - claims[key], - 'Email might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place.', - index, - claimsObj - ); - index++; - break; - case 'acct': - populateClaim( - key, - claims[key], - 'Available as an optional claim, it lets you know what the type of user (homed, guest) is. For example, for an individual’s access to their data you might not care for this claim, but you would use this along with tenant id (tid) to control access to say a company-wide dashboard to just employees (homed users) and not contractors (guest users).', - index, - claimsObj - ); - index++; - break; - case 'sid': - populateClaim(key, claims[key], 'Session ID, used for per-session user sign-out.', index, claimsObj); - index++; - break; - case 'sub': - populateClaim( - key, - claims[key], - 'The sub claim is a pairwise identifier - it is unique to a particular application ID. If a single user signs into two different apps using two different client IDs, those apps will receive two different values for the subject claim.', - index, - claimsObj - ); - index++; - break; - case 'ver': - populateClaim( - key, - claims[key], - 'Version of the token issued by the Microsoft identity platform', - index, - claimsObj - ); - index++; - break; - case 'auth_time': - populateClaim( - key, - claims[key], - 'The time at which a user last entered credentials, represented in epoch time. There is no discrimination between that authentication being a fresh sign-in, a single sign-on (SSO) session, or another sign-in type.', - index, - claimsObj - ); - index++; - break; - case 'at_hash': - populateClaim( - key, - claims[key], - 'An access token hash included in an ID token only when the token is issued together with an OAuth 2.0 access token. An access token hash can be used to validate the authenticity of an access token', - index, - claimsObj - ); - index++; - break; - case 'uti': - case 'rh': - index++; - break; - default: - populateClaim(key, claims[key], '', index, claimsObj); - index++; - } - }); - - return claimsObj; -}; - -/** - * Populates claim, description, and value into an claimsObject - * @param {string} claim - * @param {string} value - * @param {string} description - * @param {number} index - * @param {Object} claimsObject - */ -const populateClaim = (claim, value, description, index, claimsObject) => { - let claimsArray = []; - claimsArray[0] = claim; - claimsArray[1] = value; - claimsArray[2] = description; - claimsObject[index] = claimsArray; -}; - -/** - * Transforms Unix timestamp to date and returns a string value of that date - * @param {string} date Unix timestamp - * @returns - */ -const changeDateFormat = (date) => { - let dateObj = new Date(date * 1000); - return `${date} - [${dateObj.toString()}]`; -}; diff --git a/3-Authorization-II/1-call-api/SPA/public/favicon.svg b/3-Authorization-II/1-call-api/SPA/public/favicon.svg deleted file mode 100644 index 1284553..0000000 --- a/3-Authorization-II/1-call-api/SPA/public/favicon.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - Icon-identity-221 - - - - - - - - diff --git a/3-Authorization-II/1-call-api/SPA/public/fetch.js b/3-Authorization-II/1-call-api/SPA/public/fetch.js deleted file mode 100644 index f7bdfb6..0000000 --- a/3-Authorization-II/1-call-api/SPA/public/fetch.js +++ /dev/null @@ -1,116 +0,0 @@ -/** - * Execute a fetch request with the given options - * @param {string} method: GET, POST, PUT, DELETE - * @param {String} endpoint: The endpoint to call - * @param {Object} data: The data to send to the endpoint, if any - * @returns response - */ -function callApi(method, endpoint, token, data = null) { - const headers = new Headers(); - const bearer = `Bearer ${token}`; - - headers.append('Authorization', bearer); - - if (data) { - headers.append('Content-Type', 'application/json'); - } - - const options = { - method: method, - headers: headers, - body: data ? JSON.stringify(data) : null, - }; - - return fetch(endpoint, options) - .then((response) => { - const contentType = response.headers.get("content-type"); - - if (contentType && contentType.indexOf("application/json") !== -1) { - return response.json(); - } else { - return response; - } - }); -} - - -/** - * Handles todolist actions - * @param {Object} task - * @param {string} method - * @param {string} endpoint - */ -async function handleToDoListActions(task, method, endpoint) { - let listData; - - try { - const accessToken = await getToken(); - const data = await callApi(method, endpoint, accessToken, task); - - switch (method) { - case 'POST': - listData = JSON.parse(localStorage.getItem('todolist')); - listData = [data, ...listData]; - localStorage.setItem('todolist', JSON.stringify(listData)); - AddTaskToToDoList(data); - break; - case 'DELETE': - listData = JSON.parse(localStorage.getItem('todolist')); - const index = listData.findIndex((todoItem) => todoItem.id === task.id); - localStorage.setItem('todolist', JSON.stringify([...listData.splice(index, 1)])); - showToDoListItems(listData); - break; - default: - console.log('Unrecognized method.') - break; - } - } catch (error) { - console.error(error); - } -} - -/** - * Handles todolist action GET action. - */ -async function getToDos() { - try { - const accessToken = await getToken(); - - const data = await callApi( - 'GET', - protectedResources.todolistApi.endpoint, - accessToken - ); - - if (data) { - localStorage.setItem('todolist', JSON.stringify(data)); - showToDoListItems(data); - } - } catch (error) { - console.error(error); - } -} - -/** - * Retrieves an access token. - */ -async function getToken() { - let tokenResponse; - - if (typeof getTokenPopup === 'function') { - tokenResponse = await getTokenPopup({ - scopes: [...protectedResources.todolistApi.scopes.read], - redirectUri: '/redirect' - }); - } else { - tokenResponse = await getTokenRedirect({ - scopes: [...protectedResources.todolistApi.scopes.read], - }); - } - - if (!tokenResponse) { - return null; - } - - return tokenResponse.accessToken; -} diff --git a/3-Authorization-II/1-call-api/SPA/public/index.html b/3-Authorization-II/1-call-api/SPA/public/index.html deleted file mode 100644 index 7e59619..0000000 --- a/3-Authorization-II/1-call-api/SPA/public/index.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - Microsoft identity platform - - - - - - - - - - -
-
Vanilla JavaScript single-page application secured with MSAL.js -
-
-
-
-
ApplicationAppIdUrl in the Azure portal
- - - - - - - - - -
Claim TypeValueDescription
- -
-
-
- - -
-
-
-
-
-
    -
-
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/3-Authorization-II/1-call-api/SPA/public/redirect.html b/3-Authorization-II/1-call-api/SPA/public/redirect.html deleted file mode 100644 index dcc8b0e..0000000 --- a/3-Authorization-II/1-call-api/SPA/public/redirect.html +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/3-Authorization-II/1-call-api/SPA/public/styles.css b/3-Authorization-II/1-call-api/SPA/public/styles.css deleted file mode 100644 index 66205df..0000000 --- a/3-Authorization-II/1-call-api/SPA/public/styles.css +++ /dev/null @@ -1,21 +0,0 @@ -.navbarStyle { - padding: .5rem 1rem !important; -} - -.table-responsive-ms { - max-height: 39rem !important; - padding-left: 10%; - padding-right: 10%; -} - -form, .group-div { - display: flex; - align-items: center; - justify-content: center; -} - -.input-group, ul { - width: 50% !important; -} - - diff --git a/3-Authorization-II/1-call-api/SPA/public/ui.js b/3-Authorization-II/1-call-api/SPA/public/ui.js deleted file mode 100644 index 7963164..0000000 --- a/3-Authorization-II/1-call-api/SPA/public/ui.js +++ /dev/null @@ -1,69 +0,0 @@ -// Select DOM elements to work with -const signInButton = document.getElementById('signIn'); -const signOutButton = document.getElementById('signOut'); -const titleDiv = document.getElementById('title-div'); -const welcomeDiv = document.getElementById('welcome-div'); -const tableDiv = document.getElementById('table-div'); -const tableBody = document.getElementById('table-body-div'); -const toDoListLink = document.getElementById('toDoListLink'); -const toDoForm = document.getElementById('form'); -const textInput = document.getElementById('textInput'); -const toDoListDiv = document.getElementById('groupDiv'); -const todoListItems = document.getElementById('toDoListItems'); - -toDoForm.addEventListener('submit', (e) => { - e.preventDefault(); - let task = { description: textInput.value }; - handleToDoListActions(task, 'POST', protectedResources.todolistApi.endpoint); - toDoForm.reset(); -}); - -function welcomeUser(username) { - signInButton.classList.add('d-none'); - signOutButton.classList.remove('d-none'); - toDoListLink.classList.remove('d-none'); - titleDiv.classList.add('d-none'); - welcomeDiv.classList.remove('d-none'); - welcomeDiv.innerHTML = `Welcome ${username}!`; -} - -function updateTable(account) { - tableDiv.classList.remove('d-none'); - const tokenClaims = createClaimsTable(account.idTokenClaims); - - Object.keys(tokenClaims).forEach((key) => { - let row = tableBody.insertRow(0); - let cell1 = row.insertCell(0); - let cell2 = row.insertCell(1); - let cell3 = row.insertCell(2); - cell1.innerHTML = tokenClaims[key][0]; - cell2.innerHTML = tokenClaims[key][1]; - cell3.innerHTML = tokenClaims[key][2]; - }); -} - -function showToDoListItems(response) { - todoListItems.replaceChildren(); - tableDiv.classList.add('d-none'); - toDoForm.classList.remove('d-none'); - toDoListDiv.classList.remove('d-none'); - if (!!response.length) { - response.forEach((task) => { - AddTaskToToDoList(task); - }); - } -} - -function AddTaskToToDoList(task) { - let li = document.createElement('li'); - let button = document.createElement('button'); - button.innerHTML = 'Delete'; - button.classList.add('btn', 'btn-danger'); - button.addEventListener('click', () => { - handleToDoListActions(task, 'DELETE', protectedResources.todolistApi.endpoint + `/${task.id}`); - }); - li.classList.add('list-group-item', 'd-flex', 'justify-content-between', 'align-items-center'); - li.innerHTML = task.description; - li.appendChild(button); - todoListItems.appendChild(li); -} diff --git a/3-Authorization-II/1-call-api/SPA/sample.test.js b/3-Authorization-II/1-call-api/SPA/sample.test.js deleted file mode 100644 index 990ad79..0000000 --- a/3-Authorization-II/1-call-api/SPA/sample.test.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @jest-environment jsdom - */ - -const request = require('supertest'); -const path = require('path'); -const fs = require('fs'); - -const app = require('./server.js'); - -jest.dontMock('fs'); - -const html = fs.readFileSync(path.resolve(__dirname, './public/index.html'), 'utf8'); - -describe('Sanitize index page', () => { - beforeAll(async() => { - global.document.documentElement.innerHTML = html.toString(); - }); - - it('should have valid cdn link', () => { - expect(document.getElementById("load-msal").getAttribute("src")).toContain("https://alcdn.msauth.net/browser"); - }); -}); - -describe('Sanitize configuration object', () => { - beforeAll(() => { - global.msalConfig = require('./public/authConfig.js').msalConfig; - }); - - it('should define the config object', () => { - expect(msalConfig).toBeDefined(); - }); - - it('should not contain credentials', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(msalConfig.auth.clientId)).toBe(false); - }); - - it('should contain authority URI', () => { - const regexUri = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)?/gi; - expect(regexUri.test(msalConfig.auth.authority)).toBe(true); - }); -}); - -describe('Ensure pages served', () => { - - beforeAll(() => { - process.env.NODE_ENV = 'test'; - }); - - it('should get index page', async () => { - const res = await request(app) - .get('/'); - - const data = await fs.promises.readFile(path.join(__dirname, './public/index.html'), 'utf8'); - expect(res.statusCode).toEqual(200); - expect(res.text).toEqual(data); - }); -}); \ No newline at end of file diff --git a/3-Authorization-II/1-call-api/SPA/server.js b/3-Authorization-II/1-call-api/SPA/server.js deleted file mode 100644 index 39f8c3d..0000000 --- a/3-Authorization-II/1-call-api/SPA/server.js +++ /dev/null @@ -1,30 +0,0 @@ -const express = require('express'); -const morgan = require('morgan'); -const path = require('path'); - -const DEFAULT_PORT = process.env.PORT || 3000; - -// initialize express. -const app = express(); - -// Configure morgan module to log all requests. -app.use(morgan('dev')); - -// Setup app folders. -app.use(express.static('public')); - -// set up a route for redirect.html -app.get('/redirect', (req, res) => { - res.sendFile(path.join(__dirname + '/public/redirect.html')); -}); - -// Set up a route for index.html -app.get('/', (req, res) => { - res.sendFile(path.join(__dirname + '/index.html')); -}); - -app.listen(DEFAULT_PORT, () => { - console.log(`Sample app listening on port ${DEFAULT_PORT}!`); -}); - -module.exports = app; diff --git a/3-Authorization-II/2-call-api-b2c/API/app.js b/3-Authorization-II/2-call-api-b2c/API/app.js deleted file mode 100644 index c2634f4..0000000 --- a/3-Authorization-II/2-call-api-b2c/API/app.js +++ /dev/null @@ -1,148 +0,0 @@ -const express = require('express'); -const morgan = require('morgan'); -const cors = require('cors'); - -const rateLimit = require('express-rate-limit'); - -const passport = require('passport'); -const passportAzureAd = require('passport-azure-ad'); - - -const authConfig = require('./authConfig.js'); -const router = require('./routes/index'); - -const app = express(); - -/** - * If your app is behind a proxy, reverse proxy or a load balancer, consider - * letting express know that you are behind that proxy. To do so, uncomment - * the line below. - */ - -// app.set('trust proxy', /* numberOfProxies */); - -/** - * HTTP request handlers should not perform expensive operations such as accessing the file system, - * executing an operating system command or interacting with a database without limiting the rate at - * which requests are accepted. Otherwise, the application becomes vulnerable to denial-of-service attacks - * where an attacker can cause the application to crash or become unresponsive by issuing a large number of - * requests at the same time. For more information, visit: https://cheatsheetseries.owasp.org/cheatsheets/Denial_of_Service_Cheat_Sheet.html - */ -const limiter = rateLimit({ - windowMs: 15 * 60 * 1000, // 15 minutes - max: 100, // Limit each IP to 100 requests per `window` (here, per 15 minutes) - standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers - legacyHeaders: false, // Disable the `X-RateLimit-*` headers -}); - -// Apply the rate limiting middleware to all requests -app.use(limiter); - -app.use(cors()); - -app.use(express.json()) -app.use(express.urlencoded({ extended: false})); -app.use(morgan('dev')); - -const options = { - identityMetadata: `https://${authConfig.metadata.b2cDomain}/${authConfig.credentials.tenantName}/${authConfig.policies.policyName}/${authConfig.metadata.version}/${authConfig.metadata.discovery}`, - clientID: authConfig.credentials.clientID, - audience: authConfig.credentials.clientID, - policyName: authConfig.policies.policyName, - isB2C: authConfig.settings.isB2C, - validateIssuer: authConfig.settings.validateIssuer, - loggingLevel: authConfig.settings.loggingLevel, - passReqToCallback: authConfig.settings.passReqToCallback, - loggingNoPII: authConfig.settings.loggingNoPII, // set this to true in the authConfig.js if you want to enable logging and debugging -}; - -const bearerStrategy = new passportAzureAd.BearerStrategy(options, (req,token, done) => { - /** - * Below you can do extended token validation and check for additional claims, such as: - * - check if the delegated permissions in the 'scp' are the same as the ones declared in the application registration. - * - * Bear in mind that you can do any of the above checks within the individual routes and/or controllers as well. - * For more information, visit: https://learn.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview - */ - - /** - * Lines below verifies if the caller's client ID is in the list of allowed clients. - * This ensures only the applications with the right client ID can access this API. - * To do so, we use "azp" claim in the access token. Uncomment the lines below to enable this check. - */ - // if (!myAllowedClientsList.includes(token.azp)) { - // return done(new Error('Unauthorized'), {}, "Client not allowed"); - // } - - // const myAllowedClientsList = [ - // /* add here the client IDs of the applications that are allowed to call this API */ - // ] - - /** - * Access tokens that have no 'scp' (for delegated permissions). - */ - if (!token.hasOwnProperty('scp')) { - return done(new Error('Unauthorized'), null, 'No delegated permissions found'); - } - - done(null, {}, token); -}); - - -app.use(passport.initialize()); - -passport.use(bearerStrategy); - -app.use( - '/api', - (req, res, next) => { - passport.authenticate( - 'oauth-bearer', - { - session: false, - }, - (err, user, info) => { - if (err) { - /** - * An error occurred during authorization. Either pass the error to the next function - * for Express error handler to handle, or send a response with the appropriate status code. - */ - return res.status(401).json({ error: err.message }); - } - - if (!user) { - // If no user object found, send a 401 response. - return res.status(401).json({ error: 'Unauthorized' }); - } - - if (info) { - // access token payload will be available in req.authInfo downstream - req.authInfo = info; - return next(); - } - } - )(req, res, next); - }, - router, // the router with all the routes - (err, req, res, next) => { - /** - * Add your custom error handling logic here. For more information, see: - * http://expressjs.com/en/guide/error-handling.html - */ - - // set locals, only providing error in development - res.locals.message = err.message; - res.locals.error = req.app.get('env') === 'development' ? err : {}; - - // send error response - res.status(err.status || 500).send(err); - } -); - -const port = process.env.PORT || 5000; - -app.listen(port, () => { - console.log('Listening on port ' + port); -}); - -module.exports = app; diff --git a/3-Authorization-II/2-call-api-b2c/API/auth/permissionUtils.js b/3-Authorization-II/2-call-api-b2c/API/auth/permissionUtils.js deleted file mode 100644 index b507b6b..0000000 --- a/3-Authorization-II/2-call-api-b2c/API/auth/permissionUtils.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Ensures that the access token has the specified delegated permissions. - * @param {Object} accessTokenPayload: Parsed access token payload - * @param {Array} requiredPermission: list of required permissions - * @returns {boolean} - */ -const hasRequiredDelegatedPermissions = (accessTokenPayload, requiredPermission) => { - const normalizedRequiredPermissions = requiredPermission.map((permission) => permission.toUpperCase()); - - if (accessTokenPayload.hasOwnProperty('scp') && accessTokenPayload.scp.split(' ') - .some(claim => normalizedRequiredPermissions.includes(claim.toUpperCase()))) { - return true; - } - return false; - -}; - -module.exports = { - hasRequiredDelegatedPermissions -}; \ No newline at end of file diff --git a/3-Authorization-II/2-call-api-b2c/API/authConfig.js b/3-Authorization-II/2-call-api-b2c/API/authConfig.js deleted file mode 100644 index 809c32e..0000000 --- a/3-Authorization-II/2-call-api-b2c/API/authConfig.js +++ /dev/null @@ -1,33 +0,0 @@ -const passportConfig = { - credentials: { - tenantName: 'fabrikamb2c.onmicrosoft.com', - clientID: 'e29ac359-6a90-4f9e-b31c-8f64e1ac20cb', - }, - policies: { - policyName: 'B2C_1_susi_v2', - }, - metadata: { - b2cDomain: 'fabrikamb2c.b2clogin.com', - authority: 'login.microsoftonline.com', - discovery: '.well-known/openid-configuration', - version: 'v2.0', - }, - settings: { - isB2C: true, - validateIssuer: false, - passReqToCallback: true, - loggingLevel: 'info', - loggingNoPII: false, - }, - protectedRoutes: { - todolist: { - endpoint: '/api/todolist', - delegatedPermissions: { - read: ['ToDoList.Read', 'ToDoList.ReadWrite'], - write: ['ToDoList.ReadWrite'], - }, - }, - }, -}; - -module.exports = passportConfig; diff --git a/3-Authorization-II/2-call-api-b2c/API/controllers/todolist.js b/3-Authorization-II/2-call-api-b2c/API/controllers/todolist.js deleted file mode 100644 index 107fd92..0000000 --- a/3-Authorization-II/2-call-api-b2c/API/controllers/todolist.js +++ /dev/null @@ -1,101 +0,0 @@ -const lowdb = require('lowdb'); -const FileSync = require('lowdb/adapters/FileSync'); -const adapter = new FileSync('./data/db.json'); -const db = lowdb(adapter); -const { v4: uuidv4 } = require('uuid'); - -const { - hasRequiredDelegatedPermissions, -} = require('../auth/permissionUtils'); - -const authConfig = require('../authConfig'); - -exports.getTodo = (req, res, next) => { - if (hasRequiredDelegatedPermissions(req.authInfo, authConfig.protectedRoutes.todolist.delegatedPermissions.read)) { - try { - /** - * The 'oid' (object id) is the only claim that should be used to uniquely identify - * a user in an Azure AD tenant. The token might have one or more of the following claim, - * that might seem like a unique identifier, but is not and should not be used as such, - * especially for systems which act as system of record (SOR): - * - * - upn (user principal name): might be unique amongst the active set of users in a tenant but - * tend to get reassigned to new employees as employees leave the organization and - * others take their place or might change to reflect a personal change like marriage. - * - * - email: might be unique amongst the active set of users in a tenant but tend to get - * reassigned to new employees as employees leave the organization and others take their place. - */ - const owner = req.authInfo['oid']; - const id = req.params.id; - - const todo = db.get('todos') - .filter({ owner: owner }) - .find({ id: id }) - .value(); - - res.status(200).send(todo); - } catch (error) { - next(error); - } - } else { - next(new Error('User does not have the required permissions')) - } -} - -exports.getTodos = (req, res, next) => { - if (hasRequiredDelegatedPermissions(req.authInfo, authConfig.protectedRoutes.todolist.delegatedPermissions.read)) { - try { - const owner = req.authInfo['oid']; - - const todos = db.get('todos') - .filter({ owner: owner }) - .value(); - - res.status(200).send(todos); - } catch (error) { - next(error); - } - } else { - next(new Error('User does not have the required permissions')) - } -} - -exports.postTodo = (req, res, next) => { - if (hasRequiredApplicationPermissions(req.authInfo, authConfig.protectedRoutes.todolist.applicationPermissions.write)) { - try { - const todo = { - description: req.body.description, - id: uuidv4(), - owner: req.authInfo['oid'] // oid is the only claim that should be used to uniquely identify a user in an Azure AD tenant - }; - - db.get('todos').push(todo).write(); - - res.status(200).json(todo); - } catch (error) { - next(error); - } - } else ( - next(new Error('User or application does not have the required permissions')) - ) -} - -exports.deleteTodo = (req, res, next) => { - if (hasRequiredDelegatedPermissions(req.authInfo, authConfig.protectedRoutes.todolist.delegatedPermissions.write)) { - try { - const id = req.params.id; - const owner = req.authInfo['oid']; - - db.get('todos') - .remove({ owner: owner, id: id }) - .write(); - - res.status(200).json({ message: "success" }); - } catch (error) { - next(error); - } - } else { - next(new Error('User does not have the required permissions')) - } -} diff --git a/3-Authorization-II/2-call-api-b2c/API/data/db.json b/3-Authorization-II/2-call-api-b2c/API/data/db.json deleted file mode 100644 index 652b5cc..0000000 --- a/3-Authorization-II/2-call-api-b2c/API/data/db.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "todos": [] -} \ No newline at end of file diff --git a/3-Authorization-II/2-call-api-b2c/API/package-lock.json b/3-Authorization-II/2-call-api-b2c/API/package-lock.json deleted file mode 100644 index a2d40b1..0000000 --- a/3-Authorization-II/2-call-api-b2c/API/package-lock.json +++ /dev/null @@ -1,5081 +0,0 @@ -{ - "name": "ms-identity-react-c3s1", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ms-identity-react-c3s1", - "version": "1.0.0", - "dependencies": { - "cors": "^2.8.5", - "express": "^4.18.1", - "express-rate-limit": "^6.5.2", - "lowdb": "^1.0.0", - "morgan": "^1.10.0", - "passport": "^0.6.0", - "passport-azure-ad": "^4.3.3", - "uuid": "^9.0.0" - }, - "devDependencies": { - "jest": "^28.1.1", - "nodemon": "^2.0.16", - "supertest": "^6.2.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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, - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/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==", - "dev": true - }, - "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, - "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-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.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, - "dependencies": { - "@babel/types": "^7.24.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, - "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, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "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, - "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, - "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, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "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, - "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/highlight/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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.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-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-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-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.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "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, - "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/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/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==", - "dev": true - }, - "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, - "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/@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/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": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.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": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", - "dev": true, - "dependencies": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", - "dev": true, - "dependencies": { - "jest-get-type": "^28.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", - "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "@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": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.13", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "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": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.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.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "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/node": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", - "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "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/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "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==", - "dev": true - }, - "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/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==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/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/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==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "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/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", - "dev": true, - "dependencies": { - "@jest/transform": "^28.1.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.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": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", - "dev": true, - "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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "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": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^28.1.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true - }, - "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/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/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "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/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "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" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "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==", - "dev": true - }, - "node_modules/bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "engines": [ - "node >=0.10.0" - ], - "bin": { - "bunyan": "bin/bunyan" - }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-manager": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-3.6.3.tgz", - "integrity": "sha512-dS4DnV6c6cQcVH5OxzIU1XZaACXwvVIiUPkFytnRmLOACuBGv3GQgRQ1RJGRRw4/9DF14ZK2RFlZu1TUgDniMg==", - "dependencies": { - "async": "3.2.3", - "lodash.clonedeep": "^4.5.0", - "lru-cache": "6.0.0" - } - }, - "node_modules/cache-manager/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/cache-manager/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/cache-manager/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/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "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/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/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/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "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, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.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-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/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/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "devOptional": 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==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "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 - }, - "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/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/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/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "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/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.14.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "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==", - "dev": true - }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "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/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==" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "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": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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==", - "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-rate-limit": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz", - "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", - "engines": { - "node": ">= 12.9.0" - }, - "peerDependencies": { - "express": "^4 || ^5" - } - }, - "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-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==", - "dev": true - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "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==", - "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/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/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, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "dev": true, - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.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/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "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.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "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==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "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/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/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "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/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==", - "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/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/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/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/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/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-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "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": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "devOptional": true, - "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/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-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "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-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/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-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-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-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "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.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "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-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-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/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==", - "dev": true - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", - "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", - "dev": true, - "dependencies": { - "@jest/core": "^28.1.3", - "@jest/types": "^28.1.3", - "import-local": "^3.0.2", - "jest-cli": "^28.1.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", - "dev": true, - "dependencies": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.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": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", - "dev": true, - "dependencies": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "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": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "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.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "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-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "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/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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/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-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/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "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/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/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/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/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" - }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, - "node_modules/lowdb": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz", - "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==", - "dependencies": { - "graceful-fs": "^4.1.3", - "is-promise": "^2.1.0", - "lodash": "4", - "pify": "^3.0.0", - "steno": "^0.4.1" - }, - "engines": { - "node": ">=4" - } - }, - "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/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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "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/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "optional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "optional": true, - "engines": { - "node": "*" - } - }, - "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/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "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/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-jose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-jose/-/node-jose-2.2.0.tgz", - "integrity": "sha512-XPCvJRr94SjLrSIm4pbYHKLEaOsDvJCpyFw/6V/KK/IXmyZ6SFBzAUDO9HQf4DB/nTEFcRGH87mNciOP23kFjw==", - "dependencies": { - "base64url": "^3.0.1", - "buffer": "^6.0.3", - "es6-promise": "^4.2.8", - "lodash": "^4.17.21", - "long": "^5.2.0", - "node-forge": "^1.2.1", - "pako": "^2.0.4", - "process": "^0.11.10", - "uuid": "^9.0.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/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/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nodemon/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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "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/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/oauth": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", - "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "devOptional": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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/p-locate/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/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/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" - }, - "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/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/passport": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", - "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", - "dependencies": { - "passport-strategy": "1.x.x", - "pause": "0.0.1", - "utils-merge": "^1.0.1" - }, - "engines": { - "node": ">= 0.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jaredhanson" - } - }, - "node_modules/passport-azure-ad": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/passport-azure-ad/-/passport-azure-ad-4.3.5.tgz", - "integrity": "sha512-LBpXEght7hCMuMNFK4oegdN0uPBa3lpDMy71zQoB0zPg1RrGwdzpjwTiN1WzN0hY77fLyjz9tBr3TGAxnSgtEg==", - "dependencies": { - "async": "^3.2.3", - "base64url": "^3.0.0", - "bunyan": "^1.8.14", - "cache-manager": "^3.6.1", - "https-proxy-agent": "^5.0.0", - "jws": "^3.1.3", - "lodash": "^4.11.2", - "node-jose": "^2.2.0", - "oauth": "0.9.15", - "passport": "^0.6.0", - "valid-url": "^1.0.6" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "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/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "devOptional": true, - "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==", - "dev": true - }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "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/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "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/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "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/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/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/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "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/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.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-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.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "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/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "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==", - "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/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "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==", - "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/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "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/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==", - "dev": true - }, - "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "dev": true, - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/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/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/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/steno": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", - "integrity": "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==", - "dependencies": { - "graceful-fs": "^4.1.3" - } - }, - "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-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/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "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-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-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/superagent": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz", - "integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==", - "dev": true, - "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": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/superagent/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/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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/superagent/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==", - "dev": true - }, - "node_modules/superagent/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/superagent/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/supertest": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", - "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.0.5" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "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-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.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==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/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/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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "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/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/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==", - "dev": 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/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "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" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "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/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/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==", - "dev": true, - "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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "devOptional": true - }, - "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, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "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/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "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/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, - "engines": { - "node": ">=12" - } - }, - "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" - } - } - } -} diff --git a/3-Authorization-II/2-call-api-b2c/API/package.json b/3-Authorization-II/2-call-api-b2c/API/package.json deleted file mode 100644 index faa8b40..0000000 --- a/3-Authorization-II/2-call-api-b2c/API/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "ms-identity-react-c3s1", - "version": "1.0.0", - "description": "A Node.js & Express web API accepting authorized calls with Azure Active Directory", - "author": "derisen", - "scripts": { - "start": "node app.js", - "dev": "nodemon app.js", - "test": "jest --forceExit" - }, - "dependencies": { - "cors": "^2.8.5", - "express": "^4.18.1", - "express-rate-limit": "^6.5.2", - "lowdb": "^1.0.0", - "morgan": "^1.10.0", - "passport": "^0.6.0", - "passport-azure-ad": "^4.3.3", - "uuid": "^9.0.0" - }, - "main": "app.js", - "repository": { - "type": "git", - "url": "git+https://github.com/Azure-Samples/ms-identity-javascript-react-tutorial.git" - }, - "keywords": [ - "azure-ad", - "ms-identity", - "node", - "api" - ], - "bugs": { - "url": "https://github.com/Azure-Samples/ms-identity-javascript-react-tutorial/issues" - }, - "homepage": "https://github.com/Azure-Samples/ms-identity-javascript-react-tutorial#readme", - "devDependencies": { - "jest": "^28.1.1", - "nodemon": "^2.0.16", - "supertest": "^6.2.3" - } -} diff --git a/3-Authorization-II/2-call-api-b2c/API/routes/index.js b/3-Authorization-II/2-call-api-b2c/API/routes/index.js deleted file mode 100644 index abb00cd..0000000 --- a/3-Authorization-II/2-call-api-b2c/API/routes/index.js +++ /dev/null @@ -1,16 +0,0 @@ -const express = require('express'); - -const todolist = require('../controllers/todolist'); - -// initialize router -const router = express.Router(); - -router.get('/todolist', todolist.getTodos); - -router.get('/todolist/:id', todolist.getTodo); - -router.post('/todolist', todolist.postTodo); - -router.delete('/todolist/:id', todolist.deleteTodo); - -module.exports = router; diff --git a/3-Authorization-II/2-call-api-b2c/API/sample.test.js b/3-Authorization-II/2-call-api-b2c/API/sample.test.js deleted file mode 100644 index 5ac3a0b..0000000 --- a/3-Authorization-II/2-call-api-b2c/API/sample.test.js +++ /dev/null @@ -1,32 +0,0 @@ -const request = require('supertest'); - -const app = require('./app.js'); - -describe('Sanitize configuration object', () => { - beforeAll(() => { - global.config = require('./authConfig.js'); - }); - - it('should define the config object', () => { - expect(config).toBeDefined(); - }); - - it('should contain client Id', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(config.credentials.clientID)).toBe(true); - }); -}); - -describe('Ensure routes served', () => { - - beforeAll(() => { - process.env.NODE_ENV = 'test'; - }); - - it('should protect todolist endpoint', async () => { - const res = await request(app) - .get('/api'); - - expect(res.statusCode).toEqual(401); - }); -}); diff --git a/3-Authorization-II/2-call-api-b2c/AppCreationScripts/sample.json b/3-Authorization-II/2-call-api-b2c/AppCreationScripts/sample.json deleted file mode 100644 index b1c5837..0000000 --- a/3-Authorization-II/2-call-api-b2c/AppCreationScripts/sample.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "Sample": { - "Author": "salman90", - "Title": "A JavaScript single-page application using MSAL Browser to authorize users for calling a protected web API on Azure AD B2C", - "Level": 200, - "Client": "JavaScript SPA", - "Service": "Node.js web API", - "RepositoryUrl": "ms-identity-javascript-react-tutorial", - "Endpoint": "AAD v2.0", - "Description": "A JavaScript single-page application using MSAL Browser to authorize users for calling a protected web API on Azure AD B2C", - "Languages": [ - "javascript", - "nodejs" - ], - "Products": [ - "azure-active-directory-b2c", - "msal-js", - "passport-azure-ad" - ], - "Platform": "JavaScript", - "Provider": "B2C" - }, - "AADApps": [ - { - "Id": "service", - "Name": "msal-node-api", - "Kind": "WebApi", - "Audience": "AzureADandPersonalMicrosoftAccount", - "SDK": "MsalNode", - "Scopes": [ - "ToDoList.Read", - "ToDoList.ReadWrite" - ], - "SampleSubPath": "3-Authorization-II\\1-call-api-b2c\\API" - }, - { - "Id": "client", - "Name": "msal-javascript-spa", - "Kind": "SinglePageApplication", - "Audience": "AzureADandPersonalMicrosoftAccount", - "HomePage": "http://localhost:3000", - "ReplyUrls": "http://localhost:3000, http://localhost:3000/redirect", - "SampleSubPath": "3-Authorization-II\\1-call-api-b2c\\SPA", - "SDK": "MsalJs", - "RequiredResourcesAccess": [ - { - "Resource": "service", - "DelegatedPermissions": [ - "ToDoList.Read", - "ToDoList.ReadWrite" - ] - } - ] - } - ], - "CodeConfiguration": [ - { - "App": "service", - "SettingKind": "JSON", - "SettingFile": "\\..\\API\\authConfig.json", - "Mappings": [ - { - "key": "clientID", - "value": ".AppId" - }, - { - "key": "tenantID", - "value": "$tenantId" - }, - { - "key": "policyName", - "value": "Enter_The_Your_policy_Name" - } - ] - }, - { - "App": "client", - "SettingKind": "Replace", - "SettingFile": "\\..\\SPA\\src\\authConfig.js", - "Mappings": [ - { - "key": "Enter_the_Application_Id_Here", - "value": ".AppId" - }, - { - "key": "Enter_the_Tenant_Info_Here", - "value": "$tenantId" - }, - { - "key": "Enter_the_Web_Api_Scope_Here", - "value": "service.Scope" - }, - { - "key": "policyName", - "value": "Enter_The_Your_policy_Name" - }, - { - "key": "b2cDomain", - "value": "Enter_The_Tenant_Domain_name" - } - ] - } - ] -} \ No newline at end of file diff --git a/3-Authorization-II/2-call-api-b2c/README.md b/3-Authorization-II/2-call-api-b2c/README.md deleted file mode 100644 index fd528e1..0000000 --- a/3-Authorization-II/2-call-api-b2c/README.md +++ /dev/null @@ -1,371 +0,0 @@ -# Vanilla JavaScript single-page application (SPA) using MSAL.js to authorize users for calling a protected web API on Azure AD B2C - - 1. [Overview](#overview) - 1. [Scenario](#scenario) - 1. [Contents](#contents) - 1. [Prerequisites](#prerequisites) - 1. [Setup](#setup) - 1. [Registration](#registration) - 1. [Running the sample](#running-the-sample) - 1. [Explore the sample](#explore-the-sample) - 1. [About the code](#about-the-code) - 1. [More information](#more-information) - 1. [Community Help and Support](#community-help-and-support) - 1. [Contributing](#contributing) - 1. [Code of Conduct](#code-of-conduct) - -## Overview - -This sample demonstrates a Vanilla JavaScript single-page application that lets users authenticate against [Azure Active Directory B2C](https://azure.microsoft.com/services/active-directory/external-identities/b2c/) using the [Microsoft Authentication Library for JavaScript](https://github.com/AzureAD/microsoft-authentication-library-for-js) (MSAL.js), then acquires an **Access Token** for a web API that is also protected by **Azure AD B2C**. In doing so, it also illustrates various authorization and B2C concepts, such as [Access Tokens](https://docs.microsoft.com/azure/active-directory/develop/access-tokens), [Refresh Tokens](https://docs.microsoft.com/azure/active-directory-b2c/tokens-overview#token-types), [Token Lifetimes and Configuration](https://docs.microsoft.com/azure/active-directory-b2c/tokens-overview#configuration), **silent requests** and more. - -## Scenario - -1. The client application uses the **MSAL.js** to obtain an **Access Token** from **Azure AD B2C**. -1. The **Access Token** is used as a **bearer** to *authorize* the user to call a protected web API. -1. The protected web API responds with the claims in the **Access Token**. - -![Overview](./ReadmeFiles/topology_b2c_callapi.png) - -## Contents - -| File/folder | Description | -|-----------------------|--------------------------------------------| -| `SPA/public/authPopup.js` | Main authentication logic resides here (using Popup flow). | -| `SPA/public/authRedirect.js` | Use this instead of `authPopup.js` for authentication with redirect flow. | -| `SPA/public/authConfig.js` | Contains configuration parameters for the sample. | -| `SPA/public/policies.js` | Contains B2C custom policies and user-flows. | -| `API/index.js` | Main application logic resides here. | -| `API/authConfig.js` | Contains authentication parameters for the sample. | - -## Prerequisites - -- [Node.js](https://nodejs.org/en/download/) must be installed to run this sample. -- A modern web browser. This sample uses **ES6** conventions and will not run on **Internet Explorer**. -- [Visual Studio Code](https://code.visualstudio.com/download) is recommended for running and editing this sample. -- [VS Code Azure Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) extension is recommended for interacting with Azure through VS Code Interface. -- An Azure Active Directory B2C (Azure AD B2C) tenant. For more information on how to get an Azure AD tenant, see: [Create an Azure Active Directory B2C tenant](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-create-tenant) -- A user account in your Azure AD B2C tenant. - -## Setup - -### Step 1: Clone or download this repository - -From your shell or command line: - -```console - git clone https://github.com/Azure-Samples/ms-identity-javascript-tutorial.git -``` - -or download and extract the repository .zip file. - -> :warning: To avoid path length limitations on Windows, we recommend cloning into a directory near the root of your drive. - -### Step 2: Install project dependencies - -```console - cd ms-identity-javascript-tutorial - cd 3-Authorization-II/2-call-api-b2c - cd API - npm install - cd.. - cd SPA - npm install -``` - -## Registration - -> :information_source: This sample comes with a pre-registered application for testing purposes. If you would like to use your own **Azure AD B2C** tenant and application, follow the steps below to register and configure the applications in the **Azure Portal**. Otherwise, continue with the steps for [Running the sample](#running-the-sample). - -### Choose the Azure AD B2C tenant where you want to create your applications - -As a first step you'll need to: - -1. Sign in to the [Azure portal](https://portal.azure.com). -1. If your account is present in more than one Azure AD B2C tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired Azure AD B2C tenant. - -1. #### Create User Flows and Custom Policies - -Please refer to: [Tutorial: Create userflows in Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-create-user-flows) - -> :warning: This sample requires B2C user-flows to emit the **emails** claim in the ID token, which is used as **username** by MSAL. To do so, navigate to the [Azure portal](https://portal.azure.com) and locate the **Azure AD B2C** service. Then, navigate to the **User flows** blade. Select the **User Attributes** tab and make sure **Email Address** is checked. Then select the **Application Claims** tab and make sure **Email Addresses** is checked. -> -> You may want additional claims (such as **object ID** (*oid*) and etc.) to appear in the ID tokens obtained from Azure AD B2C user-flows. In that case, please refer to [User profile attributes](https://learn.microsoft.com/azure/active-directory-b2c/user-profile-attributes) to learn about how to configure your user-flows to emit those claims. - -#### Add External Identity Providers - -Please refer to: [Tutorial: Add identity providers to your applications in Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-add-identity-providers) - -### Register the service app (msal-node-api) - -1. Navigate to the [Azure portal](https://portal.azure.com) and select the **Azure Active Directory B2C** service. -1. Select the **App Registrations** blade on the left, then select **New registration**. -1. In the **Register an application page** that appears, enter your application's registration information: - 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `msal-node-api`. - 1. Under **Supported account types**, select **Accounts in any identity provider or organizational directory (for authenticating users with user flows)** - 1. Select **Register** to create the application. -1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. -1. In the app's registration screen, select the **Expose an API** blade to the left to open the page where you can publish the permission as an API for which client applications can obtain [access tokens](https://aka.ms/access-tokens) for. The first thing that we need to do is to declare the unique [resource](https://docs.microsoft.com/azure/active-directory/develop/v2-oauth2-auth-code-flow) URI that the clients will be using to obtain access tokens for this API. To declare an resource URI(Application ID URI), follow the following steps: - 1. Select **Set** next to the **Application ID URI** to generate a URI that is unique for this app. - 1. For this sample, accept the proposed Application ID URI (`https://{tenantName}.onmicrosoft.com/{clientId}`) by selecting **Save**. - -#### Publish Delegated Permissions - -1. All APIs must publish a minimum of one [scope](https://docs.microsoft.com/azure/active-directory/develop/v2-oauth2-auth-code-flow#request-an-authorization-code), also called [Delegated Permission](https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#permission-types), for the client apps to obtain an access token for a *user* successfully. To publish a scope, follow these steps: -1. Select **Add a scope** button open the **Add a scope** screen and Enter the values as indicated below: - 1. For **Scope name**, use `ToDoList.Read`. - 1. For **Admin consent display name** type in *Read users ToDo list using the 'msal-node-api'*. - 1. For **Admin consent description** type in *Allow the app to read the user's ToDo list using the 'msal-node-api'*. - 1. Keep **State** as **Enabled**. - 1. Select the **Add scope** button on the bottom to save this scope. - > Repeat the steps above for another scope named **ToDoList.ReadWrite** -1. Select the **Manifest** blade on the left. - 1. Set `accessTokenAcceptedVersion` property to **2**. - 1. Select on **Save**. - -> :information_source: Follow [the principle of least privilege when publishing permissions](https://learn.microsoft.com/security/zero-trust/develop/protected-api-example) for a web API. - -#### Configure the service app (msal-node-api) to use your app registration - -Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. - -> In the steps below, "ClientID" is the same as "Application ID" or "AppId". - -1. Open the `API\authConfig.json` file. -1. Find the key `clientID` and replace the existing value with the application ID (clientId) of `msal-node-api` app copied from the Azure portal. -1. Find the key `tenantID` and replace the existing value with your Azure AD tenant/directory ID. -1. Find the key `policyName` and replace the existing value with Enter_The_Your_policy_Name. - -### Register the client app (msal-javascript-spa) - -1. Navigate to the [Azure portal](https://portal.azure.com) and select the **Azure Active Directory B2C** service. -1. Select the **App Registrations** blade on the left, then select **New registration**. -1. In the **Register an application page** that appears, enter your application's registration information: - 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `msal-javascript-spa`. - 1. Under **Supported account types**, select **Accounts in any identity provider or organizational directory (for authenticating users with user flows)** - 1. Select **Register** to create the application. -1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. -1. In the app's registration screen, select the **Authentication** blade to the left. -1. If you don't have a platform added, select **Add a platform** and select the **Single-page application** option. - 1. In the **Redirect URI** section enter the following redirect URIs: - 1. `http://localhost:3000` - 1. `http://localhost:3000/redirect` - 1. Click **Save** to save your changes. -1. Since this app signs-in users, we will now proceed to select **delegated permissions**, which is is required by apps signing-in users. - 1. In the app's registration screen, select the **API permissions** blade in the left to open the page where we add access to the APIs that your application needs: - 1. Select the **Add a permission** button and then: - 1. Ensure that the **My APIs** tab is selected. - 1. In the list of APIs, select the API `msal-node-api`. - 1. In the **Delegated permissions** section, select **ToDoList.Read**, **ToDoList.ReadWrite** in the list. Use the search box if necessary. - 1. Select the **Add permissions** button at the bottom. -1. At this stage, the permissions are assigned correctly, but since it's a B2C tenant, the users themselves cannot consent to these permissions. To get around this problem, we'd let the [tenant administrator consent on behalf of all users in the tenant](https://docs.microsoft.com/azure/active-directory/develop/v2-admin-consent). Select the **Grant admin consent for {tenant}** button, and then select **Yes** when you are asked if you want to grant consent for the requested permissions for all accounts in the tenant. You need to be a tenant admin to be able to carry out this operation. - -#### Configure the client app (msal-javascript-spa) to use your app registration - -Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. - -> In the steps below, "ClientID" is the same as "Application ID" or "AppId". - -1. Open the `SPA\public\authConfig.js` file. -1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of `msal-javascript-spa` app copied from the Azure portal. -1. Find the key `Enter_the_Tenant_Info_Here` and replace the existing value with your Azure AD tenant/directory ID. -1. Find the key `Enter_the_Web_Api_Scope_Here` and replace the existing value with Scope. -1. Find the key `policyName` and replace the existing value with Enter_The_Your_policy_Name. -1. Find the key `b2cDomain` and replace the existing value with Enter_The_Tenant_Domain_name. -1. Find the key `b2cPolicies.names` and replace it with the names (IDs) of your policies/user-flows e.g. `b2c_1_susi`. -1. Find the key `b2cPolicies.authorities` abd replace it with the authority strings of your policies/user-flows e.g. `https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/b2c_1_susi`. -1. Find the key `b2cPolicies.authorityDomain` abd replace it with the domain of your authority e.g. `fabrikamb2c.b2clogin.com`. - -## Running the sample - -```console - cd ms-identity-javascript-tutorial - cd 3-Authorization-II/2-call-api-b2c - cd API - npm start - cd.. - cd SPA - npm start -``` - -## Explore the sample - -1. Open your browser and navigate to `http://localhost:6420`. -1. Click on the **sign-in** button on the top right corner. -1. Once you authenticate, click the **Call API** button at the center. - -![Screenshot](./ReadmeFiles/screenshot.png) - -## We'd love your feedback! - -Were we successful in addressing your learning objective? Consider taking a moment to [share your experience with us.](https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR73pcsbpbxNJuZCMKN0lURpUNDVHTkg2VVhWMTNYUTZEM05YS1hSN01EOSQlQCN0PWcu). - -## About the code - -### Acquire a Token - -**Access Token** requests in **MSAL.js** are meant to be *per-resource-per-scope(s)*. This means that an **Access Token** requested for resource **A** with scope `scp1`: - -- cannot be used for accessing resource **A** with scope `scp2`, and, -- cannot be used for accessing resource **B** of any scope. - -The intended recipient of an **Access Token** is represented by the `aud` claim; in case the value for the `aud` claim does not mach the resource APP ID URI, the token should be considered invalid. Likewise, the permissions that an Access Token grants is represented by the `scp` claim. See [Access Token claims](https://docs.microsoft.com/azure/active-directory/develop/access-tokens#payload-claims) for more information. - -**MSAL.js** exposes 3 APIs for acquiring a token: `acquireTokenPopup()`, `acquireTokenRedirect()` and `acquireTokenSilent()`: - -```javascript - myMSALObj.acquireTokenPopup(request) - .then(response => { - // do something with response - }) - .catch(error => { - console.log(error) - }); -``` - -For `acquireTokenRedirect()`, you must register a redirect promise handler: - -```javascript - myMSALObj.handleRedirectPromise() - .then(response => { - // do something with response - }) - .catch(error => { - console.log(error); - }); - - myMSALObj.acquireTokenRedirect(request); -``` - -### CORS Settings - -For the purpose of the sample, **cross-origin resource sharing** (CORS) is enabled for **all** domains and methods, using the Express.js cors middleware. This is insecure and only used for demonstration purposes here. In production, you should modify this as to allow only the domains that you designate. If your web API is going to be hosted on **Azure App Service**, we recommend configuring CORS on the App Service itself. This is illustrated in [app.js](./API/app.js): - -```javascript - const express = require('express'); - const cors = require('cors'); - - const app = express(); - app.use(cors()); -``` - -### Access token validation - -On the web API side, [passport-azure-ad](https://github.com/AzureAD/passport-azure-ad) verifies the incoming access token's signature and validates it's payload against the `issuer` and `audience` claims (defined in `BearerStrategy` constructor) using the `passport.authenticate()` API. In the `BearerStrategy` callback, you can add further validation steps as shown below (see [app.js](./API/app.js)): - -```javascript - const options = { - identityMetadata: `https://${authConfig.metadata.b2cDomain}/${authConfig.credentials.tenantName}/${authConfig.policies.policyName}/${authConfig.metadata.version}/${authConfig.metadata.discovery}`, - clientID: authConfig.credentials.clientID, - audience: authConfig.credentials.clientID, - policyName: authConfig.policies.policyName, - isB2C: authConfig.settings.isB2C, - validateIssuer: authConfig.settings.validateIssuer, - loggingLevel: authConfig.settings.loggingLevel, - passReqToCallback: authConfig.settings.passReqToCallback, -}; - -const bearerStrategy = new passportAzureAd.BearerStrategy(options, (token, done) => { - /** - * Below you can do extended token validation and check for additional claims, such as: - * - check if the delegated permissions in the 'scp' are the same as the ones declared in the application registration. - * - * Bear in mind that you can do any of the above checks within the individual routes and/or controllers as well. - * For more information, visit: https://learn.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview - */ - - /** - * Lines below verifies if the caller's client ID is in the list of allowed clients. - * This ensures only the applications with the right client ID can access this API. - * To do so, we use "azp" claim in the access token. Uncomment the lines below to enable this check. - */ - - // const myAllowedClientsList = [ - // /* add here the client IDs of the applications that are allowed to call this API */ - // ] - - // if (!myAllowedClientsList.includes(token.azp)) { - // return done(new Error('Unauthorized'), {}, "Client not allowed"); - // } - - - /** - * Access tokens that have no 'scp' (for delegated permissions). - */ - if (!token.hasOwnProperty('scp')) { - return done(new Error('Unauthorized'), null, 'No delegated permissions found'); - } - - done(null, {}, token); -}); - - -app.use(passport.initialize()); - -passport.use(bearerStrategy); -``` - -Clients should treat access tokens as opaque strings, as the contents of the token are intended for the resource only (such as a web API or Microsoft Graph). For validation and debugging purposes, developers can decode **JWT**s (*JSON Web Tokens*) using a site like [jwt.ms](https://jwt.ms). - -### Access to data - -Controllers should check if the presented access token has the necessary permissions to access the data, depending on the type of permission. This is illustrated in [todolist.js](./API/controllers/todolist.js): - -```javascript - exports.getTodo = (req, res, next) => { - if (hasRequiredDelegatedPermissions(req.authInfo, authConfig.protectedRoutes.todolist.delegatedPermissions.read)) { - try { - const id = req.params.id; - const todo = db.get('todos').find({ id: id }).value(); - res.status(200).send(todo); - } catch (error) { - next(error); - } - } else { - next(new Error('User does not have the required permissions')); - } - }; -``` - -When granting access to data based on scopes, be sure to follow [the principle of least privilege](https://docs.microsoft.com/azure/active-directory/develop/secure-least-privileged-access). - -## More information - -Configure your application: - -- [Use Microsoft Authentication Library for JavaScript to work with Azure AD B2C](https://docs.microsoft.com/azure/active-directory/develop/msal-b2c-overview) -- [Tutorial: Create an Azure Active Directory B2C tenant](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-create-tenant) -- [Single sign-on with MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso) -- [Handle MSAL.js exceptions and errors](https://docs.microsoft.com/azure/active-directory/develop/msal-handling-exceptions?tabs=javascript) -- [Logging in MSAL.js applications](https://docs.microsoft.com/azure/active-directory/develop/msal-logging?tabs=javascript) - -Learn more about **Microsoft identity platform** and **Azure AD B2C**: - -- [Microsoft identity platform (Azure Active Directory for developers)](https://docs.microsoft.com/azure/active-directory/develop/) -- [Overview of Microsoft Authentication Library (MSAL)](https://docs.microsoft.com/azure/active-directory/develop/msal-overview) -- [What is Azure Active Directory B2C?](https://docs.microsoft.com/azure/active-directory-b2c/overview) -- [Azure AD B2C User Flows](https://docs.microsoft.com/azure/active-directory-b2c/user-flow-overview) -- [Azure AD B2C Custom Policies](https://docs.microsoft.com/azure/active-directory-b2c/custom-policy-overview) - -For more information about how OAuth 2.0 protocols work in this scenario and other scenarios, see [Authentication Scenarios for Azure AD](https://docs.microsoft.com/azure/active-directory/develop/authentication-flows-app-scenarios). - -## Community Help and Support - -Use [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) to get support from the community. -Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. -Make sure that your questions or comments are tagged with [`azure-ad` `azure-ad-b2c` `ms-identity` `msal`]. - -If you find a bug in the sample, please raise the issue on [GitHub Issues](../../issues). - -To provide a recommendation, visit the following [User Voice page](https://feedback.azure.com/forums/169401-azure-active-directory). - -## Contributing - -If you'd like to contribute to this sample, see [CONTRIBUTING.MD](../../CONTRIBUTING.md). - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - -## Code of Conduct - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/3-Authorization-II/2-call-api-b2c/ReadmeFiles/screenshot.png b/3-Authorization-II/2-call-api-b2c/ReadmeFiles/screenshot.png deleted file mode 100644 index a711852e9804aa096ce2ee08b329c6d4ef32ede2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27111 zcmcG#V{|4#*Qg!aGnv?&*v7=RZQHgdwr$(CojbNBw(sD}^Stl*@%=l0POa5zuc}^M z=&stm_f@+hB#Dx_>K)|{{KtPRPpuS6XxK>HO1*nsvm>@{a4DRW7 z2Et50MgRn)J{JDn0P;HzYcHrUG*{wAx*gr3iFg!SzIIoNn3{Fxq!dZf3Yir8^sdVb}#BH}SgbN9X-iXJZiPpf?{1>UTO#V!TNW|4!nms{>NP-^pK1*Hb(M%7b^YXtM7= zB@fVn-nZ^+PS|Wh1rOz<#d74esO*b;{#&MD{m%t8r5L($nEMBj{mE%Ms#FZ>3^!=s z_40BEihD^lg}^1RJEwCrTe{vGA&Ex?u1@t9l*^$0BdASz;+X zIH{)Ijl6Y{(GK=ebJN0KUffr+nR=;F9bl<8-+}EsvK(Oau~k)z=s_@}ex@2nkmn}Lw7K&XfRlP(QIV>yHNJH_Q(N8}B_W2ss0vCW`=h@JO_{AVkq?{%r~H2#kOx_V+N z#Zi$oC?*{UYbkhi3P`n;B+Lx)L0|xRh{>vSUP06b_2kBybSQL6qYuZN+QcOjav8JM zz^(Rf<~fc=(B5?Bu~<*!9Do6om44HW|wzxCRO5oBm5@Vn#;P2z+qGBAB3Q z{l0+L`}$j976g-u{pyBVLLxeaNY1}HB{qO&?uyiL_{>Xm1kY#Mt}I5#3#862T=6FE z-IT1O+qNR@&L>9+^7{#Qx3%>$-)oQ&>Fh8O{@T9&##ViJIH8FfLfW{_EvDWKu?cyF z%iM#Y!R+t_`sV%urmeV1v{3S4r~)lff*IYHUmwVLVr6SIF4DqP%(6^c#QR4_w-SV@ z2Dfy;gFPzA&m6T0Id`V$342`(w4$p|n?un+%Vt*&1>V`PlWcBwe2yixyRSBWq%Orm zCNzk}O;AfaFesH&152s#n+9}$`b_X#Hc(LjI5`VMLkZZnHONmXxM4JTF}4IAi+J1e z%P=$st0ZvKCMdYDF$N9C-t|7?-=%sEr+&I8$wwwLkjjW)aN=b)YOpXWv~2;WOS#O? zWQV%R`kr9!KE!nlaA|ap3t(1EmYV-ab}vNq??HE49?Vop(EN21185aTUa9-c6lH6? znY5P=qS^kK{H7n~*iCKhi?{0QNbLKBX37cpR(U6W856&3VL3BfuKGIkS`B9(z3fTJ z3H8b)-3z6>Sg6yXMLXZlcET87hfk-m<~n3qf7a?i+f=6f3138qafWKcgXM6&z-+O} z34x{faif}EC7#*Ma;8cf`*fK>Y<4EDJ_vvC7*jppZG>|u?LrV**JQ3mRU2Gaa3Wty z%oJ8CT&Hq&q*6Ug7d9|=33T}a#FYS)2_58b@TC13a|0rP-#8#xI4==mZzchkUy`JuJ)s5K{tg}d-5}ZpJSuwh%|u;<&TpkpDzHojTA&!xPcmyb}MQPSYvb&E-`i%IlRuS=3n`* z&fwW3sca2X#Ia=QitNcVn;~RnX!k0;{-Jb@<7hIvzWaRO(Ak{xYL=03>1PSes@!!7L^!A6rCpaV(g4R z=OqrNP8ZWY-h8;@ka?~7X^p%i*so-|zeJt<{n%0#xVCq{Y&Dz;?RwT>?uSU0vvIDI z&7&6VCcr`i=1eI>>#|$poo%^;xhQJ z;P=sfu$c8*{3qFqXbCD(_l@uhOQHam;DbZcDo@NnNmY1aJlX25HVE#lJGBs<;iHE<s9c=htc}3Md5k);I}k}ovtjD;PD72s>$;YHH}e!WYA%zB5Ch;FiR@X= zSgsV%3kx6<41J-BT){{nWuA&X}+V9%bCpS4u z5b1O9qIz%_vNFx31i5pf9HgZ+CZt4HIbw@H37GQI52Lu{TeX ze)?Tk0A)PxD(ghMumg{Z4ugpm4BiU1cV5ZEjP=GwtP!lRg@K&>3uC$*x;Y>NRRY7pmx*z7)x(l8~L$Tm`&YbsUreZ|kt4>#&suuj;Mzip&@@ z?ZrxD3=&Q+(Y%EaU=p~1q{8b_Z0=oj96sZ%J3G(sebhob)bs+*@O5&5Cr4p@f#7J^ z;QWS4&l|Sh(5oF#FE4Eml{dfd%ej9yRI2WZdmP23if>!nD&nZ?ngN2*D4CHGn1GVo z-dchuKX|@hqm~Eb8FE3(pQFD^_L+4t26_9?Tx!ziak*_PvweXd>)La4tC0~8d?hq0sdGa-L@TxvGq^{8bO zIE_M;t^5=E+1-fC&+i#bs8#or+$4}vFj1!|&7ct&MAgB<5z+%7g)oLnOI>h+&h4GW4mT>lEI7+N&giruf=5y2RFi=Dn>-}3^PTwgYR_4 zB3d_fkjw>{sYEz+fo#I&1f!T?gXSF+zmNh}Zv8uc20Qk1RL#)3`RGI^4^kBHj;$8c z6`8prcc88=f>6zd3qRRKhJhpi!!&ZxdSX)+S4qA8kCFzIvpo6nnpt0cw}B)AVk|1z zzf;DzC|L6nUri)%cS_;UqSha`bW;s1{bYza4%oc>hSrX1C@vQ0o+)UW__z%2AM%o5 zj-ia7zw~$9`|bj?m&%GID0fIqj#8P}wILUZq3LqKJnd2((Eb42g(TOyg#1mJW*yNj zRajE{G`Knu+qGc z+%?Wri5i#G1fS3V3EV%`Y3|!h@EfNRCC^s%>s>)Z<-9is9IIfv=7w3FD ziMP+f0=_kE5wb>i>iqU2D;nb2`F80mfz+{3=#)kru{c=iJWMV%ni;(aq0C6tSQ8^xKQ48X27$5$|1KAfoEio}uQL7DNe;)#5Co3N-%JhS$c(<7$>vqQA?P)O2i^_*v!D(oVi$3wLqxg! z=1tMj?2$c8=!Fn7F;yd$8Qu;=H+NrU$#`tFeMLi^M7KE$6^e0lER;}~P3b7HiMT0o z`hYu2!zOF`ME(*91Eg4R3&lgRfH`}Pi)Z_jJyzIDCN@$G$#J%D8F!e@`N&R()?1k0 z^5oGF%+KJsu^kk9uh0BdOc{m_&&Pj+x9uKZ+|+uJyU^a@k02)`(=y5WRp2u!M45O* zkYFQD{WFs8g0xe>o~MHcxL=)6jqG`J+*R zt{Id46yo2+RILVfX$o6oR%qN-kp|bL;qTT6nz+PcnU*2P)}oEO8*SJp=M|7a<}a-X z4alg)|7!V%W`EWroyv1T)$sn_U{fJ62GC3|?g=yT@VXN3N%3@!eCB>d+n77 zF?jUWO;m_fvBXE$l}2-IzCgt^m2YL>kuCiE_x|Q>$>j$Em`Dx;+)0x+{?hhgivCMY zetJ8>q>M$yKsH@E(8P}N7!}}=^Un@iS0qHY^=SxpSf4>^HR%q(;L*;cJec{L_;$WN z+g!mFmfVd0ujDyj&Cnl8+t1)-H! zMR!Zv3iK*5*d--$y4OXwfa@9l~E%8-!6N)SVcZsQq!p++iOn{fe z^Xf8_uX)G+;1i5b-CaOpFM<0PR4qIs5#+7Pxa^pD3gKCYe@7-ciI2TxnsVi#-x@!@ z`?s?g{yEBc^9f7!&~X`{s`*1vQ&9iK52kbC9_*UGUi5oG3JZ^8(ux}(icvipu~?ma zX{~;c{4dWi@xQ+Ph<-4P<1KMby*~Al!}@QHIV7M4_JlB|xl)2jVk`88PX`RKU&SBp zr^DV@2(p)VLwgeyHEQ?=y#J*letG`?7$iGeiC5!L%r5~Hl^ao8kaC3NEKs7?@ay=N zHv^1n%ISQU7t7!o%OAi@xCyRc$4P)_)s4@q@hH`~OoF=3UzDg+Kop z!JA3AwEq7vmk*{F;k?ZM)FAHWj{FT8zR43d`2QQ3(Qn%d1l#&g4}?36#Kpz`w+~xP zq~zpG|0PZFwzv4Y|6xH3tWf{=GMgDwh9NV@w-QH&JS_*?G|u-&ROp{;r`5nf6w=z> z!?4i)D!{bm8xHjih9QGSQIG1{*%zm1^Uk!X$GET0OpM9~HRTxE3DD1&!E!W315aJ_ z%NL;`?C}g0Yb@WrCj^~m6Tl5Tz92HwF2%n)6dc+R#c7%;_Pzce-$9!|U(=>qPaQ}73K{4*uZlk(E zfFdX6pui`F%RRAdc5ig=X0I~IIfM~$ zOg3i#N31g+ef?L6It@9l9xGP&TU0+{DeNpu&zBSeIc&5lMvr?bxFyS_|9q}&|LR`Q ze32{dLt2}nm4r+Oew)V=hwM&tYK>nP7}Z4wzRt+|Ft`2-d$6ub&cU9>!}&I>RO~Q_ zDaK3=SIovdT{8)|(gy`r)AN{Gc4YomDo*n=80zT{@b59TlYyjI0FX7bt?I98f@w2@ zle{+U8JL*Swo>h%Lcv8}f3~?B(@%|@nXCN9>*Di+H&~!9H(51ilTv2}YQd5zlW*A3{eG=0TDiYVo2Ln2USlD*DJWeLvzcDmPKO3=*-#oc z4hEIB$}G6Lx8!Il%x=U;^e^hCL?){*`LQC;pr40*aI+cAJS#DHeHvb@198rHUyxoq zr318<6&NRL>NS@>JrsM3T<&%pZy%VJC^Ii2BYS-VV)Sf7WtK_DXaa7_Pv7YmmF_7Z z56oh*%ELxsrCR>BSw9;nKPvkVQjDgN)otaNCc#nUs&zu{bDCs;-)rVz)#(1>3{8Bd zpe3Ub!7f6$wZkA@p!iCU3U?kqcOc=ha!B$5_&0CVS`5lo=|<5^d*-Dapt|CA7a($X z*^xvcW)NmNd*Nq~mgU&UmuO?LT(M(4Yt%KkBm0ebhWwYi%0R;@35Q}NlSpZyeMZuJnOWl0{ ze-fwdmC!#ZfI^8knKK?Y0aUq{{JxB{h3*fdUp50{?3o39mFTypcLz+}G-7mwExzkG zGiQspHmQ!Qoi|2H74s-UBT=H2F$Z(r160cG@4Ub8x=H~ngvsn&R|ZEzpJR!=FmJx~ zxOA{wQMMYvo-@zA4#xI|!iEN5|#T8_R^GUh5c^Bx2+t#^CUlHqu z<^I+k-{^qo#)1v2qx#DpxS&6WALr_ygR_(yk3!D$M}L5x#kccs5K%AI#7vvoQLUm? zAp&66d+9-QUL&;LEFTm!xH~X*DOSNc$UJqBntXtjryj8|gz*fgc}aVi?O%DXrD+`6auFH_v)Xb?AM1#_nkC=z!A=MHQzj zeuS*wDre6%%7n8w4ty$|KuqOM!D1Qu`pt{jbDhiSvwK_*T@S$y-n|&Y5b{QCU&hZN zL~>YXRCBc&PD3fT(Z43}@`rD@&bSPEq8Yn?eS#n1OLqP9f0jJkg_ebTwK*IhO$qd! zMRYURhJfl#Y5CJbHTzGKoTE6vxJbGR#{23SzP{7z>oWi9F2POmu@E@SmU_7bwo`7I z!i2g|MiJ3=>_#cIL<2#4v|PY~MA-$0>=x&bDw)&TJz39+{lbk}@ibYjR3>8{y=JYp zL@Uu#Q)dT*QZo(D;>cfY59MiApFvC$@jk3nMv>W>^cUE745Y(|G4DLZrZ$}jAkUkH zc3Q~xrsRJun#zj3(lprY6WgEv!&)_|jHoAY9*H>RRVaA0|7p%De(VD|xZWMs7y;#u zcC~+l2+#L=!R^gmLXv`P9_+DVaxRY2<8#l1UrxnWYNFQ6re!#rXEOMv{y|7kGU>>z zI*sJj1^zE3MkMHSQK4{FeJY&`v>s<9?=_R({NCe-p}jFs_T7^gbH|$z6T>V<^ztox zuW}AK*Ofl#n$H)$H>=fZF+-ZEJ2oIyd=}F^!g(5+oyL5tfyFgzD+Y*Mt3O(PZmvPi zI{~nc_TsmRw}>$mnWHY#<0G)wr#c=k6~^E2p?UQ{>^g1Oz4+ANplI(a0xN~!hVQ}z z0^FTnJV~J3EW;&P&kF6H$=g~ixKgsHgIpHh3KiSo%y;a--j-O6_6NYvI_=%FZI|%h zVX;*zgZl^HNZv#(5iswOD!NpET(jCm1y`Ew1>+@}efp>BQimsIs_9Q^&@-tc>#y0d z>({;5ao4FwadhuH;m)i;J3+IH6|Ynn%$em9W>etv!49@Hf|00&7|id(mMOJ^S+ZV- zNqpQLG(v6!BrewTRq-9m`Qo5YrixuF5ESZ9plFbwyLy}798)$?Cj7#n&k~uChBV-J zm(?QYq5D~LkH2lH^rM!QAbf^iWbY7B;*Lrmz7P=DMyqra$^OIf04n9Z0k$M6-Qln` zy=^b$mJiuc*)s6=ATZCPTwC1Pqp6gFGM)KI^x{KEz0sHdj_oYMaSf59&K=Fwj4tY- z^~vxwbWl8<7uQPd1149>#)o>n=aCUxm6{^JlYweIX0J^dG6LD*D+k#_5#&5&M&NQ= zD2@bkEVmbAp({&AD`j#|P<^-3D|RqobNX#B`WT?lc}~az%eZSP%wxYVCLKK%)V>of z77bTCS2wCIZN59a1Zkx&nTS^mXB@yx3Qv{lg@|S1i6`w19?@0fGn*d&7wSjiY20^pgS8VIP z%kS1%`&PAY-J?*xUC`s<5&%EkFkb&SOi{+|NwjUF1YS(N+*eg@gyLn)gfuKsFG{d* z^xGdbXg%LKdgf$nEIQb*nlbOu%6z_*-_b-oAhUHT6nwuRU}^8Pc(U^GNBrma2Jvau z#;Hh&CT-l_oJN&yFD^z9PGOgE&Qu5$k=@Aj%U+mXJohX$Wt@WSJ1k?JxO*dn2ARKm ze2F}s^o#q?1uarIcb|$|W#Rznm?8HfDV&nzYiBNSKRo;5aVXZMg9H@PDudq!_U%oo zYQwboY6rLCkP9T;{W}$=Y-!D-1+PWUwJR}kd4y>;rtZdfzIyNeqL4}wb)IOVX#4m? zlvbA2T3e+EdVvsL&6pZ75S*(_B+YLvnt>H)KXZPOr_Z6{fEv9qK#Wu5%2Cf8e4!)} zBExQgW2*=be*SQ{SP)u+`jrMwq;+JFJHI1Yp}vS?uryGk0DRk|ij;948X)Z7CVphY z;uTk`f+df}4^(DK-#8ZtXC--W_7GHQHg1*Rc%Kw&Yk&1h8q-Cav=etR_Ms7AOEcEP zERLZEc>YM-K1T=|tr20WWmm}DIbayb5^W}em!hQE6D1Wl%U~(De|@kxb<`hkIBLTx z_04jHhi|1QFlkm>T3YAwpp|I-i-|(F@n-|N0YAT72&F=_9FK5dA!E-G_?)ctRNYG* zvCa|TLjs(kWtGj;3K82&yd?QJbC=}k{y7YfK3Fu|OC(5Deg%-}5PN%lZ*?uJ&O*U~ zPvne5h!+{VJ-jW$cHeVdi>GsaN+de0baKRSaADPNLDNyq` zR&T8clt{i3X~i04=#;bI!22{x4}TB?R#ANamL;beQUuQzQW+l4O~y8=DxOBz&Bnv- z)|d=l(#qY-9leT@4Gf0QNv5;UVP@38eYP*6d$uz6j-1!xMA4EbF!^X#)xT{%m8nm6 z4mwdzgQs?f!(CKk8daQ-g4EqbnHBv6LUadL@L#nZp>M2_l}SHgBm&BcdiYWryaQ_E z0eZPB)cv#&#rLUw(Lh~i&q9p1N8cala6kX_Tlb?`f8L3I)R*xsQ;%S!|%Y$l<*mFm9*aIu#m4VOQY*fwz6+Q#+m-R$06aC(yXj z$xOyvr1%4B8~Zo?ho_jEt<+5E`2BlQzsA5+)ZSlbzHT||-EgG0JfKhYtYYdaG2$D{ z3;SBE0#g@ELyYBNbuIBeF2}~pyWBn&M2hIQP?%GzM6+>I8GKGryA;c@?9WK=SWg05 zJ)cFdpPFwKv0>xM*JLZ=iY`kelRC^FVJCt|YD-4coJ=y2Ul7WX{UZKO?}%P456+Xi zVod;iaS%s8!q@3TEblGBjvyox&cP`Vim{1Tiha_$%u{J*qlV78Z(k?eziqK8{^F%I zpT}SLmOfOfR1!xp&Ga8QV>`5dOUQ>aHt8V;>DWfwhsg8IzP~XG_Ki31!D~HTS$NzS z8on~s?MdN^E0=}eyN6#ak03FRhz}=1eze_>MQ5O&8>}7Hx8Ya&zWp1FT{P{BFCm93 zNm|Qor%jDf-&}nff%Zyx^6TH z(meAO0j>yHME*?r#n9>}(@}Lm2>ghVz^Ix59GvKKM$nw?NbQLd3uYbntvH&ZbHVZh zR2y0VbnGrtFq)V)%ePx^(#z~a_jfx3w31VMLN;incNHOb?TG{1BTLq}Y88*)M;Y72 z36kXDD1#&6NyRvE45zf2&1|SkFLiIbwRX@NK9JD~{m=vG<-NG4LMWnAmA!yjc;1a5 zRKcT;p9-&{Sn5AXdk>j9LLsA==g`A4ruORMzHl6JAdu8DwOR%p9)8XT_Lu#ZRvWk6!PiAQxrv28Ym+1T(9HwL$VuTV}Z-!t-}g(+pirkOrSGD#-@n zB8wL#oyk~qgr?n|Lj_0rN*mXp*0n$M_oISRU=Jq^`a;(_u9~!?1ThAEJSwvB+GmPd zE`;}Kh$_1Jyw@FsHI^c%(~QZ$CStF_N`r;@izbfYSiF`EXPO1o8g+ zb6v#}uFDsZ;lV*sCx~iwMsQ(nYvNl7vCDW3<<~OCOPLKUY&=toHFMHEjfkfZgKrPj z-V)IUB@>%`6!d&7F-kUy`DDtQ=q~6!n!n)Vwov<|lD>F4_*U;~*zNyumk-sd!mdqFBSz)v_gW~Q7zFr0nzvbJ_NA|%W8mg1BiXx&jW|+0+E-eRNjSQ zCE|EpEVLg#66u^G#9I;8)yB^H-_FJn=`Q&|uu6PP=mtqa+Q3>7%0{Kj7ki$9*b8By za-oq*wYWaM(7yM^8ZDaoN_wuIUz?Vt3i~T%jOxq7R3vh4Je#54D(f!mxRn#LpK5(y zyKLP_Szo^%*}*sQW7&GY^gQk*)-2OizZ(60bg|6l&Mq7|b|oycm5RCu0obL@857vz z-8_nVF8t+|Yf1tuG=s{O^`2K5aFcXlIur7-yOK{;Dzgs8)61{~w7St(wI<1+p~m;_ z%^ek~Z>ep{y%o7~ze<)xR23_8J4)4EDr?^WElQJ~+M%O|^@F zo;U~7HRy(DUZzrwmY|g*eT`7jTAInJbVpymyLj`%8FFYP>qSZ2@acX zlh>Kajrsda#%uyVLoNj9 z^QSmiYC1bV`%^2PaaI0mqQ0;>9%i*D`E{^R^d*=25p}r8qmvW&S$dwIvvxLc7NR9z zWomMXzvCgKbx`Rj>t;(a4Ja>el>R7dwk_|&9Uh=V1~aU z)$e8Tyd)Y}=m>67@p-sNmU|rA!5Z+Icq~j9q9Zl^KI?j$)bT)%9y0BD)c$SmKn zWyJq|ut4xyiHB}gXIzsn;u{Bl`!WB)!YfO)lKLT>g3l38|&C-(ieYfzj-LY5b0rF zFTUSA!N(Zx;p0AvoSEjhuV;CJWilS?#7AN02CA@X^lQf}@|Ay^~ z-wDDljTRU!F77<>_VFwmDVpfVzm`y)uy(u?BgZ$05O8S;|G+QAS1COsw(9gkYM9;Q zchjA$Y>F~9ZpOgVNndPh>UWe76Ljc8<{8g$vj9JB-ZD1678+D(n)mO#dcIA>>H+ud zcMSi{`{f+9!DxY|>!IC(vgz+hN(y9FnlaPiK;(@4&CH#CDhk3k@P=+0Du2?Am{}7B zDf#xOw`42B*N`?pDXA^~8JJAgUq856MHcI&3=%)e1FJQ_V%ArF!3L)KV)<9#@x^m} zeyB2`lk2!4<=cfFW47A&2K#^I&Q*ei_dDQSw^;k5?py>gqIjx&7}8w}?xbAK6}aHA z#P@dZUMj#!CyT!24?h4&PWizxXp`Sj8YupjhAC-gT$#SLqsT4zN z%n}FKH)dH+sd9qyJ{OTt{6e2op_XW zpwtbCweqNP*w`tTs(MJp%An)!<-prhh3 z)!`3AMeB92Z#0!<5HB)vzQZR}8>vYJ8m++Ip9zMtW>pN13SB>8z~0UJ_3dO#VH$&L z4DRodQGy~WkcvlHPYa-;U^CVI_+#pu=>B-UdGhH}kHUHG(z+?!#bmFGfqn|t_Bt1y zlxz0T5U1XrY8HPR<{^jU@OFPK^)jJNz9gku1LZ=RZJ|sAZrPk0SJqvR$C;*l%Y3oX zhW$$yI-(YF;Uc*k*AbmdTH*qdn`raxu{SUtVf-@gkMqt>kjjwduF3W2ee>oEE}aQKPhB>g38iKj8&1(U zYqLG_u1af0;f~o^UWU!#emM)1VSp-Ca^n5X?2&Ekr>;~StkP|#a^4f=^)x^pv0lOl zw3&K&Fw0Ws#&UYzo{u4OnTM+d_iC{j; zfM>l`2UW>-86@@=WX-3|_ky#0#T(>h_GGwHW7Ot!#H4Dw9?9K0YcN=X*mliA=v0#$ z&#OeGkp#;g^YNGVA3^_5AM{GK>d|r>Mn^Oyfr&4`?nh);ogn~fGu&}^eb0x(m+US5 z4;6);1Xe3OUh1ow;eF4dz0?gu=5!r@SBy=j+khFH{&Pt)(^Xbha&GV_sc8E04=;=j zcI%-EL@j&P1(I`O3JzGB3Z&;6@il5S!_oOk`|;DwqUIj5-J7dw^&U@fx~PovUmjWBiT|Z`Hq9D|WDa z+GsE&h}#6GX7DyMV%-tY4qT7l;&3K{gGHt@_*i%0@L(4JTJlA3c~ETgN9L;GB``N= zo2y5+`4|(p=5`f?K>paTcUm(QcBdUnXe4YXO$CX!N5)yM89vqeHn|4baNEz5^9Uas zAwaLp*Lu$DA8*iYczyje)dcA9cVyT8ZtKa2J+@slJ{E}yW@?{|iOipFP1ZY3dsgZ6 zqT;aI45Vy9?Fg1l$ZZ_kIM>b@7?dWoT~%a(WqOgMTaT(JF~R<5*;%L0K2Yh|d!( zajjkd5mpd`L6^kr)1{y%49o2CV zT}J>mo~&~5&IJ3*28wYhdTn%L^`3LW*l*cd#<*5}N=ly+x!B@S0(3U~h9>~M`+~tj zNb^O{v6>~&DNAefdD01Y@`lA`1 z?>*N4g*+jt%5@z;hJdmrDK5T-}L?|2YoN+WIC zd_~;3t~a^~e~uFjB^w#t{rmvB-|T`G92`Cn<<6u)d&!pyf=A`FfaD@yM?iJ=1gr5a zvd?731hsax^?Z6oy*lDQ)#?Q%1MT`fEE+G)Vm8%x938FHCdwe!HAYYp9VFG5XuSv1$GBwu$W2zMaa z8Qz7pA~n;rcb{iaww*`j|75}7U1#Y(F`*!x&$vnucGgjJ#HiTQEM7CgxlDdsF1$!EmiH^XkOSxA+V)in78t{OuS zwVVyyj}8!Gy!iMmyVJzE@H<)T`BYIp&p7x5?b>c*oOvs07Pdp!nUs!_s1Tt6BZu&CUVfuj>_CL|vk*Gt87?F1iF zLsBeY40;h7V;qb^WxH@{{$0dnpfTQ6e!1AN;Xmi#dZgTd~Y@^%8gw@0OLW7kWS! zHZC^1LOh_+h;Mj_%ehe%gd>3Jyu%md5*r{?`YdW-|Fy#CI|B*<&F@titbMV@qy8=- zr);~5B*c#&$qqywN>~3eQ=1kltFtrc)@Yjdy*Ycr>MEiivy-?54V;H8Q}QDuCi{a! zjGPzLHR^?M5k^EJTBsBmdUAhjSvF)gEaP0Ef|dP-G<<>#oi8@aK4;oz-Y(u!CPep# z&a}!l>S7awKsN0!{Rpy1vLkK%dHzpS4p$nIYn9!Fd7m3DslDcR)0Zn;(Mj@Y2IC1HZ{7lo3}?K^4g7R*x}rc@B%1d--Ulo; ze4mac;lZaMhiO`jUvkxT9rAy_$!2ST#2|K=LNmU%n%_vvx#K*>%kl6RAL7zHPPABT z7R)3e#^*LgDuXb6!N2b3h|jwvHOqQ8dZO)Pp_r(>^}5F1D1nhEtau_JD3;S^++RV+ z1g_UH2-h^DEl2QmF4wSazV6UU&lLO9^v4BK<@!nZEtuyRa>9w**G7V^3E~PKAV~Ne z;Ry+>hyuS+aF2WaR(_$y{5-yR@!q57@I5A^>aaE3&QM}H#(ndx1Bo83?kn%ktaDwq zhY0gTeV2yM7`+q>Rmi7^U`<3A=&x$J@h_H$z1T&j9^Twumrej%>3_{Jt! zWWAhaZ*ydoK+0zE{sj+{HJGV83-9c~(ea`m+EfDGOv**to9^LYa_$-lZ*fN0Enf-G zmY>(_&%jx0KO!w*Pi4K~-96?64B!7c*i69^x3M26%zo~w>s&Bel9Q4Lnvi7pbc0j> zLl7Bz9X4lihVNPTMuB#-8*PuwL}}k8k=}6DI9AXDuIvBh3ULK&oez-UXm^Vk~G z$YZ!nkdC#)$-7>&)RfTs2d>QQB}Dahxq-tqTfshxw6XHw=Bt)_r(mn|+MzA*jYTzk zJ?~AHw4)x__q*+(a{2XQdOhI}hI3)nd5>tWHgoYCB+E@fI;9ftP`lhpN|JQ2Rz~P- z9Pdd+$u;DI3z_Bg#cyfV*~{y!HY^R^rC$?{8Htr?$Mf1oFsH>!(#=IpiGp5_8Lt{M1T^vW$MHyf{@g-dLrsT^NcY&T&e zMvr$}ftoXZNPg<$anI;&-zR9U4$n>MgZDQ-W8>MC*bXc1$eEI>L*F$NE0?Oa8uELH z`Fl-yEMwo%g?e#=q?u-mng8ug#-X-N#?Z`jp$H@k?ig+Q_t~8pRT0Ui#i)C7^EwlJx z`2+|e=VvN)qzzDfwwV~ZoysXEkWZVjq6NKNoX8|JGOC!ke47#C@cX)Fkt#0nEBCK)Gdy2(;s@@7-ORTnJUG zy@s1s`jC9(GnSh&x7k;4_asKd^<`g`Voj`Moa6@6ph@6E#F}|SAG#CbAkal*YeYu= zquPR@r1i}xd}$30Eh>=yRZg1oZxRG4DW#n3^x3vPiR%nbYziWFo@F*Uhwo&BJSR87 zS~qyQql;+a02{}ptNWBeUAoSyk2$nv_ZCKfgKxzVtw<<3NL~oI zXs#Fa3hR0Bohf~qot$STt$n9;lW{yJt5Xp{X4ev}u=)M?-V5EZY=`bz12O_OIgw#2 zB&*)2CQ>Pa0cw$jkIxiww3U#s4K6(R^moU?2FQe6>u*(Xo6pttNWVA}M#e-3X`NlyHphKL1{NzY+yIA|*5C)M z9{gx?n|jvOmU1@KoAl9X+O5@ZCmk;$VT1PG`KCTD3n0iFTav=We&r9H?-;JzQOAjx zK7F5wNwR-xQvf_D11rF7o6hEh&trJ%K=~GVyHvEEVyz<`KmL)(Y&(bl_0AG25}L*f zDA%(Vm=P3EZ}*0D)o~f~+5`Pn8@GGMv(D33pA8+)XGd4PK@jkfHKYEsh6gns8Gmf= zL^S(FgHp*0X1@t2;FI>I>y&g=4{dM3l!#}uZ3taxGE*vFJ zQs=3^s_nVFj*=;0fI>gpiFn7?n5T^9;e8fa^dG@g`xjNcxDD5?sDfl<^MoTJigcz@6CmC)ZpzCXoNVY#1lMsiq@ z=ZfpUw(k#0NgTXy34i`R{^IFOU`0Uc#2vo#IFL@oVU_xq#B@Z7Kp(96TWR+$I*e&0 zkyRB#azoWO3b}Mynl~(+P*+ej^uLsjRx%b`efgTpWeUB@+Tz?J{O?H_qo* zawSZU38m{v^sO&39aTkR_xoRrFGz*U5*2pMW$U>205g1d`8F~^cORwuL-iyaJ`W&I z)@#9hD$2klHTY39lHv`&hNp_f3ZPvVnKI>q``$d?`%yA6?**uR&q5PJQ5vN&{d+G z(fa`UYKtNEUo+T{#Y+(=*oIhQ*WJKF-$!uD%B-vdi|3E} zNM*2Q(i(hvn0z0`S@wMd)AVL#-*nXXLTg%J@!{(#F3S!^dg z*e6mEf-9c;h)x=cKJwNL?Qr~Jkj2piA32IF+$Jp0oUTG$^K~ZxR##QacymC)&xs0@ zE?cSLipkaqbJ>u~SDa=l)9t}-nbHZ~iunK9`>LQggKb@cI}8MOCpZKPZb5@P!5Q4$ z-Gc`Y?jGD_Uwfmv9brA}ZlRrt9cOHIxzL-4*?x=WQ!b}G4 znW03PM0fqZza2SsVV6EVR`@K1*ZJ?u`Ic?|2Mt4+CzA-m_cGY-QMn|`e8H0zo2 zB4vmyGfVh$bNSOeD}T4&+n&w`riiB0iyb+SDeU|;EICyCcd!%P%MD0D?s;y#1imv{ z7ju&3S=#oT?#EFC1tp*J11@;F_*_t_g_X$-_EcDh6C`WpBo4`LDrN|JT)OK`23$V* zcT)Xyan5Yw&I@ZUc2^$?m_8fNV1*x2s`T&)Z4n`eCyVUM_N%I(K^;z^V)(S+xfOC# zzHQ{+Zp!_@QSJV5h2;iuzUFgqJB=QAL(BHsQuaVmzz)_?DQ_ymt-`L&3lcV8Yva0i zfL8%JbneDW9{&=#Eb_4k1!S_5LQxlRYBM{*FmyDtU;qZ;RdQE^y1%zHd0Lg?t}GVG zo6eVvV_D=prKv_{`Z9{ZWiwNvus>KuHn{Oa^>u%#hwL+Fv5D%3pcM|fADddSv+87a z&IA{>`mk3(?Q1%+xg)RGfe<3!MAeYz!9R^0$C2%A7UMBD1bfCwHZLv1A4B!+((T{F z^ox>4zvLW^hNpBW?vB)p-xNNQSb7$MxY)CEjnQ)j;LOh;VcK8jJ}%_?PZs%V#~L=E zDV^?^_2;*C7*F-K9DLX@^Lspuw7Ph7TJfyJa)b*}FaGh19ns{WOjKfvi7TwE@3eWn zU||x=`D4zyezYvQU);V6Ev3lhRk4!VuOCvhw6vp3EttRe@ACsA(+GJjNPTX|W1|?8 zJ4((xg>Wd8PIV*M>Eru$c72m5E!EwbuH+MyWM#elVzOnxLbT|jV+=E$~&@44>9<_1>XpT=KS^JdtCn7&Bek?dll z;M)tI7|N!KRpO#SA;UQ~2aH7vm=v7!bp(9^04rgGBI+}aitYhkZ zW*qBC-cu`PQ0Xe9xs_A&g-2|pt9D-;wlZUDdBX^leTZUm7ckjbygXQH!U@2z4i$+* z8@uuNuqq<)Mf=EXH>5t}cMDg~iXZOM(Ve8^x%8~#3_;P5a&Hiypy^73D_1v)Qs+tN z5Nk)n>M4q>A3cv3ZFO1oEY7>ummq|vPmD&CgmgCAeLddW&b>MawIe>Xr|*4@DfB|r zdvQGA;W{w}S0t0_h|ImVlF_hR`wLE=hN_q-QZ0ULR88zt+18xtJkLl}8}^_x6O8xY zQ@9Vrt@rfLNA`L`^vsqNDQ`BF{BEWgV_!YUPg?BCbsq6z&u8%aMTp~CMRMb2D@A@| z-b?t4Ze9&1ZCv+efbbrB{IDF|PFS9UCPREWKFT3^s^D*Sok@;eq2%2@Mef@+jML7DgRJ^d76|ILHCH3v zyAoSRnMNFY*C>QSbx3QEZg9{d5>wLe$ah8QVC=IW+UGst-yPj#vdBa0pT7AF0sETr z=&7Aob>6aQBCYz|eOy@hT;!I;i8GoPz*e_Fm;lMr-nd37;;^52w`lNUU&RK-!8u7t z@NXRp_G&lQ{MHhPTLub1B180tmZ|OrSeANwEJHdJ=8N8bwaT?pHJWzcbadyv+F*nO z+j@>{pN*b0vJ6_qm%)!0ugVSOe1^Os?7s5akfT&CU;4?_c)#iX6XMJyjh-2#es7*v zHNRk4PSaqs`z>mbS0R2ukCB8vCK*ZK5fwy(qy5y|TZ(Jxc9kzn!f37z5ysE6 z;Sb)26FQJFwdV#mwn}_X(?M;QdSDBf>b!n&Q75zibzEh-N0op++J*J{X;SINl*1p2 zgDisbnAqRCt8tb7j8=jm7Px2$eqWD{c<1iXFsVY`%xa>vuEU=3b0>=(rl3&EY`ID^liIfuH%n?$$%X>)RBcF2 zH<)I3hfSSe*M-jXzCQAR*9smroG7W=iu3JoE}Xs3ZSPoHxa2-XzFtvFxhgl3+CFP! z>$2vLaWqS(xd`m+e8nj1Jsna*O@vde6>8Z52 zbsIUXUx*@dqKb>(E+!k>O5@+N#i+@T7HgOQjOPck>jO#}!uufnab6}|WkU+qXVj8^ za?6c`m}4vH1i27-1U<#0vnw`|6Eg_2qCO4C7d^~*EtJd3 z+l9ytxAsIT7JN2aldf;fZ`q8HB_tGoC&0(doiI}QGcoNa)iDQiS&zLt!iS#&+hOp~ zY^sv#r*V6|R(&L#)n9eNiOE35;<8Yt%jyl;pd|T8RiRR8rwc^op=6Pf>w15nxbszE zP>|E3_}3-VT2f4T`phD5xx8eU(^NJt?X+rhZK=P`vMLx$a3QEK5!JjBKU5B!N~Ni# z!D58zf;@_#D8yoYRcNu~H>}@=sHZg+UWBBykxCE8QEqSYgXn#}VF@^4o#2WJrj`}= z_uW~v{#h2k#|OPNbuyJkATPJ|5fb`_9>vyM=7o7u0RM@=AcEu6DzpI6PAt!xdkG#%kOSF!l2OD*-syJ@e^kK)<< z&H(GN=Ap2?ip$+EjR&&@WNNxQ)LL50`_42hMvB}&w+9Ovlgd}O4Kya~rGESE=6>+l zJxDcUwBKWix+j{dGw@9rNheook7_KL_%iFPq+z#&v3pgLX1^_!28Q1Hh`-Sn@*(!b zu|HruZ`MOl8)*i@lK;Lko0buFc3-cp!?Ta}o{^z$?4zPu29eJ32biv-0ND-5PLEQ; z`phF0T8gGf!@!5r+ok#{+H6|bY-MN&3K|l@pTvV58=8ugYEtxZ=?kTHABV}0yj?iO zZbCSq?8>XU5`t`>@77oNbSUN{N=HXa<#Mfp<@klg^Q@sGg%B}GXIcKciXjq&0K2`f z*p<0g#$Ovw)Y2X+HK-HZs_;vDuV|eF^()=+Wpe~{val9f3#@KEtgcT1ek#m0pD6g3 zqjttzeY<{}jm-*2R%(6}##dlf&yi{xBG1IoJ06|MtuA{6Wcz4U*?2cp-6n~Z2I%bE z10i$Qp~){vFty7StFQ%n%*n6)Fl=R#X~(ZaykD*QcYymwj-t0kEDNr`T#owgdF|nz zfbEz|@gv8DJ>QjW=+s)ZbT(35ven{0j%t0D{Os6#nha?h6ix7vuJKWFnD&UgOKpD( z<2$V@L}agT94KrkgR=CZwOVX{52UCpL$dOfY$+Hs4t`AP@E{$gY)ml^*yC5b@3R?_ zndVhC<$j__E&V#?`t5E`J6I!_@a{82_(L!oH7>MXrUWR3otWsA{tkC()_*%QP= zwlWXhQ{E}yk*G&x>DLib64yGL$fqPGY72=-*~V?41- zBSkP?>TtP!C=?1_dnLs3AQeG%%uj$)=KY~iLD_Un$TO<|uT31^(9gu-N1=l9xeBg$ zC4*3zV5$mN0+~!ww(8H$0vuAD#^YT)Q7;6r=h1&c>kstRs_%@?(%1XR4}8JVL}Oad za1^5su?|12U!!hAh6&>*{Y0R?TZ*FSI7Vz*};$k1}w2ilnI+T1N ziioc;p4>gpPLwO|Rn(1hq6a(EIg9PiYywSZUv?QFtbKf*KP9ePawZETePi`p4N21U z+gLFd&KM9MO`UeFU}x1pE&OH|#A4+1`jCP-akQ71UM#{()|dTo8lZTX{1eBycix zJErc$4e-7mrsGCKq>lhxbV zW&cxg)gL0Q?+>VrYu*$dL=OBtIM&M(z0bkBoWP6e-WBC#9#@{DJBMifL#>Tic<-1c z_(oO#lqaX>wlRPt!lHE;#kwTlsiJBgMyeS#${IX2y_Q_h5&K z9(zSyUA|XkxDZ9HG!pQ!KR6v2qf4ll49+WeSFEQ;q4xkEHQSm=c83RFMfP`gF z3To;tHc~ywTBN%SSt)4|@Tu?1GJ#OM)DMPX*;*3JNRp_I2rwR6pZ7J6fCqVeY;f5@!u`K*W@r>fhF-fxPWQ2RkD#mgZv#<@@q>c9& z$a91v^x4fr#&qh5y z4|uce8ECa>6X74!L7@x^WV7Xen67?182@Msm(^zBQ9A4Sf>Vn(P{Mj$cOV9@hPVzM zKd5HB`br}DDKli_qMF}hPsoLUIr?WsND{B5M=>fFH7yH#a1d^?tHB)M!_w%?PEi9_)YcBlW#E+uQJR z?aUJeYw#}GFE|FHya*;S#%Us-xIpg92mLnugK}geUXuU%w~L4EA3T* zYK>O?Q_I3&J7NAWSXy@BU-0Sw!SO(JXkQ|G2KV6238r9IkJyA6xgTUTAz^;prDYv zUN@+p95;Ho)p2w0bg?&aKYF0SnYrF%*DL$^b23EOkb!)qJ2b1I=3F=m4gI-0?08wV zcIrZm0x)HS1ljk-!MQ*-gHD91caztAKXbTXLL(-EMR9Yb zuDNnJj?)JSS2i)S-C1woYK!zH66#N9$?PjZUxo!O6Cd~_yLG|GtZnGQYalaV zS>*$89`#c|6`jbRKk~*0jbPQ1cA|w)y&@+s<4MuY-}6fcOa3hQEZLE%B)^7B2Cu_` z?6HP9wn&fAxEFvf%z-F_nUY35+@)8PARFakZV)$>!zU=Ey4KT&j7&6>889}RO^+PNx!6sbEZ$WE0Q!h8sg>*)@r{u89X2-yb^chuGB+qWUr)}BD@dq zbvu|P6D7lt)+tB-vJ%Cs`MbzJeWBiOLXrm{a`=R(=NUi-I_Zep5Zf^LT`ENU?AE`2 zP5RCiZy+D*aih_k1iQV5!a*ST_Whbfa=gK0aexu2N*1T-`$r6eh}D@+>gSR**%Wc4 zwAUz)oQ^`(r{7~%=>B?XoIZcdJV z+;-gG_$p&KnH@&xJ0qxs*QN5@ks$A*AF4#RZw1JvO7ERW+nMp+s;`{|&&!asNIxSr^9@^Dc}f61OKzB;aq$T_hR>!XF?QhwidDp@MX;-o?@TE#Cv8{W4adM8$U;<_>N{4;g43fCP zttHo~4i}F_xbd>vGM0g#gSyYc6PwpQiP*!DM5ufHbNyL$kETS`8TT}M@wM^eBz&eb z+Er68Pv@8Yg>qJ_b#Ft=e+!vcnOyDTPBDFEyvu3mx8eqCbiKELbde*NcS=9S_{pot zQd=Y(2V;^!+A;H;EmR4;ap6gJ=Zsz)92Kl9ms!2q_Fy$3|jW9 z2qok3Luh{OScRU0a)PD-MrKu?**t#&thmn1PIO)n1AaSGaWDX;Km>oIAF1SHX>2-n z9#o1N6@--sA=c;g1UTPg@;W@=9mcdu)d-o?eV(Dp8JF#z} z-#M;^Ma`B>R{I$eC6lO^fr3MsdxnntdlFxap@8GCSQ~mIbvEYK<&k! zadwbJ#mh@2p)S=wbaG}~%#}Utdhz3getKxKraD>lBEq6M>!bg3Rzlod58R>j6FxJ0 zzFStzfNSMuvC$*t**Cnu7m~S|+s=3%S@7D9Ybh6S;2lk=2yuGSkA1naMSnSg(Yv(@ z@(1v8J8A$*s%D|E8@t{eiLg~z87W$aRgqY));EThu%E za(T)>ej-#NtVBIzSkaa*!EQNH3^gf>3~XYIT^@GbsuU@)8b#%_W=DB^-ux0HF56sy z-06(Ie=hu^#n2)W>kw0f1{&WxlC|kr$)4ZN-mBNTD5!{+;;|_-BB%C%sj5f6MBuCIMMNA z6TcMmERbJg-<0-2E^p4b9UE;`%@|m0-@MXyJX|Hb+;O@_a6a6=W2hybP zRNJbJLi9<)gmUMPqxw&u5{f^enF?F%{Q9bNXA55n5+t_v^$%(pfDq6*ecXl$GJBb4 zw!2z}(NN*qx-)eUz<1pQxp#_ zd>qDP8?N#ReWEAq3L+ztlELE!!3|4r{m?wLA6m({A$@Xy+3op?ncQWVat>Y*Q{lko zA+5{&YY^4SjSUcm#^V-__Z|sfD;;ajQnEH|Fee8|N$KV`$pw5-GMsMoN%XlzRN%1lr zJD%Np7+<6}BtB#7_d(K!Z$jbs=!ApPiF~5}`BYJba1E4_>quC~by%hV#Mun=XMCEX zS^hcdtXTnONHmU*+0L$(iB|IteHqxE*I0}wUxwyTOI)v8BB-GvSYRDyF5rz;4|8%j zEYCIUW*2Kn)PXXTT}u7fNb6LZvaw_cwp(4D&Qmiq>0LkyB5e<LAjh+bZm>4j=_ zVZXoQ1%->gNu`_YdEva6@-~(O5S8hL;|2qcgQh_8p7JB0O47_ciWMoTKul3S=v-9y zGFa|m1(7QTpE|-VBf@Al!raoHD4oFAogtF;ux4t8*aBIcKEl@9yb*z@ywLk!$x}Ko zT%!xUTQ#|oM|f_Nd+A|HUJP!$4>r!aL2}5t=m^I3Ecq1R0`=;5hkzALqR9!8st4oz_k_1UsopKqah(rQtfGnIcd zhcyF3cT%~P#;XFl@hfkIjnFTggc9!@{~j^}(U(!6eyw|is}Zh@$2JFbLWKsC$~mo7 zaK4^(vYt&c_cV}~|KhOzcax02vF3w$x`4sH z#ZGEC>jQmxq`!qs;Yh{Rn5r(uP1QMdh^&&xT=P&Kw10$|pFAA2DF>}UaEN+P6<-O% z;XCv|cO0+J>2UbX7&o|pq=>)4inVCayOn&kz)F!8csW@mGNO(kx1srJg#hgw5)L(h ze%#_beg0AP{Qj@H>Hq6UbhgsoAE=k{kEf4q;08PVEv8bhZn9$ht-}6Wblv~h|7X7b nPiWo$@st05{lu*I^^F!~*EU@A0td7?6O7zPC8_Tc#v%U;c<)4U diff --git a/3-Authorization-II/2-call-api-b2c/ReadmeFiles/topology_b2c_callapi.png b/3-Authorization-II/2-call-api-b2c/ReadmeFiles/topology_b2c_callapi.png deleted file mode 100644 index f2247c75534347b00d8cd49b379dca9076977f0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18042 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.0.0" - } - }, - "node_modules/@azure/msal-browser": { - "version": "2.37.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.37.1.tgz", - "integrity": "sha512-EoKQISEpIY39Ru1OpWkeFZBcwp6Y0bG81bVmdyy4QJebPPDdVzfm62PSU0XFIRc3bqjZ4PBKBLMYLuo9NZYAow==", - "dependencies": { - "@azure/msal-common": "13.1.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-common": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.1.0.tgz", - "integrity": "sha512-wj+ULrRB0HTuMmtrMjg8j3guCx32GE2BCPbsMCZkHgL1BZetC3o/Su5UJEQMX1HNc9CrIaQNx5WaKWHygYDe0g==", - "engines": { - "node": ">=0.8.0" - } - }, - "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, - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/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==", - "dev": true - }, - "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, - "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-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.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, - "dependencies": { - "@babel/types": "^7.24.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, - "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, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "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, - "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, - "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, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "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, - "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/highlight/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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.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-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.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "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-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.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "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, - "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/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/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==", - "dev": true - }, - "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, - "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/@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/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": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@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.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.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 - } - } - }, - "node_modules/@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", - "dev": true, - "dependencies": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "@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": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.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 - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", - "@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/@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "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.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.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/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.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/@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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "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, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.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.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "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/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/node": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", - "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "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/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "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.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "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/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==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/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==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "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/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "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/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": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "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/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": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "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/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "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/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "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/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "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" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "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-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==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "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/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/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "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, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.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-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/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/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "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 - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "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 - }, - "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/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "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/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "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/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "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/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", - "dev": true - }, - "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, - "engines": { - "node": ">=12" - }, - "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==", - "dev": true - }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "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/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "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==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "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/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "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": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.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==", - "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/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-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==", - "dev": true - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "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==", - "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/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/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, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "dev": true, - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.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/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "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.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "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==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "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==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "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/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==", - "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-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/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==", - "dev": true - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/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==", - "dev": true - }, - "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/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/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": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "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/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-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/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-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-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-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "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.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "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-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-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/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==", - "dev": true - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", - "dev": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", - "import-local": "^3.0.2", - "jest-cli": "^29.5.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 - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.5.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/jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "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 - } - } - }, - "node_modules/jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.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.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.5.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/jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz", - "integrity": "sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0", - "jsdom": "^20.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@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.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.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-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.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/jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.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/jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@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.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", - "dev": true, - "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/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@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-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.5.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-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/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "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-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/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "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/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/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/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/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/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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "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/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "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/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "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/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/nwsapi": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.5.tgz", - "integrity": "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==", - "dev": true - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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/p-locate/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/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/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": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "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/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/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "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==", - "dev": true - }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "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/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "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/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.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/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/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/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "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==", - "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/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.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-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.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, - "engines": { - "node": ">=10" - } - }, - "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/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "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==", - "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/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "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==", - "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/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "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/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==", - "dev": true - }, - "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/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "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-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/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "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-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-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/superagent": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz", - "integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==", - "dev": true, - "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": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/superagent/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/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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/superagent/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==", - "dev": true - }, - "node_modules/superagent/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/superagent/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/supertest": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", - "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.0.5" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/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/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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "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/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "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==", - "dev": 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/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "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" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dev": true, - "dependencies": { - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "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/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-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==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "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/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==", - "dev": true, - "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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "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, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "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/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "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/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "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/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "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/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, - "engines": { - "node": ">=12" - } - }, - "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" - } - } - } -} diff --git a/3-Authorization-II/2-call-api-b2c/SPA/package.json b/3-Authorization-II/2-call-api-b2c/SPA/package.json deleted file mode 100644 index 686f923..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "ciam-sign-in-javascript", - "version": "1.0.0", - "description": "Vanilla JavaScript single-page application using MSAL.js to authenticate users against Azure AD Customer Identity Access Management (Azure AD for Customers)", - "main": "server.js", - "scripts": { - "start": "node server.js", - "test": "jest --forceExit" - }, - "author": "", - "license": "ISC", - "dependencies": { - "@azure/msal-browser": "^2.37.0", - "express": "^4.18.2", - "morgan": "^1.10.0" - }, - "devDependencies": { - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "supertest": "^6.3.3" - } -} diff --git a/3-Authorization-II/2-call-api-b2c/SPA/public/authConfig.js b/3-Authorization-II/2-call-api-b2c/SPA/public/authConfig.js deleted file mode 100644 index d63c343..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/public/authConfig.js +++ /dev/null @@ -1,113 +0,0 @@ -/** - * Enter here the user flows and custom policies for your B2C application - * To learn more about user flows, visit: https://docs.microsoft.com/en-us/azure/active-directory-b2c/user-flow-overview - * To learn more about custom policies, visit: https://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-overview - */ -const b2cPolicies = { - names: { - signUpSignIn: 'B2C_1_susi_v2', - forgotPassword: 'B2C_1_reset_v3', - editProfile: 'B2C_1_edit_profile_v2', - }, - authorities: { - signUpSignIn: { - authority: 'https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/B2C_1_susi_v2', - }, - forgotPassword: { - authority: 'https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/B2C_1_reset_v3', - }, - editProfile: { - authority: 'https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/B2C_1_edit_profile_v2', - }, - }, - authorityDomain: 'fabrikamb2c.b2clogin.com', -}; - -/** - * Configuration object to be passed to MSAL instance on creation. - * For a full list of MSAL.js configuration parameters, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md - * For more details on MSAL.js and Azure AD B2C, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/working-with-b2c.md - */ - -const msalConfig = { - auth: { - clientId: '2fdd06f3-7b34-49a3-a78b-0cf1dd87878e', // Replace with your AppID/ClientID obtained from Azure Portal. - authority: b2cPolicies.authorities.signUpSignIn.authority, // Choose sign-up/sign-in user-flow as your default. - knownAuthorities: [b2cPolicies.authorityDomain], // You must identify your tenant's domain as a known authority. - redirectUri: '/', // You must register this URI on Azure Portal/App Registration. Defaults to "window.location.href". - postLogoutRedirectUri: '/signout', // Simply remove this line if you would like navigate to index page after logout. - navigateToLoginRequestUrl: false, // If "true", will navigate back to the original request location before processing the auth code response. - }, - cache: { - cacheLocation: 'localStorage', // Configures cache location. "sessionStorage" is more secure, but "localStorage" gives you SSO. - storeAuthStateInCookie: false, // If you wish to store cache items in cookies as well as browser cache, set this to "true". - }, - system: { - loggerOptions: { - loggerCallback: (level, message, containsPii) => { - if (containsPii) { - return; - } - switch (level) { - case msal.LogLevel.Error: - console.error(message); - return; - case msal.LogLevel.Info: - console.info(message); - return; - case msal.LogLevel.Verbose: - console.debug(message); - return; - case msal.LogLevel.Warning: - console.warn(message); - return; - } - }, - }, - }, -}; - -/** - * Add here the endpoints and scopes when obtaining an access token for protected web APIs. For more information, see: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/resources-and-scopes.md - */ -const protectedResources = { - todolistApi: { - endpoint: 'http://localhost:5000/api/todolist', - scopes: { - read: ['https://fabrikamb2c.onmicrosoft.com/ToDoList.Read'], - write: ['https://fabrikamb2c.onmicrosoft.com/ToDoList.ReadWrite'], - }, - }, -}; - -/** - * Scopes you add here will be prompted for user consent during sign-in. - * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request. - * For more information about OIDC scopes, visit: - * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes - */ -const loginRequest = { - scopes: [...protectedResources.todolistApi.scopes.read, ...protectedResources.todolistApi.scopes.write], -}; - -/** - * An optional silentRequest object can be used to achieve silent SSO - * between applications by providing a "login_hint" property. - */ - -// const silentRequest = { -// scopes: ["openid", "profile"], -// loginHint: "example@domain.net" -// }; - -// exporting config object for jest -if (typeof exports !== 'undefined') { - module.exports = { - msalConfig, - loginRequest, - protectedResources, - }; -} diff --git a/3-Authorization-II/2-call-api-b2c/SPA/public/authPopup.js b/3-Authorization-II/2-call-api-b2c/SPA/public/authPopup.js deleted file mode 100644 index a2ffb1a..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/public/authPopup.js +++ /dev/null @@ -1,113 +0,0 @@ -// Create the main myMSALObj instance -// configuration parameters are located at authConfig.js -const myMSALObj = new msal.PublicClientApplication(msalConfig); - -let username = ''; - -function selectAccount() { - /** - * See here for more info on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - - const currentAccounts = myMSALObj.getAllAccounts(); - if (!currentAccounts || currentAccounts.length < 1) { - return; - } else if (currentAccounts.length > 1) { - // Add your account choosing logic here - console.warn('Multiple accounts detected.'); - } else if (currentAccounts.length === 1) { - username = currentAccounts[0].username; - welcomeUser(username); - updateTable(currentAccounts[0]); - } -} - -function handleResponse(response) { - /** - * To see the full list of response object properties, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#response - */ - - if (response !== null) { - username = response.account.username; - welcomeUser(username); - updateTable(response.account); - } else { - selectAccount(); - } -} - -function signIn() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - myMSALObj - .loginPopup({ - ...loginRequest, - redirectUri: '/redirect', - }) - .then(handleResponse) - .catch((error) => { - console.log(error); - // Error handling - if (error.errorMessage) { - // Check for forgot password error - // Learn more about AAD error codes at https://docs.microsoft.com/en-us/azure/active-directory/develop/reference-aadsts-error-codes - if (error.errorMessage.indexOf('AADB2C90118') > -1) { - myMSALObj.loginPopup(b2cPolicies.authorities.forgotPassword); - } - } - }); -} - - -function getTokenPopup(request) { - /** - * See here for more information on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - request.account = myMSALObj.getAccountByUsername(username); - return myMSALObj.acquireTokenSilent(request).catch((error) => { - console.warn(error); - console.warn('silent token acquisition fails. acquiring token using popup'); - if (error instanceof msal.InteractionRequiredAuthError) { - // fallback to interaction when silent call fails - return myMSALObj - .acquireTokenPopup(request) - .then((response) => { - return response; - }) - .catch((error) => { - console.error(error); - }); - } else { - console.warn(error); - } - }); -} - -function signOut() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - // Choose which account to logout from by passing a username. - const logoutRequest = { - account: myMSALObj.getAccountByUsername(username), - }; - myMSALObj.logoutPopup(logoutRequest).then(() => { - window.location.reload(); - }); -} - -function editProfile() { - myMSALObj.loginPopup({ - ...b2cPolicies.authorities.editProfile, - }); -} - -selectAccount(); diff --git a/3-Authorization-II/2-call-api-b2c/SPA/public/authRedirect.js b/3-Authorization-II/2-call-api-b2c/SPA/public/authRedirect.js deleted file mode 100644 index 09715e5..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/public/authRedirect.js +++ /dev/null @@ -1,107 +0,0 @@ -// Create the main myMSALObj instance -// configuration parameters are located at authConfig.js -const myMSALObj = new msal.PublicClientApplication(msalConfig); - -let username = ''; - -/** - * A promise handler needs to be registered for handling the - * response returned from redirect flow. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/initialization.md#redirect-apis - */ -myMSALObj - .handleRedirectPromise() - .then(handleResponse) - .catch((error) => { - console.log(error); - - // Check for forgot password error - // Learn more about AAD error codes at https://docs.microsoft.com/en-us/azure/active-directory/develop/reference-aadsts-error-codes - if (error.errorMessage.indexOf('AADB2C90118') > -1) { - try { - myMSALObj.loginRedirect(b2cPolicies.authorities.forgotPassword); - } catch (err) { - console.log(err); - } - } - }); - -function selectAccount() { - /** - * See here for more info on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - - const currentAccounts = myMSALObj.getAllAccounts(); - - if (!currentAccounts) { - return; - } else if (currentAccounts.length > 1) { - // Add your account choosing logic here - console.warn('Multiple accounts detected.'); - } else if (currentAccounts.length === 1) { - username = currentAccounts[0].username; - welcomeUser(username); - updateTable(currentAccounts[0]); - } -} - -function handleResponse(response) { - /** - * To see the full list of response object properties, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#response - */ - - if (response !== null) { - username = response.account.username; - welcomeUser(username); - updateTable(response.account); - } else { - selectAccount(); - } -} - -function signIn() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - myMSALObj.loginRedirect(loginRequest); -} - -function getTokenRedirect(request) { - /** - * See here for more info on account retrieval: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md - */ - request.account = myMSALObj.getAccountByUsername(username); - return myMSALObj.acquireTokenSilent(request).catch((error) => { - console.error(error); - console.warn('silent token acquisition fails. acquiring token using popup'); - if (error instanceof msal.InteractionRequiredAuthError) { - // fallback to interaction when silent call fails - return myMSALObj.acquireTokenRedirect(request); - } else { - console.error(error); - } - }); -} - -function signOut() { - /** - * You can pass a custom request object below. This will override the initial configuration. For more information, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request - */ - - // Choose which account to logout from by passing a username. - const logoutRequest = { - account: myMSALObj.getAccountByUsername(username), - }; - - myMSALObj.logoutRedirect(logoutRequest); -} - -function editProfile() { - myMSALObj.loginRedirect(b2cPolicies.authorities.editProfile); -} \ No newline at end of file diff --git a/3-Authorization-II/2-call-api-b2c/SPA/public/claimUtils.js b/3-Authorization-II/2-call-api-b2c/SPA/public/claimUtils.js deleted file mode 100644 index f875aba..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/public/claimUtils.js +++ /dev/null @@ -1,224 +0,0 @@ -/** - * Populate claims table with appropriate description - * @param {Object} claims ID token claims - * @returns claimsObject - */ -const createClaimsTable = (claims) => { - let claimsObj = {}; - let index = 0; - - Object.keys(claims).forEach((key) => { - if (typeof claims[key] !== 'string' && typeof claims[key] !== 'number') return; - switch (key) { - case 'aud': - populateClaim( - key, - claims[key], - "Identifies the intended recipient of the token. In ID tokens, the audience is your app's Application ID, assigned to your app in the Azure portal.", - index, - claimsObj - ); - index++; - break; - case 'iss': - populateClaim( - key, - claims[key], - 'Identifies the issuer, or authorization server that constructs and returns the token. It also identifies the Azure AD tenant for which the user was authenticated. If the token was issued by the v2.0 endpoint, the URI will end in /v2.0. The GUID that indicates that the user is a consumer user from a Microsoft account is 9188040d-6c67-4c5b-b112-36a304b66dad.', - index, - claimsObj - ); - index++; - break; - case 'iat': - populateClaim( - key, - changeDateFormat(claims[key]), - 'Issued At indicates when the authentication for this token occurred.', - index, - claimsObj - ); - index++; - break; - case 'nbf': - populateClaim( - key, - changeDateFormat(claims[key]), - 'The nbf (not before) claim identifies the time (as UNIX timestamp) before which the JWT must not be accepted for processing.', - index, - claimsObj - ); - index++; - break; - case 'exp': - populateClaim( - key, - changeDateFormat(claims[key]), - "The exp (expiration time) claim identifies the expiration time (as UNIX timestamp) on or after which the JWT must not be accepted for processing. It's important to note that in certain circumstances, a resource may reject the token before this time. For example, if a change in authentication is required or a token revocation has been detected.", - index, - claimsObj - ); - index++; - break; - case 'name': - populateClaim( - key, - claims[key], - "The principal about which the token asserts information, such as the user of an application. This value is immutable and can't be reassigned or reused. It can be used to perform authorization checks safely, such as when the token is used to access a resource. By default, the subject claim is populated with the object ID of the user in the directory", - index, - claimsObj - ); - index++; - break; - case 'preferred_username': - populateClaim( - key, - claims[key], - 'The primary username that represents the user. It could be an email address, phone number, or a generic username without a specified format. Its value is mutable and might change over time. Since it is mutable, this value must not be used to make authorization decisions. It can be used for username hints, however, and in human-readable UI as a username. The profile scope is required in order to receive this claim.', - index, - claimsObj - ); - index++; - break; - case 'nonce': - populateClaim( - key, - claims[key], - 'The nonce matches the parameter included in the original /authorize request to the IDP. If it does not match, your application should reject the token.', - index, - claimsObj - ); - index++; - break; - case 'oid': - populateClaim( - key, - claims[key], - 'The oid (user’s object id) is the only claim that should be used to uniquely identify a user in an Azure AD tenant. The token might have one or more of the following claim, that might seem like a unique identifier, but is not and should not be used as such.', - index, - claimsObj - ); - index++; - break; - case 'tid': - populateClaim( - key, - claims[key], - 'The tenant ID. You will use this claim to ensure that only users from the current Azure AD tenant can access this app.', - index, - claimsObj - ); - index++; - break; - case 'upn': - populateClaim( - key, - claims[key], - '(user principal name) – might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place or might change to reflect a personal change like marriage.', - index, - claimsObj - ); - index++; - break; - case 'email': - populateClaim( - key, - claims[key], - 'Email might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place.', - index, - claimsObj - ); - index++; - break; - case 'acct': - populateClaim( - key, - claims[key], - 'Available as an optional claim, it lets you know what the type of user (homed, guest) is. For example, for an individual’s access to their data you might not care for this claim, but you would use this along with tenant id (tid) to control access to say a company-wide dashboard to just employees (homed users) and not contractors (guest users).', - index, - claimsObj - ); - index++; - break; - case 'sid': - populateClaim(key, claims[key], 'Session ID, used for per-session user sign-out.', index, claimsObj); - index++; - break; - case 'sub': - populateClaim( - key, - claims[key], - 'The sub claim is a pairwise identifier - it is unique to a particular application ID. If a single user signs into two different apps using two different client IDs, those apps will receive two different values for the subject claim.', - index, - claimsObj - ); - index++; - break; - case 'ver': - populateClaim( - key, - claims[key], - 'Version of the token issued by the Microsoft identity platform', - index, - claimsObj - ); - index++; - break; - case 'auth_time': - populateClaim( - key, - claims[key], - 'The time at which a user last entered credentials, represented in epoch time. There is no discrimination between that authentication being a fresh sign-in, a single sign-on (SSO) session, or another sign-in type.', - index, - claimsObj - ); - index++; - break; - case 'at_hash': - populateClaim( - key, - claims[key], - 'An access token hash included in an ID token only when the token is issued together with an OAuth 2.0 access token. An access token hash can be used to validate the authenticity of an access token', - index, - claimsObj - ); - index++; - break; - case 'uti': - case 'rh': - index++; - break; - default: - populateClaim(key, claims[key], '', index, claimsObj); - index++; - } - }); - - return claimsObj; -}; - -/** - * Populates claim, description, and value into an claimsObject - * @param {string} claim - * @param {string} value - * @param {string} description - * @param {number} index - * @param {Object} claimsObject - */ -const populateClaim = (claim, value, description, index, claimsObject) => { - let claimsArray = []; - claimsArray[0] = claim; - claimsArray[1] = value; - claimsArray[2] = description; - claimsObject[index] = claimsArray; -}; - -/** - * Transforms Unix timestamp to date and returns a string value of that date - * @param {string} date Unix timestamp - * @returns - */ -const changeDateFormat = (date) => { - let dateObj = new Date(date * 1000); - return `${date} - [${dateObj.toString()}]`; -}; diff --git a/3-Authorization-II/2-call-api-b2c/SPA/public/favicon.svg b/3-Authorization-II/2-call-api-b2c/SPA/public/favicon.svg deleted file mode 100644 index 1284553..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/public/favicon.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - Icon-identity-221 - - - - - - - - diff --git a/3-Authorization-II/2-call-api-b2c/SPA/public/fetch.js b/3-Authorization-II/2-call-api-b2c/SPA/public/fetch.js deleted file mode 100644 index f7bdfb6..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/public/fetch.js +++ /dev/null @@ -1,116 +0,0 @@ -/** - * Execute a fetch request with the given options - * @param {string} method: GET, POST, PUT, DELETE - * @param {String} endpoint: The endpoint to call - * @param {Object} data: The data to send to the endpoint, if any - * @returns response - */ -function callApi(method, endpoint, token, data = null) { - const headers = new Headers(); - const bearer = `Bearer ${token}`; - - headers.append('Authorization', bearer); - - if (data) { - headers.append('Content-Type', 'application/json'); - } - - const options = { - method: method, - headers: headers, - body: data ? JSON.stringify(data) : null, - }; - - return fetch(endpoint, options) - .then((response) => { - const contentType = response.headers.get("content-type"); - - if (contentType && contentType.indexOf("application/json") !== -1) { - return response.json(); - } else { - return response; - } - }); -} - - -/** - * Handles todolist actions - * @param {Object} task - * @param {string} method - * @param {string} endpoint - */ -async function handleToDoListActions(task, method, endpoint) { - let listData; - - try { - const accessToken = await getToken(); - const data = await callApi(method, endpoint, accessToken, task); - - switch (method) { - case 'POST': - listData = JSON.parse(localStorage.getItem('todolist')); - listData = [data, ...listData]; - localStorage.setItem('todolist', JSON.stringify(listData)); - AddTaskToToDoList(data); - break; - case 'DELETE': - listData = JSON.parse(localStorage.getItem('todolist')); - const index = listData.findIndex((todoItem) => todoItem.id === task.id); - localStorage.setItem('todolist', JSON.stringify([...listData.splice(index, 1)])); - showToDoListItems(listData); - break; - default: - console.log('Unrecognized method.') - break; - } - } catch (error) { - console.error(error); - } -} - -/** - * Handles todolist action GET action. - */ -async function getToDos() { - try { - const accessToken = await getToken(); - - const data = await callApi( - 'GET', - protectedResources.todolistApi.endpoint, - accessToken - ); - - if (data) { - localStorage.setItem('todolist', JSON.stringify(data)); - showToDoListItems(data); - } - } catch (error) { - console.error(error); - } -} - -/** - * Retrieves an access token. - */ -async function getToken() { - let tokenResponse; - - if (typeof getTokenPopup === 'function') { - tokenResponse = await getTokenPopup({ - scopes: [...protectedResources.todolistApi.scopes.read], - redirectUri: '/redirect' - }); - } else { - tokenResponse = await getTokenRedirect({ - scopes: [...protectedResources.todolistApi.scopes.read], - }); - } - - if (!tokenResponse) { - return null; - } - - return tokenResponse.accessToken; -} diff --git a/3-Authorization-II/2-call-api-b2c/SPA/public/index.html b/3-Authorization-II/2-call-api-b2c/SPA/public/index.html deleted file mode 100644 index d3583b6..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/public/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - Azure AD B2C - - - - - - - - - - -
-
Vanilla JavaScript single-page application secured with MSAL.js -
-
-
-
- - - - - - - - - - -
Claim TypeValueDescription
-
-
-
-
- - -
-
-
-
-
-
    -
-
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/3-Authorization-II/2-call-api-b2c/SPA/public/redirect.html b/3-Authorization-II/2-call-api-b2c/SPA/public/redirect.html deleted file mode 100644 index dcc8b0e..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/public/redirect.html +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/3-Authorization-II/2-call-api-b2c/SPA/public/styles.css b/3-Authorization-II/2-call-api-b2c/SPA/public/styles.css deleted file mode 100644 index 66205df..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/public/styles.css +++ /dev/null @@ -1,21 +0,0 @@ -.navbarStyle { - padding: .5rem 1rem !important; -} - -.table-responsive-ms { - max-height: 39rem !important; - padding-left: 10%; - padding-right: 10%; -} - -form, .group-div { - display: flex; - align-items: center; - justify-content: center; -} - -.input-group, ul { - width: 50% !important; -} - - diff --git a/3-Authorization-II/2-call-api-b2c/SPA/public/ui.js b/3-Authorization-II/2-call-api-b2c/SPA/public/ui.js deleted file mode 100644 index 63bd78f..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/public/ui.js +++ /dev/null @@ -1,71 +0,0 @@ -// Select DOM elements to work with -const signInButton = document.getElementById('signIn'); -const signOutButton = document.getElementById('signOut'); -const titleDiv = document.getElementById('title-div'); -const welcomeDiv = document.getElementById('welcome-div'); -const tableDiv = document.getElementById('table-div'); -const tableBody = document.getElementById('table-body-div'); -const toDoListLink = document.getElementById('toDoListLink'); -const toDoForm = document.getElementById('form'); -const textInput = document.getElementById('textInput'); -const toDoListDiv = document.getElementById('groupDiv'); -const todoListItems = document.getElementById('toDoListItems'); -const editProfileButton = document.getElementById('editProfileButton'); - -toDoForm.addEventListener('submit', (e) => { - e.preventDefault(); - let task = { description: textInput.value }; - handleToDoListActions(task, 'POST', protectedResources.todolistApi.endpoint); - toDoForm.reset(); -}); - -function welcomeUser(username) { - signInButton.classList.add('d-none'); - signOutButton.classList.remove('d-none'); - toDoListLink.classList.remove('d-none'); - editProfileButton.classList.remove('d-none'); - titleDiv.classList.add('d-none'); - welcomeDiv.classList.remove('d-none'); - welcomeDiv.innerHTML = `Welcome ${username}!`; -} - -function updateTable(account) { - tableDiv.classList.remove('d-none'); - const tokenClaims = createClaimsTable(account.idTokenClaims); - - Object.keys(tokenClaims).forEach((key) => { - let row = tableBody.insertRow(0); - let cell1 = row.insertCell(0); - let cell2 = row.insertCell(1); - let cell3 = row.insertCell(2); - cell1.innerHTML = tokenClaims[key][0]; - cell2.innerHTML = tokenClaims[key][1]; - cell3.innerHTML = tokenClaims[key][2]; - }); -} - -function showToDoListItems(response) { - todoListItems.replaceChildren(); - tableDiv.classList.add('d-none'); - toDoForm.classList.remove('d-none'); - toDoListDiv.classList.remove('d-none'); - if (!!response.length) { - response.forEach((task) => { - AddTaskToToDoList(task); - }); - } -} - -function AddTaskToToDoList(task) { - let li = document.createElement('li'); - let button = document.createElement('button'); - button.innerHTML = 'Delete'; - button.classList.add('btn', 'btn-danger'); - button.addEventListener('click', () => { - handleToDoListActions(task, 'DELETE', protectedResources.todolistApi.endpoint + `/${task.id}`); - }); - li.classList.add('list-group-item', 'd-flex', 'justify-content-between', 'align-items-center'); - li.innerHTML = task.description; - li.appendChild(button); - todoListItems.appendChild(li); -} diff --git a/3-Authorization-II/2-call-api-b2c/SPA/sample.test.js b/3-Authorization-II/2-call-api-b2c/SPA/sample.test.js deleted file mode 100644 index 9335303..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/sample.test.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @jest-environment jsdom - */ - -const request = require('supertest'); -const path = require('path'); -const fs = require('fs'); - -const app = require('./server.js'); - -jest.dontMock('fs'); - -const html = fs.readFileSync(path.resolve(__dirname, './public/index.html'), 'utf8'); - -describe('Sanitize index page', () => { - beforeAll(async() => { - global.document.documentElement.innerHTML = html.toString(); - }); - - it('should have valid cdn link', () => { - expect(document.getElementById("load-msal").getAttribute("src")).toContain("https://alcdn.msauth.net/browser"); - }); -}); - -describe('Sanitize configuration object', () => { - beforeAll(() => { - global.msalConfig = require('./public/authConfig.js').msalConfig; - }); - - it('should define the config object', () => { - expect(msalConfig).toBeDefined(); - }); - - it('should contain credentials', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(msalConfig.auth.clientId)).toBe(true); - }); - - it('should contain authority URI', () => { - const regexUri = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)?/gi; - expect(regexUri.test(msalConfig.auth.authority)).toBe(true); - }); -}); - -describe('Ensure pages served', () => { - - beforeAll(() => { - process.env.NODE_ENV = 'test'; - }); - - it('should get index page', async () => { - const res = await request(app) - .get('/'); - - const data = await fs.promises.readFile(path.join(__dirname, './public/index.html'), 'utf8'); - expect(res.statusCode).toEqual(200); - expect(res.text).toEqual(data); - }); -}); \ No newline at end of file diff --git a/3-Authorization-II/2-call-api-b2c/SPA/server.js b/3-Authorization-II/2-call-api-b2c/SPA/server.js deleted file mode 100644 index 0ce76d1..0000000 --- a/3-Authorization-II/2-call-api-b2c/SPA/server.js +++ /dev/null @@ -1,30 +0,0 @@ -const express = require('express'); -const morgan = require('morgan'); -const path = require('path'); - -const DEFAULT_PORT = process.env.PORT || 6420; - -// initialize express. -const app = express(); - -// Configure morgan module to log all requests. -app.use(morgan('dev')); - -// Setup app folders. -app.use(express.static('public')); - -// set up a route for redirect.html -app.get('/redirect', (req, res) => { - res.sendFile(path.join(__dirname + '/public/redirect.html')); -}); - -// Set up a route for index.html -app.get('/', (req, res) => { - res.sendFile(path.join(__dirname + '/index.html')); -}); - -app.listen(DEFAULT_PORT, () => { - console.log(`Sample app listening on port ${DEFAULT_PORT}!`); -}); - -module.exports = app; diff --git a/4-Deployment/README.md b/4-Deployment/README.md deleted file mode 100644 index 9171209..0000000 --- a/4-Deployment/README.md +++ /dev/null @@ -1,188 +0,0 @@ -# Deploy your JavaScript Applications to Azure Cloud and use Azure Services to manage your operations - - 1. [Overview](#overview) - 1. [Scenario](#scenario) - 1. [Prerequisites](#prerequisites) - 1. [Setup](#setup) - 1. [Registration](#registration) - 1. [Deployment](#deployment) - 1. [Explore the sample](#explore-the-sample) - 1. [More information](#more-information) - 1. [Community Help and Support](#community-help-and-support) - 1. [Contributing](#contributing) - 1. [Code of Conduct](#code-of-conduct) - -## Overview - -This sample demonstrates how to deploy a JavaScript single-page application (SPA) coupled with a Node.js web API to **Azure Cloud** using [Azure Storage](https://docs.microsoft.com/azure/storage/blobs/) and [Azure App Service](https://docs.microsoft.com/azure/app-service/), respectively. To do so, we will use the [same code sample from Chapter 3](../3-Authorization-II/1-call-api). - -## Scenario - -1. The client application uses the **MSAL.js** library to sign-in a user and obtain a JWT **Access Token** from **Microsoft Entra ID**. -1. The **Access Token** is used as a **bearer** token to *authorize* the user to call the protected web API. -1. The protected web API responds with the claims in the **Access Token**. - -![Overview](./ReadmeFiles/topology_dep.png) - -## Prerequisites - -- [Node.js](https://nodejs.org/en/download/) must be installed to run this sample. -- A modern web browser. This sample uses **ES6** conventions and will not run on **Internet Explorer**. -- [Visual Studio Code](https://code.visualstudio.com/download) is recommended for running and editing this sample. -- [VS Code Azure Tools Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) extension is recommended for interacting with **Azure** through VS Code interface. -- An **Microsoft Entra ID** tenant. For more information, see: [How to get a Microsoft Entra tenant](https://azure.microsoft.com/documentation/articles/active-directory-howto-tenant/) -- A user account in your **Microsoft Entra ID** tenant. -- An **Azure subscription**. This sample uses **Azure Storage** and **Azure App Service**. - -## Setup - -- Setup the service app: - -```console - cd ms-identity-javascript-tutorial - cd 3-Authorization-II/1-call-api - cd API - npm install -``` - -- Setup the client app: - -```console - cd .. - cd SPA - npm install -``` - -## Registration - -### Register the service app (Node.js web API) - -Use the same app registration credentials that you've obtained during [**chapter 3-1**](../3-Authorization-II/1-call-api). - -### Register the client app (JavaScript SPA) - -Use the same app registration credentials that you've obtained during [**chapter 3-1**](../3-Authorization-II/1-call-api). - -## Deployment - -There are basically **3** stages that you will have to go through in order to deploy your projects and enable authentication: - -1. Upload your project files to **Azure** services and obtain published website URIs -1. Update **Microsoft Entra ID** **App Registration** with URIs you have just obtained -1. Update your configuration files with URIs you have just obtained - -### Deploy the service app (Node.js web API) - -There are various ways to deploy your applications to **Azure App Service**. Here we provide steps for deployment via **VS Code Azure Tools Extension**. For more alternatives, visit: [Static website hosting in Azure Storage](https://docs.microsoft.com/azure/storage/blobs/storage-blob-static-website#uploading-content). - -> We recommend watching the [video tutorial](https://docs.microsoft.com/azure/developer/javascript/tutorial-vscode-azure-app-service-node-01) offered by Microsoft Docs for preparation. - -#### Step 1: Deploy your app - -1. In the **VS Code** activity bar, select the **Azure** logo to show the **AZURE APP SERVICE** explorer. Select **Sign in to Azure...** and follow the instructions. Once signed in, the explorer should show the name of your **Azure** subscription(s). - -![api_step1](./ReadmeFiles/api_step1.png) - -2. On the **App Service** explorer section you will see an upward-facing arrow icon. Click on it publish your local files in the `API` folder to **Azure App Services**. - -![api_step2](./ReadmeFiles/api_step2.png) - -3. Choose a creation option based on the operating system to which you want to deploy. in this sample, we choose **Linux**. -4. Select a Node.js version when prompted. An **LTS** version is recommended. -5. Type a globally unique name for your web app and press Enter. The name must be unique across all of **Azure**. -6. After you respond to all the prompts, **VS Code** shows the **Azure** resources that are being created for your app in its notification popup. -7. Select **Yes** when prompted to update your configuration to run npm install on the target Linux server. - -![api_step3](./ReadmeFiles/api_step3.png) - -#### Step 2: Disable default authentication - -Now you need to navigate to the **Azure App Service** Portal, and locate your project there. Once you do, click on the **Authentication/Authorization** blade. There, make sure that the **App Services Authentication** is switched off (and nothing else is checked), as we are using **our own** authentication logic. - -![disable_easy_auth](./ReadmeFiles/disable_easy_auth.png) - -#### Step 3: Enable cross-origin resource sharing (CORS) - -![enable_cors](./ReadmeFiles/enable_cors.png) - -### Deploy the client app (JavaScript SPA) - -There are various ways to deploy your applications to **Azure Storage**. Here we provide steps for deployment via **VS Code Azure Tools Extension**. For more alternatives, visit: [Static website hosting in Azure Storage](https://docs.microsoft.com/azure/storage/blobs/storage-blob-static-website#uploading-content). - -> We recommend watching the [video tutorial](https://docs.microsoft.com/azure/developer/javascript/tutorial-vscode-static-website-node-01) offered by Microsoft Docs for preparation. - -#### Step 1: Deploy the app - -Create a distributable files folder, where your `html`, `css` and `javascript` files will be located (in the sample, the `SPA/App/` folder is already usable for this). Then follow the steps below: - -1. Right click on the `SPA/App/` folder inside. This will open a context menu where you will see the option **Deploy to static website via Azure Storage**. Click on it. - -![spa_step1](./ReadmeFiles/spa_step1.png) - -2. Follow the dialog window that opens on the top. Select your subscription, then give a name to your storage account. - -![spa_step2](./ReadmeFiles/spa_step2.png) - -3. Once your storage account is created and your files are uploaded, you will see a notification on the bottom-right corner of VS Code interface. When it's done, you will be notified with the published URI of your static website (e.g. `https://javascriptspa1.z22.web.core.windows.net/`). - -![spa_step3](./ReadmeFiles/spa_step3.png) - -#### Step 2: Update the client app's authentication parameters - -1. Navigate back to to the [Microsoft Entra admin center](https://entra.microsoft.com). -1. In the left-hand navigation pane, select the **Microsoft Entra ID** service, and then select **App registrations**. -1. In the resulting screen, select the name of your application. -1. From the *Branding* menu, update the **Home page URL**, to the address of your service, for example [https://javascriptspa1.z22.web.core.windows.net/](https://javascriptspa1.z22.web.core.windows.net/). Save the configuration. -1. Add the same URI in the list of values of the *Authentication -> Redirect URIs* menu. If you have multiple redirect URIs, make sure that there a new entry using the App service's URI for each redirect URI. - -#### Step 3: Update the client app's configuration files - -Now you need to update your authentication configuration files in the client project. To do so, go to your **Azure Storage Account** explorer via **VS Code** Azure panel. There, click on your project's name > Blob Container > Web as shown below: - -![spa_step4](./ReadmeFiles/spa_step4.png) - -Open `authConfig.js`. Then: - -1. Find the key `msalConfig.auth.redirectUri` and replace the existing value with your static webpage's URI that you have just registered e.g. `https://javascriptspa1.z22.web.core.windows.net/` -1. Find the key `apiConfig.uri` and replace the existing value with your published web API's endpoint, e.g. `https://node-webapi-1.azurewebsites.net/api` - -## Explore the sample - -1. Open your browser and navigate to your deployed client app's URI, for instance: `https://javascriptspa1.z22.web.core.windows.net/`. -1. Click the **sign-in** button on the top right corner. -1. Once you authenticate, click the **Call API** button at the center. - -![Screenshot](./ReadmeFiles/screenshot.png) - -## We'd love your feedback! - -Were we successful in addressing your learning objective? Consider taking a moment to [share your experience with us](https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR73pcsbpbxNJuZCMKN0lURpUNDVHTkg2VVhWMTNYUTZEM05YS1hSN01EOSQlQCN0PWcu). - -## More information - -- [Azure Blob Storage](https://docs.microsoft.com/azure/storage/blobs/) -- [Azure App Services](https://docs.microsoft.com/azure/app-service/) - -For more information about how OAuth 2.0 protocols work in this scenario and other scenarios, see [Authentication Scenarios for Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/develop/authentication-flows-app-scenarios). - -## Community Help and Support - -Use [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) to get support from the community. -Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. -Make sure that your questions or comments are tagged with [`azure-ad` `azure-ad-b2c` `ms-identity` `msal`]. - -If you find a bug in the sample, please raise the issue on [GitHub Issues](../../issues). - -To provide a recommendation, visit the following [User Voice page](https://feedback.azure.com/forums/169401-azure-active-directory). - -## Contributing - -If you'd like to contribute to this sample, see [CONTRIBUTING.MD](../../CONTRIBUTING.md). - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - -## Code of Conduct - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/4-Deployment/ReadmeFiles/api_step1.png b/4-Deployment/ReadmeFiles/api_step1.png deleted file mode 100644 index df5203bb91aa3b52222001486f4b52b6f57ffe4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11098 zcmcI~bx>SE_vOP01Sb%JB|vabaCbs*8Qg-qLvV*+AwX~s!5LhG1qcv)aCdii2KMEv z-P*1F?SH#V)f6>7^WMC^x9>UUp6&=`MHwuNR~P^QV11C4R0RM8UGOD@jtGu00uVU( z55YxMMjR*~CffzyAX|tjhyg%VEarnT3i$q+qpY?I0AP3gdm%K&*&Kq`9en;g`>b%NzCa(>L0bWWr;fVf2&k1YT{6#48)Ve5B@H~t&c8$XI{ z-t9s5cO;n(!>OrcG=)mpTL4gdBdJyO2}NOccJ`UZ*2*LNo{P&v8v&4~5)x97M|KI8 z1lT#`kTJQR0l%GOkpbK{cz|e#Bmm&yBLI^B+dxiiWnJQjeC}6ROs~*Jm=Q0^b}1h_ z3+8xl_UO4M$?5TWVkte={(ML*Q8ZC!Utus0XcMKXs;sR1E|=fz-kP24VSjxjba_dL z5o24wbVB$}6tmgGpZURf(|%L%peo|&nx?hd+2flm&D2zV`)$nf#qM~4yk~^9xP-)# zkIP~JLU~eBQYRV~(eL!Z$J(O6l_36TkCqb)RawltVjX2N`ZzSC z^|4{Lx?^UQ#DV!zqF9up>A7Y!jeGV6vSEa9gpqHo6VA_bskT0LiaIiN7;u?Z83wnI%`eu zs%~%X>UtSreD6F8IpjCk^yodUo;wrs;~~4@&rxE+YU=7f%6XY=$Uf;d*i#BWylpMl zyS+hvc5oe2Ar*s`J6Kv8iR6SI?Q-!72&j>5)Q4|9UW_YEbmvMVbG;4OROqqE z$Y^#m6wXq53tdl7X4d}!ukn$2gfbcWe=bUZ75DikC;7nHdXK{Ybl+mSxyoVK?9gNL zmR1^7r0FVls0nJLlw6tnR3IvBXWP-#z;%ev6$rzpMF)I+t%?POX-GX zjgg^=Bg2>!)P^M7Da*=!n)HOIk`WRox4^FimVFX*_4ItM4*0Ce)ioA#6IeN&Tk`X- zB!1%x`H|SxY&|xDddilOZ4>NhL&xiFs&0K3XKv&}iUFljh-RSbp+LYG~lOWUh_c zFYP4=yxNVR%gSMmNk~xh@ewTL3jFQ#$c55tpWWZQL&|T!gI~6BS{3|)@@SeGhj(~b zgxmC_`*>ES{P-eMV0rtgEUSp6bW-kcSs|kUxp{2crLRg{Q8=QGDQ(76F`a@2T5KdW zRv#u%vwe4zVmP<{@fS7}&?t+K#W9`i zWXP=M*Sg&N`u-577HZ{uKX`95{gYTgK|8a>JqwCRY9NEwQhEGEu@Xpr7v2$nXpcm>~;wt*5I`H^imKt|uT3Q^m^swj`c{31r zLBqnrT3TG*bC~sioSNe9yhMx%YhT-0e<#T4Ot#t0*8cEm$3+g6PJCVf(>9F6DT8zB z`qNVJmeO)i3x0Fldh5<0HpQ9%oMp;?>GrW8^fBXZFv~V{a>k88U|C6<{Kwr{mk`S_ zRZ+XrvcHw7o)6&f%yZr9QJzLKNQ9!Aw)1}GIE%5&vTdQTA)<8luAybm`|@09uGX&Y zYh}W+A$h~~agMwey=lXQ$9YT|-V~;(UiCwKe|3n2q+)S4sUZ&_bV2d$P@O zUT|91?d?}6jan(uJstZ$3E<$c>FTCtX4)RiR5`Sq^0S=GTHH@s2eZ+UJ_sVZ5ftg? zkRsdJ%)OwXpa98j5e;&Lk)@0{Zqrr+lgJDO8GS5f*{rg*_Tmyg)Z*#X6;{_)mlzl4 zxivU@=XKg2B>W%ZHupQsd9lZ<*Yf%CuwglOOVr8fSsn4tH|J^w1-8b&{*vO!M z7~frD6Trs^MZ-DrznrWZN>`gIhZD4#TO2d7wHK&PlH#EuM*y(q(bQ#Fj%x8u$8Iu^Ht_%IAa|Cmd0hZUGz%gxW4P!dWwJqu8wVoJVfL7_b z0h$6K`x{YV@Hsa{ojOKx@|V zJNj_Gtx<=)1!Zc_ z8Ve;2jTcO$<=glj1O1=QaqpLBPV#26%QeW`H4W9Ll?yl@J4V`uWUTRwO!!7Syvl?` zD8_Gpg-uS|RFpV1-n}-#?=bbE$D_x7JlbXd+rJiBV!V!(zZPgrJ$PXuR-Z(=VAl0B ziDxqAX?sp6M0|Pt_=ro{B2Wj75KUx3bEMUo*vSZ&U(Xe`0~ode zTU;Xw4W9OI^`Oi&?iv-#laN9ChD}W_55e@66_GZjg^Pb>1xh*Znmc>wTaQaZ;A-1!h^=>G-)w?O-sx$&Y{5kcF5O;Yipl|XfNMJ zMVzQXAoqXsC>3ZN7m9TrPq9|Ni5rf^9&!1suD_q@U-L+|(OIy34mYtzY@j=>V99Qb zoc~U4&}ygROhJcf&?s!&=}7#wwAEF-L*axzQa`=#X~KE?L84^E>hX$9^K!BLC$x#h zuQkCv(BadxnR^wD9ldoUyLRbJ(v7B+=wRAr0=$ky#cfw|PIvc~#ovx_#AG#zP^9~A zET>^Z>O<*R|Lw0v1#Pyf7jbv-2e&etly4n(BQ7YuT-g=8edJQQpZdO>crUm=!cb2~ zODtWkM|od{*6u)VS1u&18a2|I$v6?imRz-LkK`-*^lMtwNwfl*Eug%SSQ50x!}9#v z@_L<{)5@t)y~@|=;Glb64j$C)@^w87?RLA6X3!u*hu+uSTpTF1Q=hRx5kQFtLV%!~N8KPR}Q(O;b3ei=Iq%=i?o`y@->C zkKwJ-i;QpacO3e@x&TI z<|$f}GjQe72bR35_4*hFTpEtq)*i(3W?IYxIXZ&-F1Za|q%XFd&FOG=msVI5>Z>H$y9rzvRBvuIE}Y5P%)W+L;*+o>CvG0E zPZupDYcgV{Of5uz3uTMFWLmz~l#5ap@__hv@- zz87QL(Y;~rI*}r4nbk!fQ zJe!F6^7v7DFCAKL@jsuHw{XKBZAmgbsZiSBQ6W3^1H*)~qC$il(|nDuH(q)d(}?`M zrYU8cxu*M6y;kyq&!HLI9^!h@{BanMv_?dWr0jvp)7u{EFD|D8(UHqgx^4RoWf86s z`V${b`UdqqJ=S|=#{cgcVvo3@s`n!DR+bC%DdRItEKc4&!6KfS`Tp_Ryb|a;{$JW=bO;BpOlNfuJzx@uAHi?z6~~eH53h};4~CnHk&m1 zo-f^@FmbrjQRYk<#@-?gL3!jXq(IJeN~5oxy8wN!*JlJgY}>zX2haMDC3(+^ z4n9|7RokNWbRol)UQ!HP}7Uw$%w_v_OS?x2Is7)r^~tJX(IRBpKJv7 zB;45S;-!+GUVcfugf7p4%lNH&yDN>mKJE6xu553h6Da{zEla|jjm5R?%&0Z*Hdirb z(|bR`9doDjYO3$Io5CHnN)x8ABehC8-DX(%u1}O;Y)C;|1`!AO_ykEhY6!3V z?4V~;Ac)7T57VMzXkzM5YXZwQS}wN!`RJKgz6BJir!jGyRPc8!8TsJ|j=Fw1Zza>M zWwE=Je%!vAiMrMO&u1KZS3erk+UN?%SNVN-MK)ZaRBkF~eeTw^$CCF)J0~YLPiW9g z_nb_Gf_c&t{x9wt551ON)UaZE8|s#mPE10y34t3h3vTNHmhaPCwukfc^B3Fw{m(Y~ zmX?-m!%|al5Aqm=M)|Rk^`o^9*00FI7gli^)iZEjJD^V9@xQpz62{(H z*!TIl{#vQ{lM?=r0+S2LyVCL1jP%)iEXI!?HqxI{U{2HBX>7M7;@;13`yFCh9ePDW z1>Z9oDMze{TDkj0=#I+{d-^L7>QH@XDSKkY{K(>EfWZq_O+ne}!y4+g$W9HO^a z}8Qt<%vLz4h>%KjUB%ovDW?N zdA_yU6>jxuFoi=rrpc0P#tIV*LPi68q>m3}GNYPaLB*cMjw`x`f|}fdwnAY9%$}97 ziVjnagTR+OUzjsDt*ZODgYOStIh#4UhWG`-`YRuu`4gB zc;EiioX3lsA>wb4s~r83qjRi!Q#L#{V|b>7#f`(9V;Qzs{f^qi!~NXB*eZ7*?koHU zq^*X<%|lu`$v#~_eAq3dAeJvt&YQcsPNwh~)3!&z)Y9clf802tPV@$ItUZP3D4YE% z@_mb){szL~_xKnV8RI?tmZU?#EqN}Q^bn8Wz)=6QdUI!xtyG=ABl8pA@j6v$tM*R; zQT_Q>UUYSn`9mx`X2xcA>DOcN|Ks5w9v=Gp`;Qiyy86k%x`i8hxp{aHN1Csi?s7Hc zSh0keI+QMQL>U^?Fsql$BxgLht9FilwEdv3AMHw3X{$YWk}l%`=kn~bnV+LXt$N3J zIMxr}j70VjVgieuv=F5knq1;)(HJVq4#EFCT^>Mw&EZ3HGd?}?HL6~)_zyIOk zN3~A-P0kjoU0sO*quUhg^pR{Yl|PR~dC7*YpGuR<4RSWNV$;`6o9Q-M=c3`c=9wSN zv>B9r+S_DXGS1j(4C@d0L^5;RcFXw*Xq){yBRSo03uQ!SNtZv7Y{c^1D zilbR7>UVskqzCj_Ur<=u-<+?e8&X}Sf)l(gVN5{Hash8 zuFk^%+9@m#%Kg2)a=j)_)4#Zoqwkd|S^Ccb_E!7GuZ~v-+Pb>)IXSFZ=LvH8c`~u( zP-v?koWB$icsGs};rRG)J2o~(Z0IvOIhm+YX8|HK66*7t?5A5wAvS&>U>9uKzg4u| zfrY{-EbRB^3tpKVTHWg(d3o7BXMG^S-`*d$ThswYe!uAO3_h=-cqPixaBy&_6)GkU zY)%+d*4JNMUHKg~Z5#MrPSRz44&o=)7w$#|Vj(;};|w%3rVlr#wORh~eZzM6p+j)6 zu85e9nwrbT-#AQS*2-!>#|nhsf5yhgDY)^ZV_tE&Y{`d;pKc}_VsHhcVmW(wcsM#% zR#oMG^7Q003&c}EqCpIZ5IR_tQBoS&9WNYzrlbHs^5Lp##>T4+%YGlVC5E#_VzUrM z9gKab8h`z2JL_lSv0s>J_ZJ!V3;@YM@>`!NXae9+2>u-&hLld05dmI&V80H|pO!Yv z0PO!i=Ki)u$hm&Ui${asH<rPdaTgZ%tl|r;o+hG!)Y(LnSg?f4APVYRb1sP022Ve zF(P!WXJ>afoGI{h8tZ>B-*7xrWdg3ptJ72C8iX7VPENcqY;qk{)gPmlAyf+E``_M3 zgirw&s?xMUa{10qPR1x-UEJLAHA@I15p`B}3$y)JLy0$>n=&)WOHqJ#=B88+X9H{# zGU(5rfA2HR%F4>k%~fZpB}DG%==hk#91$5A`Q=NBu%K;o;$!E(oBhlZx)< z<_6li%gr8a3Tp2`zil0iO(!#_^#px{WISlHYik#)Gh$+3fCbRf+B$0suxo--SvlJr zxX@8iQ86@Rn?MJRtDU;0KGBkr5?fnaEd*e2QsS++49F}J6|o|Zjmkf-g4)}k4(A&} zselwH#fK2k-Qa)9`|-nkFy(YDij7sf`p?qRBe+*)%MGNIQhY$(lQcCq&*F12pD0oR zGxnT|aeh|CJb-3(jBU+t3#Nu0i!Lj1P=}lHk@xU*;;VR zx%?h({`~p#<;xdR9($kbMGxCI0K50%H+0Z7j3Q!56ZYko5>1&p9}!Wyv>3^PZzL$` z2>nF|w&b1fE_PoqK`P@{r=Yqr6%F=_{BC;_p_s%I)^*BHC*_Ud{K*t1D8P>A?ygl& z172BK8HM)&N1COj#-b<|7h8Czf{6MQ024}btUH9ai?zZj>M zj?Uq|Ij9*)3)ctlyl0%PyvO%h{Mqk66noF!0z2N{(1F+DR6qcF1OQOcAOc_hzYP3h z!2?5E6%rDnQ3`?TH92<#q5PB3sK5oqVgfqolcsZ+Nc;M>is#ZZGFF2j7VtP4R}vXA zM-pWl#fo^HJRl(<;o|Jf`R-jTrHJ3f&S-6I?RcS*QkJ0S$w~*fCU&r%DW8fH$e)?6rFTN-iWa5j_rHaM+fdb55{*ytnBQ(BqI~_ zfAmR}mzKgn_wcwb)vUm9aZ`CagkK;eBved!3dT=I%XK~x6WDP_&CcfH;+hc1;YJKa z%nyb_Su!_3m^G?#Q_c?#MpF3f?LCtEuCS%W2i&fUiHYgd1K1_-t(Pjas)72yKe)sD)foN)x?Q5<~rsss?#wyf<0l>~diinm+=5$yRELPXi(;Mt32aA>;Y(V3v zWwf+KKpUIjoiH9)o*G&D58wP70i zb+w-=AcDll%*i1EWcJ8N*AmRj5HG9|ktZK1DJgyZMUVo(iOxR%O3=0_nu)$@0j7z5 z0z@7TW;|A&+tqN&SFc|A`1*!=MFua!k38BR?`+J?x9GBc#K|N1T(;i(Uv~@)>~9UF zcXxMpjwB@~V_pJA_R%e0LI2`(tve^@b%Z2ULLZ2JDiDaYwz8q2Km5)uEr(m&)|PoF z-}T$T=C4e2Fc3Y4+7DOr4#h7{Ky+eE?Dy5NuG2|*8`9b2vi<&*f~93qXebH`^B^L~ z13pxGzg&xd{Gj6G9P8-`yF-Mw)rjf`cXo>Z$DR1*|8&0$!X{WcDIDtr#-PGDIy#z= zPvNqGl%f%#Oc>^9gGUpDg@wPr0!e=`B`#uRe_z05YtUx8d~;*tv!~}!wus?%8&WO` zJ^_Il=j?X2zhW_m$C2LRHZky9kmOu}&cWe0B_(Bly28T3qEwyHnxW-l>?4S`>Moai z8sGs1Yr^L**;l3w{e>J?L=_aUF3IUR?U&o&eRSEdGg}t@j&pDkns4xAW_j%uZ}H}= z#gOv2A1`HQWf|z`?CtExZa;xZ#-H_*62(*|I#_H@4x*-_5^qKX*wuP!@tB#J zi{8K2n=j&(<0cwN*w#60TOT_^uL`D`7cLC z{@)DrJS6e>Mo)f1AqPQ#goFe%Xv{Xht~RtFq@={PZ$dvR37#T%ccfmaYiM-$_SS3y zzXva5|4Fnl8+&h7!#0rFn3++5E!63MyFZRp$f&4c4QSa9fNy|t1iSme49Ndsb#$z( z!=s~dENDP$LPvz-)?li~-1^4G1$fi}yk(9@r`vx&ATvQ7k)uq1wAkEGE@W(MJaKF^ zfDn+n8z)&*UOxQyFHAUYVh)53XBU@QXTZqZt7KX<_qAaBL_dzm!|x;jI1k4;1mRkN-!xXF9XkoBuHxWHi#d5d0y2pBqOpF$AW4G!IGy`N5TK zyo}7u?V zzh4N2)mui@>I0u^bsF#lnH$@Ab#HV|8NO*2-dbc9XhECCUJo9acQH4`LE@L^PMSo! zqpXLrOGyVvLsKoOffSv6Zp7{mZ=@UE#;F`_r$S?2h4sE)S&>NMHU*dC5KG-!sX11= z%qs+d;>GDhp0q$6wjK+ONXh$(CHsdDLwgDV^-{V&567mgC}F<9XZ1glDbxw*(BL|a z7#yw4T^Ny7Giak;g-jv_SXD_@COfuIXN9NRP>7MCTQ=8%;3Sj_M*zl6BG@~mKe5DZ zOj^m$YFkFtE8dHGi{E#Z0KY@DsE~EfEmlPK=LBCEId=-9-y;FEJ@_3Xk^U?YkvmD; zE3p|$FhNP^ohGu2Zh0zstfEXDEM71_a=%#=B=;p>;?i1q~(!gdTs_H zL8ZQsCFG5YLm{7=11UB1+Rc9>5eD`v;X|ka20uvW&_N9(;C=x1J97DFAlv(1%~~uj zE*ATZ{*VHDK-?sR00S|3^4(n+I7~6p(yQH@cU~udgWxX6f+x}W}jPU<5z$e z3I|^FXCjbGpVgRy)UUy)VQx-aM_8m<^agZe&;G_y|C0<^id2>Dmu7Z$3Q#1-N+Vm_ z%^KK7#Kpy_kCfCtUKEN{F@XBC$519k#Q!lzEI4Ghr>6&`(Q!$a-3s>a(Nzvkl7 zNC6uIklRAp7o*oq{?TDhcz6>I27n_WkNokc52<#3tPiNIXs{60~c?PkpHXnNBt3wsD!wm>hg}p`W4opZOU~*j897uk;9r3Rg zCne>!%^^Z&vW$7ju_p4kE~1rd@{$x`Ma8(iV>5)*-`Gjqj2P>xFw3idOtl4BTSdhQ zhK7n-O`-!rGuXImFea8QWL2PQYst~%(TuF}Gy*BAUS4U&5inM; z;a+_pzPY<|7Y|`c#f{Fre^S>N$XJY4va%Q zchr9$E{;p@xXU63$ozmWV}bD@`WP}lC*T)6^qO*^j^|YfSYHGtB+4beiYL!@^V*NE z8?S!+tP}ySWX3z&za80FPU|>^U``(e|Mx*fLD+=N`&{n$xLDT*(~n>CeE(Icu?Aoy z&WvaMexc+3;X~ux=o;QvQ}+JI1zqyu`7KB`qmn_cI2Rz?S2;p6iht6i*nU@Y=scGlsav<_BiZw30+s>LQ|)d zbaU-SiAJ@7&l_`A)G5zu@c{Yf%Qip&(f@7h;rE9SJUt30>xKKv-qX@F$d%85=V5^l MQi_u0;zmLL4K)lLg#Z8m diff --git a/4-Deployment/ReadmeFiles/api_step2.png b/4-Deployment/ReadmeFiles/api_step2.png deleted file mode 100644 index 557a5b9346541955783a41579e3735daf3a37e22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5683 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 B{Ote$ diff --git a/4-Deployment/ReadmeFiles/api_step3.png b/4-Deployment/ReadmeFiles/api_step3.png deleted file mode 100644 index d72c149ca12ba7d4a2690189cedbb5690168b2b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6989 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 diff --git a/4-Deployment/ReadmeFiles/disable_easy_auth.png b/4-Deployment/ReadmeFiles/disable_easy_auth.png deleted file mode 100644 index 2208c8076fbdf5a6be12f09809dc4a263daffaa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43444 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 S6(SIQsb>lr@^IN#@BR&#%hGlL diff --git a/4-Deployment/ReadmeFiles/enable_cors.png b/4-Deployment/ReadmeFiles/enable_cors.png deleted file mode 100644 index 0a3f555d6d0e8f980656802aa46bff679ad9b532..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60398 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

%VVAMzVL1OhiBB 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 J6%cKu; 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 NE*e`JVb8nY{%;R0o00$k diff --git a/4-Deployment/ReadmeFiles/screenshot.png b/4-Deployment/ReadmeFiles/screenshot.png deleted file mode 100644 index 299813ed01dbaa36347aff8656aa86a46c714f36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28918 zcmd422T)U8+ct^?Pyu-q0RaIYc?6}Z^e!qOBAw8y^b&dqHBk^O2#87%2q2w6=n0)j zSC9^&gbQ%&XTJ0QbIzH6&YsDv>^*z0weD5!``*`e?RSRy+H9A2 zFEKDMu<1N~V$8sB?gs2fVswwa#9 zTd!0%F-w*#-&hY)O zo9F(Njjw%hw9!N)+n~mu>o4`kNG4rJPrL8aFTs{7NVYHNbncejfg;ce6lz2ohu+E@ zzVzi^k3JN+rJyFO7O?3hcVm=MFx)CqGNUw5I^jTZP3Yfk1pSQ*+H8QD4%+dZ5caP8 zr@<8V#%Y4;v=lUYd^8u0-mVz=PcK&kY%&%xxBkyvb-3{HU)J6`e>#Jw z$MyeEv>@6=_+(@76N%`cn&{>E5Hjkm90jObpI159n4N zG#_r%l2c@MjIJCe_H2|$29*=?7zB{3=y0o7pdBR7(#V`0Gy-czuat{@6bCc7`5bHQHQwW~j z7CJRgA$+L<>2MHM;!_(SpvSrd-QH~~?vnR5>1P8Un-}RfbtLSHKP<07TSgWrcj(0L z*D@?{kS9_iKgB^ZHE655gcz=|v!@jmVf3u<$Dc>+vqtJg)qiGC7UR=x2=-$Gm}D*) z5vgd57qnp}oNJFZOv~~;vxA(^cLpaU?QCSgp<>jZ2D;=u71^m_)7if~@ZM`Mi;6+H z=D_S)xd|yhCk0{-wZG9ysrfrPYi>oED_=b*+@eLE%u|(+R!AZDJ(;S_o@`#-Ax$0u zb*kbuYN1f^um|X)@tGdp5sKV;=zStX-T=N&9b+c_M$C)|7Kxez~aNXb*7y57k zg07P4quwww==~^b8RW+CQ2^I?#I6C)Jo%X+0St{{DxyVcW6XW^Ww*wcz@nzPx`&M?@3uf*5j6^|0XyOhP=cPvN<{&#!kWQ# zx4Q97U#I2rQ~*q`4*hBp6FIHc5ry-$^Lh0Sp}p_8<|a2bRZn>Plaa{__*H?0E338R z>=kZ>>`GF^?J{0kd87|UbN<$SNyFoxD-x^7?}JDl>Q{vQel{^&vXX)gYx@3=Fy^A^ zkOwjn+-y>;eu%C@)eVQzdknnJaeslRPoTDaHv+wJS+&66wdJ#AgKn?;{t3i#G_TNO z*Y+0C){WTXUGHf%EO*I_1AbQz+XD^4JNBVnNiBLHY3%H2{zD*nFA?m=`3`Jg)NCuJHN!X?Snqc((U_}*bwU|&&5_f(7jf@nBd4#mU2pV@^4jG z{^PUG)R8C#@G#xq!{6AtU%bg((35+qVk(AmRb9f?lIsU!w%eJG=1-N{c!B^j4m7d5 z3-(qial^++)=(@exAxx@`0VDNQD-TlcP2YDy=;%VNNLqjuVv_ElBa<($mNVL%fEy_ zsjqkDrdQd$mO3hr984stl40Ca6e-kqao0|Xks$0c7>Gst>>f>1xTcTTswsQaY;q*s z5gI^EHK~XU#zOm`Y!`wY#&=g0 zUAG^=Bl+_J%j+5P*pyuNh{wihXuuwWr`76*P(mmPe@Tn#z2nB?%hqxhvm-eJXXkfs z9Xje*)~g7y@w3;gDR( zzU3vJI4KFtDlquUxFBfDr6ZquS&neEFSY9G+%l@<7n6MJv?j(iTY~!+#ba#xgll}P z>Pltg>I+;uGqD2EblhBp>Q7*KT_b)+UzW5>mpwU+A1?=_Nk5B%o@SeVV|*X3HM3ZR z`h}c_Q7LrorS0H8Ivj5k(h}Qw>3Qxz|M-SAvpdv#YMrX&*yb^f=RUtm&;OgG#_1~r z+bu@avG_&LHF3fV&y(1vE$Fw&p(fM8wsohD;BLMx#ySxq6mAG6!PmV+;t<$D)TELK0t=QHnj)SXzhmAmsmsFs zOYW&iIMmyEM~#mbA2t#-&V=>#*sGc77%qcepa;i-&@A+Xr|UO2|E64*IBwcCpC{Bl zfh$9|0Bgsn!D?|qQ!M00Mz`MkyIh@+ZB6>E?vZcZOA^*!bF3njks{~<6}el%YQEWo z9+*g-$jm?g41W+bwDnPw?}2 zaceoh?`JdUtaUE<=NVZ1C_?8|2#q>Ok#8L!)&^FOOuMr0h(- z)j_fYr*iJTq*D48Rch5O*w%cbp8YFUGcK$0r2OhWx8w?cXt0U1SKWgK$za}@&ye=D z-bX!Xp}<8yr>O3gGjgoZU`LD<#wxC&b`K)z0;DRJ@E@3Z?1%!??$!$XK@&V5$Qoqv za^w8%F!H-9ZM8_K`}NGtGJW+QZ~1;pwMqR67%?__P3a=KY&1@gBy@ZHkeOf|hV4#Ukoi=QYk^7`8q!Ps@|Q`;QSfQV)+ zCQYt1kei!qF9vA4yFqk8-kp(Y$A6v1Ma0$fy&yFE^ord6%mQQu<~tEWFM2of8+Adq zietP8crfLS0M}GY`5W9PK2VYgic4MHM?P#jo5DB4*}`~FciOPUs!E`OE^Mqc8D*-m zHE4qa1=_(I$vU%a?|(I?N<6i?3ksja&~tdfrU2~w{hFNRFG`ye{bV2bC*PF?!F{3o zRm3V8n;RFeeP*7pI|{m5I-O0SzlKJOQt9SlJ8N6}C4bdYS|@kjGLG4wWbF;d7~AWL zO>i}o&q|Hi5r6r5;BKC#Oy9qLTff`lJ^?P${OL{f+TjeauBE9@51-qXM*|4*>zXUpdOfUvYdIvq?i0yoH(-(&RezLt5bf&r|X-chT>m~ zgm=NoP3zm5sM+#~H8A~VBraJz`$iNyc=-<+996N~_b~lf&cZn|t39?| zd7fej46QZ!rG#G_ieD&LD>>T|bTUF~@GK|OkV!q4yRPA!&r~zUXe9Pjp;EF@4jrn$ z@AgI|%w5rx>%5fS7a?L)f*Dj*mRmJlQ!mIauucyhfs(bc_`_i?a9%rkliN4R=YmKV zf*-5EpSdG6kLLqI_ISDzuvwAz+fvi>w)TyO+ZJ!!C3J-JqJSWImrL!$qb1*{pG66M z+{?MA-mklUg||syhRaSjoW_lfC53Xp(`5uU{DN-oYs9k^c+d78r5v{R{ zn)vX~7^tv0KLGN1t6rEcys_Wt*yL_aX|CKY_Xj|X$2It?Stx&JzuWVMq2(g-O+MwY z?J=IypIU&uP*Qn_QS&I0()8-fgXLm?m2GE7cg3$C(4Mbt(JLK(oSn8m(*HOTdAZcf zU|k88g zPP=6UiCB~RZYU@y4!-! z@r?AB4xN&MBw<|$=j<1r`Lj>3sV=~h5&UJ{%Q0tsXaCZ*Pi3A_niW$G()n%So)drE z(DASJG{7(~l$Fcx%$ZeZ-~0Ev|UvqW@as3N^~(=(h>iq}9i;c}=b@TUWvmhIK=U zHxPT$$mome4@I@eN3<7Ozue#d^rQdf9o=Yx_bk}{VrjvOg6`)<}T7eIBS{RgW z+cQ&z)^9i3eTBcqR(M4yazA7qRMRiBzjG8?w5j+5Cqs#5KT+`Oo(`yBjKdX-OTNrM z&v{yVQIY{PxK{A^ql?sNRS=edqz@c34Gg zV)kb>f!#lF0mJH5n~VjFS!qJ<`G289L$_;16oUVU_{#q+lJsBj3{LGHP5Sq~_fL=KufM1Po|?5zEAS!@1)Ukuo}D$6PD^bW|hVY`ZW! zcC;@;lx|g@$W*2ruF8p=(etH zZefq^PkQjOaIDl@eXw^C7Z#G%>|B)4Oe%ssBMFWt+%^FyfJ%aI?2Zm-xj89is^qxT z>5ZJ|F$bMEE39=wUqhQ(&snYcUh>Q1P>?>w2;I_Y(X!Ry3RZ_1yewc|W!eY}e0yPk zaANhNV4~6<7B>H*KqxttGvT+mUqq2v`D96Yv@&wz*cvoruz5inC22Yj$TO{VfQi~S zJ78UBVz1dFbA^Y0FJ?!ro(#AmW^&e7N&yJyL<}OWM0OXoLa^&?GFuG)@OfMWz z6aLv%C5$UoAS-6g&w2M!GLyXB8;@D3V8Yz1NTm?UcL%$P3F}CvLn8*af6hA3JrC4J z#eSeHWZ1uFZola3Mc=fA%-o33kdnWowH~x}c&~Qgx~hd@+x3A@BjRsJ zTYQBC9FLW{+E#TBmJH1sJRi#K5e4kWU6sg|wUsV<)6oo_D(>YL1+@A_9W~cleeUTu zJS0)EP4DYG0d|e1(mq+G5*5cDFvM5VFP=l$C42Xt5HgGxMij|`PdRq-lLmyU3fJd?lf0obaPu&ng&i8ecRm`*QTJGY|Z_e-6DIWM$Dd z*c@qFTp!*)-v4bT|G?tVyb;}GN)0ep+sTKO@CBWf&s_i2jSHFFg zjr|`=5GelJtr6j{yG2SJI|fn_oWdfz6dxpW2|s@P9V7n-BCXF zF{|xbGTM|cp>u3wBE`WuEkF&#WnZ65wZp@^*f)(MF+eN&-1&XQ9=)=OZwN6N;FuxX zbp=z#K)JP{^6}nX;LZazS)(`-zc4>G=P>b~CB0ME#(w2=#Dsf$$5(Ybh9#tA%baa% zNMCbo1F{F%Oy-9w^A#KT1N!OouYS(o0lh5>H{unI>U0ZE9kD<^AE3;#ARN>z3p;71 zqb{o+zjf7{#70EEh7(FRM&}y*!I7^^0`*aUQYeyqZIQcI8 z$%N_2!(W}5XvJGiOc97&jV#~(ZBPV7Sc2A_e^4!%{k)ZQg$NeQ8UPCyxIFI=SnbH*8J5XH z{u~i@X+=79ja2)$0^yYX!f+RZ$Qh~e1esD?9ih3ZXFv~pa59H#8_@j;OOt(?m*1R1 zj|n#o`<^XmLlbQfX%+CX`tE21BIB5hCbD(1J# z;W%r^&QEzjO-sM@zYlW&Pl@TB)Do7Ovg zCZEFh%4u~uPo?v?KM(voXBA3N;FOqj$QIh?`-p&WTlx9o)%zsN3IPWWWtPGIvPFiY zDfOP^`|BJLvH00>6WR6h_p#h~$;i#>xKL{}+#+$ncRZ$Vw(jmHwUVHr;JU?q5m|b7 ziH6#R@Eo>L=V^&Rq!23mEE0awP+&y4*to`Pk2s=mTA>=v_Rp=XZfmEyllRurTlW6e z>t!9S_7${8{EbPWElR_~WHZMMnY~N#=+DuSyM+V&mv;BULE#d<0{V**EOKs^t@h0x zMV{+YfPt6d`;`qnUSQ9qF@KNc=#&CzL`+Y2afvPfRb$pO*k28*UN~$~0yH=koGUFb zw|x2A$Mwl*NE{=xW`WM_V~u|;zz2$WeY=J{|A*rrZt}nAp@yqQ0}0@AIxf6M4jZ=W4}e-N46dtnp}HHxBF;3Uzx4$pJbIU?^qNfP2qB|11S}PjvKK zD=uZ%?mRT{8X9`1S_(LbdC@P0Y+g}USC|d<1-Qf;tQ3Q@CVDFx^(Ri6CmWU~&HC$u zO;sv-)Ye}25yZTYyJzzxh6QRzRpmZl?GN(`V|%nmlq55Zijx9SS)c4iM)gZEg_>j5 z%AdmU!7Ht#l2sH4UKNOyVW~FX{6H;l2rZR892lP#)Vs&vrg9qRSd#;nUi&Rh>MC6q z<5$}LWXHPs%V6l^8M4Ui!oFF{!6!OnMTOCR&HU;QI-s)ST zkLA+3;A*@F1P2Fu)!?~cGw`15_$T)&tnC80(oF6tt{|?^z);=ZY9kE9 z|JUAn`nL}UwXFN7xPY}{TIPc}FFHy98V0O{MrQ?OPZq)L4^&zvb|yh=O(FzY$AsRj zY7$)B{4j3`Ma)3Dhg3342wM1!*)aHRpGWu;w)3zjuN|#wRc9)gq4)mYxPXxDnb?L| zaopfDZky?cz-&a^nvlTp3;O{cX#-%Cd$bu%#azsZRJuoaahYn}@rf#wI0$@zUskXC z+Z&UVa!%C#DpOu$t7$Hr8^w%WPWTGfURjmiK1s4V9^h-L4e0mp|FD$NvIG&tHlfVi zt@FRAetT3fXvHZRkgh|Jj#Kq9W-ta^p>?yLh{mS7R%s#o>B zZwIPH23pZr(00MU0BVg7A4_iaX#%Z^MxbeVJKXIg8|iOFj6ad0hj4UgvaCj&Ks;n1 zbE`hotH`xqf99p`@#NbjYd)g9;>`#?1A_w5i|IZ7qR0^@pE&4#$2=l2kLr|~gD z=u&{oy$4#+zj5Z)e{CJC->m%c6@o6j{2{1%%&GFdkKm0D0%5;e#jbm`lf-IwlC~a| z%+cbl04j!&5p(&QEy?PUxdGAKNKxx5+4`5i(&}vpMeIJ6Hf?2ZWTZlFJ#Fa~wR>t= zExkh{6%SDo(jB=U)wuo>6)9hF2V*qWB_y*JtS)8s$*xY5-52ELKxzSh@Kxqpm!8*6 zU(^!6d14=K{N=aIkVyq1rUPmpFjACUo&ii z8=-a%!qok%aD5|k17ywYc@EQ$c6%AI-u;jtQL&S14Stob1L@ZjvdhN5g?zUtl^}F9 zsodQqo*V5*7xjQs{V{z&@ts09vbmQjI7w&;05g6g_m z5BIC7nTifk@3jx6xr}fko=edj$sB8k>z$+OnBJV4?pNs)DHciD7jxP(N8a%4WCeERbFY3>cE1>X0d~C3eI%4_@mr<(z zMD^EbY6B_axW7?Xb3W5Ai?Qn~#BM+Wh3-&%ho5*DD|z6qz*TYo+}wvpr}-TJ?}V9 z9xZ6NufpzRc68imVf~5}iM?AG?rtNk`j4RcjTDvib}yzk+~P(n&Ufidf?F!7>xu&% zLH#$O^9%a~K_(u_3r)-K3zuPUQ_TeEpbg7m&U7xX1s=YgLbyzt8%bemhATX{Ehu;M zCCb|hk=(c9xr6vDL!0h&>qOS#vKt>ALS&F+U$D|8rlo%n*n;(4d#XEb*fk3lVX94T zK&vKC7wDTi0N+UQJ3RUr8nFLHP%`>&r{jaL2@JT@GofHI+Xpra zwSEJygM06<&uvS`)NzSIpOr=Wh9h?l8bc~CMdVnhIemG*8UDojvH&3Rjkyyt@O#lo zaq95#1HpTndgp&gEMd~R2Q+-R zdfRQ9{d!)6{Txs7{R2@>CMRtG^;v!V8b9Bg{fw3Ns!YD}4`UbJ{WPS>zDs}pMj0XD zbL26eQtSR*m3*%e#$(xgF^kEuoNscmSqSO_@ja(d^XHvioaLi-jE4KO{ixU0rt|^U-?_-ZE{Js@-N(HFrvhdor zXgzuMV}ObsV}X=4(aVF*nyv`ZDw@3YTR+AP#=Wf|9BN<}#;_R(I|xJ@~oFK=ars7{VQ9V42;iYHv=EutODTeYN^ zxTjO^?&dnYFA3x?$GTZCjHqXh33dQ&ES8@zMi2h% zYGa+V4gNL$`x8hM$GM@w`N18fPy?_6N9>yoqf@+$wwl-Lko0#X4-8@<8B83z#{Uph zxyj=h^abqRip=rEaA>Ug4hizLlnVCoRYMp9!BqRbEJ0NvoAd&)8N59|xd2r4Y1wUWrsC?E z-Xsx$ZJ;S-{UfQM9x^xx2s2!#Bv@E^^A9iZ`7senOtnoGI1-RA;rUYzu z^B8ii8ti=2E{D*_z+aU>=PjIFOsh?-*t8T48Z1SDEYVx2%J(GeaO?3irbVl7Bf|9! zSUR7XBEdDisj~%Dl24T_OLs6qcPQVo<(2fQ$NYO^-q?$G)$dkA!-5R*pY`=9 zqhHzjyGwYJ&3j7+pIQxl_jjrBrqqbk%gCyKZte!)y-)(9^ zN!c*8KENP$yjwb!-4yRo=Hx=_aG{-Ti~#{L8PjMH_buUgfxM()xiVjV;LOEeF<-Y) z>B_;fn;vx#5({E=V^wBo;TfAC5X$Z|beSa>=zAA>0$VT26NTLe?3!0#dQV}kg9Wi# zmDQm_vp#yLqaj<1dpA?d{fJirl0Jso$kDwYyk+f8x~2_el%L=ja41kRu7&o=Zm-F2 zkxl3-(5nC4L`39luvgDE$T4L{WCpQskX)>w;JR*l6anx447-!=TgnFoXY2yCe3w2P zeo9e4swdT!*d=2rGPW^v83o^<%+{k1%E8aW2O9Lzg9#V4$)?34D@(g0L`t0$|@}vP}CN^ZF=TIv^;2Zxr6*afadY9}uJO$N0y&upB!BZx*Z_ zCu_^CI~U*b`e}v?8=4q>6P3S8=oBk2(lWTt!SsPSWu31Ny!Lc&eRt6akX$yD@};F& z%Q?}|zwC2n_m~RUccok`0G^>2eAIbm9=RtbTP3(s*%&8ZQ{?^9KH+*cQrREgBTF_Zt5av0Yy-F?Wb*aivYEe z5lu&G{dEgUC?Ad17B`ax2c!;Y`pQqr{cVc2o_eq00rO2mXxsJLhCZ`4&iK;vl=>Hy z(37Wk0Ds|}_M#4iBrYfS53RN(CA^OPP!~6hFDS3(0_mr`Pf^W(M7b~G1yCw7JPf5t zU%DiV_{YEMqauxV;ABZoeg0?GCu$#n3F^8r?1+)E0Z|7P5o;4ca^hvB2HiMcWZd>7 zd6^B+h6wgw^74{H6kX~*{9fb}Eo|>X;&aIk9RCN{yy0r!D46{1#G{YX8^w5OiAA_; zRD_O!CT(Udgtw{%I>ZiuwL*%QN{mFCL7y&ZH^`;%MSY?|y6~5FJ(kBCJ)U2G#xDwk zpOk8qgjAyGEV)L|E$5v=@4_)zk1w>x0h60SraJr8e#CHsX8sT&rE+|u?z8#AKtm?yUPT#D|@ zLSt}ec(=YXV)_#oKXHF$Kcpf2+7x!W>f|oe-kvoCq-Uv;&|!Z)P$kjY~aLEldV*4 zRa_yfOXJ8=0X;3`!>}Tk%`BnSH{rdO%t`BsKiGpx4v^r*JvW%-pEstkj>cQrsXS8T zexqSrUmh(RynZzq+OQ;7EV&gLu?7^qFl+D29UKX$^~On!tQt^W z-JFSd-f~JcAmO1@p>_GOkuX5$$qVH>utxN+o$r-?(9GH#aj#r1RkBcjD=HaqPnyXK zBea=huey+pBYpk~Y3A&ih*1>1ESDtV=VN@ZO%3;*i%%qmz(*?1NB?qr?ln2VCo02|1Hs?6Iu=y|( z!`zI;JZx83>wh;{yN2BXm0))x0)+^tz1csBISznOMFOx}ChKbA854?dCjUtr*X6?3ik z+)cJhN2{(32=CRWfu3Etp~{a`$gpt$>c#CXo`uw(`7!|%3;SR{@_??ZTV z*TGT%JMU~9N=N%-uV$FWsm4FT(`xo@ffo5Rm{$Od#^>iww(?b*0^G*ea_j)?!UO%9 z83{*gC9zS?gkjNZcJ2IE&?%%1bdo^8_0ql=Ri`q zdUj?%AW8<2NP^6?R87dlTFT#v@C`XM?c5vB?agJ3l)qEuykX9^$%^L^#tIgKm*U+G zizz%@N&y^ueCPSVz+>C@?wlyhDkn;r3%>ZS1s*Z9A-nSrAg(1#^p1y>`_jQOtcqD3}qIq$5`#M|0Eurhmz%jLgkpsz6^TR;qX}_{& z#N(zqxbwh2oHLD9#|B3~A96o=`JsGaQokRKu;>d$1En5(Q9O~85WQ>e;!*&g+3M6n z*drgB^stTfw1aDnS`s#@Z!O&A8YvK(^exV~(xqk&WxixuX={Qug^wY8g|6_>fv%nslHBwZ{7S1C-IG$nx zKx|X30BXz6^lBus-LUwuWa11qmIWg{`p(wCGmei3*wb(vp7SVq?Z&eCfKli_gXXkc z(>{_wUgoCH@@Wc?Zzzv&?~73%`E(kQ-egIE1~Fq^wyi|bFi~(CJ}X*kb?F*-$djzf z@zb0WUcR5_zpoVHV6LF#T^SJmI7HA z8ut7iV!1~d!0`bV(|Fv>C-@*Lj$>se@peDKKRwwZ(=1(aa~QS+HDM1;{^^R2DVnk|hgM^{zlkw&2Gmv^m_H@&a<%LMzxhH36Z zxMCj0OW5V^5DU`3axc>#7X%`!)BDK!NlA#`pPunY_&cezG`)u?o&tiPRJgtVfI0|1 zyXoW3W=2ci1ht4lVG-IZV0ft7jXs{>t~F522=3!?gEjpW21>4Q-z)I>EewPVa0<&v z<%PTcmS6rY9uM31wYo9WoRaXxN3}0KcFz0JslS--M2%bBxQ1~pc9<9K=fg;+B}o6w zm_{i!`$=98i#f8nZ^5|PRdopZbf{{6OG(sgmF@Mhy0mrN*<|O zSsp8^FSpQ)5BSDZtsgVJk)QOmi)e5(iFc9>yYHR~`*xC9<}l*1@SW?F-@s6~@bIg_8@B$H>&%cA~v z)aD31b@HV_6$#ps)9nKMSO@#=?Ioo)PVQ1@^ zBRt9Yr@Zi?%NzJyLV+k97|GG{S#E(Uk3_#f{)?!$Pd&pJlir;FNcJZ>SEmIifZu)V zin}kmVbeD&?bId7??LR^B!P=np4K_?%GMSIZIAPE+9;orv%CGNk}=0V@NVvd{b2s; z1{vM*2ggTek}K*(MnbJ8*PdDeM}S)#Ah6~7 zg&NV~z*4ye&t|oF?;rGb)Bdob!y1c%BXz6%mGmqZmlx67`Sf68s>Awvc zJw`P`^IdTVTY=^FsivQE?2>h7RV~v6F05VSF53?BcHP2`ZQK_;%w&SC z%1j!ROV{wsli4hBbJ8|FZ~9u36yz77^8ymO$A|^Lgl_@Hr zKL(G``F%1sf^as#hCeYN*i5`9dcuUmK)!^kO-P`(s>pE=YYH2tYQLqYDaa#awq{}1 zRhNMCCDL>{(VoEvV@lG!UOBsuvuoe&q#i}dgj4Egoxcp zoZ3xd;O@PpN%n_c{8JH$S`f$B6jeuVMb+x$&%iV3j3(A*&jD@m!5TrL%6TDFoqn{x zXQgCMG%3>hO|Z{Ut@W~}_DG^-i*4GBj8ClDX4!t9m4i)-&MsO;SKWIl=9rdDKG*C3 zLv5%Pe(=_fjw6cfA(U7)xZqo;!qK?{OboB`Quwqn)pbi~W45M4vbqOfR|9CnC*iC+ zSa!~s-<^=m%p86i zQRXixd-r9A9}DMkVvz;LAO_#tS*g#HdsSAh>j#XV_cI$U0E(0JqbW|qJs zjwRVpa2d5y!M4FWFU@9^^gpN8dp7&7&y?MRwwTvVj2!u;x$<`+3~0qAR?Q{ba{nQx z3$J{^Slgw2I~;7JxRo5tFNw0k7r&b2>zRh{JRP_R)d=%`1J6V9;w#4EGN>T|O>NVu z?UzAOS3f&EJC;?Fbn2OI*XnTzT&ECCL$_$1F+l^#9PLR!Ya}8jZn@iA5M&rW^f+TdrVb>H5iy17VwR_pbiRJowBFrrmANVs86y zQ8)P$Jo`96UKY$nLW^$Q+? zgiYZY+XYi+g5}caeG3f6f2WrpaYXc!Z*sM4JipR%q)Tl6QXsH-P=>6{QW}WbSPs`= zhY42n=ctD72RJicrYafLlxWjuDsj!hCBnu-5vz4HVQN~Nr{QsP{K_wmCiCLe)`ShGyoE{ zp}*ECo`>f0uW!3qau9z9fDdfPlSQ-t21az!-xi2DApWkrYkHgK`AS6p7NGpqgm0@8Ap~wk%?K@AmQ{LP7bCl>0B%B6Z)aot` zM|P0ivUP3alTIBxJ2lKa#7L3WTj-l+tD@mGb9AyQr|y`>1*CY8qc6r!|JAs#GsKU= z-A(9wll|N$aq>$TfVkIEYta1cP|ZV{$-W@h!8^4#TW?xD6#Ry8jX&!&A-}1&kxQlh zQ1eW+6_rqgw*#^q47lymtP|R}LAHb_M{r@~fXViCdjV5{U#1C*s2@Kyb^CIaAau29&wQp?58 zA8-)v^lG8iJo<`BDIDmdS_AOY9DJHMp^YS(S1q*aGiS3)`?NBC+om;4`w!TV=j?1- zdWjttSzoWyB(r7;y43a2kI_dh$^fpJj~T^LZ8Vjn(`>30rMa}AJhG|LN(({sqE&_L z9+x|$(<7N0Z=Q9|T-xZ_-5%HY_*I$;(c=$+C`_&0x6rJ60|Z`fAp5sX-o5A8V8%6- zSk^SBDDs$ki8LZ^KVo`_?U;Y7xNQ?dpXVzMrJt%SQ;!7Efdl6H!{Fci9{FNms}k4C zgO|_~1plQcoXoIKlVCx8ehW^udK=9tHQWR7;zj}=O?y<*n67%=W2y}%$~MhI!K@B; zNoMMqm6Htr8F#vy0FM}t-Rg-}MKm4He9 z^iK0RC+z9Hg%gHse=boQE*8tHyL9P|?4{1>IvP5~IK^V)$Aen3mr)wF`G)l17%x`|_@l^W*RI){1CMZRfMnoaj`VU1R82b{~g9nsEM#j*W$fpZ3%9JTT!AUPS`-o3?`F8>Xv_ssZb3+3;AJ^>>7n|=ngUiRs3d(*P}hDb-rD+B$Z z#hmMKJL{}j4z$ixW;&3IwLa-zplBN9IFnRd)*%2+MyOSt;PbOYo1w4X?}Uj71#FPN zZr#?q)V&Tmz?iP3(tW4IkH&2&5AsF;wFJa#bXep?*#={|m25;^coVu1*YmSho=F8_LtQ77i2@m`q zwHHcn+!rZ@@NQ-_=os0L^M1E7^`yTrJ$1c30-CEoPNR7Ja8q8+wDcoUWW($6Z*)S1 zaRSBB_?S!3b`Qg9*th03+UwEwylZ0IAKr6|FUF_kA96Z2?qxWvyx$%UWE?{Nbu&*l zbYao{#NyY({tqf#&UzNlIgCm@?e%J0LmfMeUHP=2*wl7`;~J`S7B6FTz$eL5QC>EE zU7L{5t=qZ)Xk_|e1X+9`?X3R2<3-n`N44PZBPS%hEaZupxzzXvYmpMaF}-wj&!B-v zT0kIgIYN?%uy8z_cUrT3JFX(A7WF7q-%ul3v}#K9pl2&8Z&!L(*da7u9QZ#<_pgA_w@%uhYBwtP5QQ%+K-3aNqeps&*?h=RY zOUWdknF0C0A%KQXX1L6cT7qp8839+s3^%M*LUwHwQUW`Y*C*~sJoo~QujmfnxXrH* zstWlXDv`m@G(~-{Tl?VdmZ$CX6Qq3N6UpVQ3Zw*Rc8q4rbsnopIFO2kHSkZhsyAyG zqV4~;^3F4=$!^>CQ9*b`Ktw>PHbkV@DAGX@6a=IMkP;N6m(WWfprD{AM3ka*q$d(u zr~yI|Ly;B;B~~Ze6&(~y(XJ%!sIp><|H~;JUal{GA zpnc4&Rl>UeRV;|=_gVl7BZBdS8SU9bBI?Hcock?em3oziP9 z?8mXE%tx8O%IcU#sgZFt(R{FGsuFBUtb2vKLDcznBn&P+D^<1bf8Z*B97C26QDK_m z++${WyQ0PWj0D@A6|%c{|6cvD;nJ z-2J@n7D)~VqY|#=J#jr!pOti6rq00?Ov0qc1zZlk$>SWcxFf*4&HtwCnUcS%5BkoW zANQLoTZPRhS?A`G=kV5@CUz*&_S4%vDGV%w%@e8lZ5mp$WO> z$V874UE7T_R}Wa46U&~bXbA==Z!Wd)%QTL6JH1{$7Y}jW3(D7|0kV zau^6u3Widp{%7>VrTB!#_jknJGgaq!yc=odbSfK#Q#NlU2L2k_#8-Y#c^!$1QC7}> zsHvHHdw62A)O?Rs&JoW)&SB?2lznl-W*6Nx{4KMw}tY{(%nAWF}cnJ zDNKh{nP*y8bSOOBOD!M`&a=Usbd=*K3-_TcVhZSil=s3|ewL53QdB+(VI)ry(V{L zY5Q#9JDQje{clsf&HKyomPG1SOd-K#VGYqVxp!7-rdyBNGwDiK0!S2Ox)O8{;s<~z z)ZbokcqE^}+o|F>GymcI5j0zjQy}?ZGPs{$lpD1n&MMzVxxI41b=di(MK@cOdOOu& zuQg9|aV1o8Q|T-!YEtkacm4_o^t6Z3_5JM^kl>p&^A4xfHGR6}N__%m^U9S{XaB-? zN+@b^IJ^Ohz;`=e6>jM|lQEuj18|PztpW4BAf0Js8kLZ7hUZo;N-$wl#wE~qA$yu^ zOdZH4x2{vq@RO`KAT?}!86L&uo}D{*OV>(Wqr$zeE$XteK4r97XV=Zg`fA!T^o6>R zcFdPdMXTys4=goSG#lV5pomd|@^bHheYjEw*h}X^W`*aEpoi^3@DaamqY1Ra;YoQthD1$5*^_ye+8m2TV8!B!!+v$t%%F~+2N-;UHWO0gbh zH-`2-3Q^1r8UcF+TV;H?9mF^KO+gyl>^lT?IuJ~ItBL4oaTq36L~kQ|mU=JUE@$hS zuR7K$$|EP(8$+)`uT`M#S$sYRwW-OhUiqsCz+x8s2()c&SPyiyg-;_-@A)Ua8g5j4 z_lXz?5fxI`yI~nKV!pPuy&m_>XAYTgZGE!TP24;nEm9`Qp-axI(1};+^~I0&gaxJT z4ea_Wm1(azH@BdgstnJ!g?6K>nP*;>vL3lr9sUmQFgC*Rj4!ELCsD@DV6cB}14{XB zF0(sUR$!SC7lnQZb6S6O^OxoLF>PAZ4A%SdHr9JJ52#%GslfnsX zvnEYwGx$1<{q!LTVb7ygkZm)-k%%)o;`T1Mxh@4J+5b%Q@zQpkIuYOb7-urvzWaJj z!e+8|`$~HiEEJa>sTe<*>=IR@R6~Q{90A+`s-w95y-YLEw~Sgq3yMmNxx@Pu4u*2V&qZ_ z0xxj`U{1VtA-hTm`6dxY$CRy1#>ruB2?(5JMxuYPzoE2ksg&0z^N5p&WJj;Sgtt)M z5IY_w0s-8hW+O(@RUT4vDR*wbDT)G?AuYTQacPaQ+A~66Pp4(+rV~m{uK!5uAoiTD z#k5Bc_w;n4FTzgNN(MJ1`cLa;je2anH5+<_o%)$9Hi>Udl*UeW)hOxL>XzaL5;;Tt zI#r_%v_5}WKAZHU{{}9imPA^awvrX@`Q#RUWv}9jyl&}~T>rT0Cj=H&2!U3vRS8A& zk7TcM8OEt}Zg9hYF-wH_S9>PiL8zx}$OcbW2_Pd=GWGh9E)9+T#9n&KS;f0RI_7DV zeNbaG!vxQ-Oi3D9xg$n@Q{tTkM^ko}$fwSQNw;l`yFaJF6LDpdkhb8-i7Op7_>J|{ zXs^=>J6rbjA8T`O4+)*6e%cwqNaBOyiGkG&Z2pIvF!v^zwVW>d!jp)y$jBR?^*lNq zcjQVTwi`bUo*1P5)%A<}w{Bfs&-P^n460Emp~>h@&09VV9!SB#EL2c-W{O0&XpKUzZRn3Gd1~h^S&9Phh_H?&!T3wOSlGm zG^Y35EyyR61IhdoUWZf#MP1+zRbiU|j`(DjIJzW z_K1gU$g@^m%Ka{M;bzFl`56Rnc1?|bV!$HO|9XGQukT*wVD9%ruh+^t`fl@`qI}n6 z71Zv5PM$7EoS<9QIthM3trSbOh;?tCqf9nf{wRXxx!8R+7Ac48-5=Oti&zbJS{Kl! zS$~7dV(THh?u$LfNm3H!7A`~iD4#pQQC@dT_MpdA92-$4Z$%aW`SWynVnxDeGi{iJaAt=rL{$W%zX#zZ1Q;W z6FIc};W0G*<)hm2pDRk`8bZegIGk*1G1`oog>KdIC6-0|epa04=`ES+SQ{?_0scmB zZN8{cQ*($@s#nDrpVEFJC~$vQA=PMEqV7|*SEQ&iAzX7P#B7AdXQ^(>rn5@@$cZ?U7DmA9mX&_DbDDq?Fe za$8!t#r=k=LP>u&FNk>I*!FcoEsGJqctZG3luz&3v^nkEYX?aEYekq= z+*U4mxL=X#oYj|hQqN&!j!Bay^ev_#;8N^ra__9y>{G6&gLmATYmeO7DySaP58Ryc z!_^CXcLx)g+4(Y@6UAMX$2&EF-P!j;zsd#p)!3iU{7}199oNkLlQh^`v@BGI+0}3W z{p^cmY{KOk5%-!du8F%>VlCo?{Tvs&TLLA28g#ySn`m-NbLu17VdvjrkWBSIFi1>g zX7-jq_V{-L*Xv)F{Wm4w3taq@L3s?ONG6nFIvkVYks@m3YB)B&t;mG{;6Rs+wk&UG4qmCMze zFO|fd!xj~V^egk6+Ff%JJ>NGpSm-R* z@ef~UZvw@2_0nX@mC_!Ks8X1vyS5>ur1=z?UqLfgJlLl`2u1lESFUH+srB`~L8f-h z$f~W&0lj^E+mZLR)@QlmBKsphiqbMZ1L9U6llN7v$=?V`qGEls%0Y=lZZ<9&$F(BdG|SO z=8&fBtpFXh8Gp1sZ%ukNIAJd0b(+_ztLPubDYJZTYriT6f=QZZRaxDX6R|zzO7iW* zjH5(_NsEG(T#K3&X-rOwqsy{#QK=NmjuTdEs3AVjA4IcreDAYiu@~LxWO}CpHE05V z#QOrceb2@;T;lNz`;}yf0QV8lhqmGqI&_5Ewf!FDj%X#36Chmna%vJg2~&)J{Gl9prQ3PS(tE%V>nyH-6J>V6RrtayjmPmz?{$kMIb6A=hm z6JU%>w}=Qm=yHb#&rR=F%`B$D5m}i z>OZnT|7}p2L)-p0TBiR+!}5Qrr1~#>`}}h}tylC|-^S`-(W9N+WK4}Q`Z|7GL3Mm9 zE={l)`eb@7H;k;>dbv!z2(I;f91->mld8paRc7Yn-Mt(B zR$p>9AGRLvU{k@8UmjIqlz=VCDcSDKG>FE*$gj^F@l$)A2A2F-2R`-J$J;*bB=@l? zx7uHlSrEvQ2hh_^|HR*ea{O)tjXij5wuo9i4)zuE zq1LduwI^ywySCO5vX9nXko zTqB0qh%2@A;naw;-KFE#2q-IByNh`Fz?zw#VFS1jE#6N;kZ1v|K~aj1Ic^g-jvYV@Er@!ob=2>hDPQ00|6N!Ed>N(emr*^9G3 zH-sAtO0D#2CrSJ9R^31-Fur# znef)&9JIivuiM@;K{I%*5|(nxb{l)HlRPjlfKzT@9M<&@yc0*SfJK)T^832(q&!C+ z%n(QsHo|Sd%#3hV$^>VcpEj~Bf3Z_`4@MmGbHyF4-NqL6`TFCO8^(*CS6z+amYEI_ zt3`GccR772++N1@{-ss%396;8umBVGm;xjg&;b4g>VDXmUa}RPLZ>J&u4OY_gP-R% zKBw&3tPO_yP-MJi=wy~*;z6|qt=cK}x#QX+K&q%a#^jsk{Cu|ywfh;Ep04B}A4(>o z6MfY#o?>^?l9D_`K3xu7$h=gTn^o2?$vl_tm^jAf;sLZ2asP6tLXw|Z{CVntp)<>R zIy7y>vzruaFuEf#JT@jnCha@bEn6lH2J=X-go#d zlE`Ix6 zZe)jf=02Z99^2gUP{FjYfcxCcW~b&7bQrYXrsjr`TUHFl)a!|>_L%QwjPc77%;O1X z6WPeTRat4OJ?-(|xFkVotx=>`#2a%WG1*&l3htA|c&pP)58g?z~wY!~Hgnh7@j ze6CZICmyvE3b)E(imD_*^6MSb)7> z{!IE%u0D|asL)n3|29`$F>wCD?*XvNdt)7eu|kBktohI$X+v8tlw^7?3C^@dN z2IC~=sq_@SB{Kpt?T5nX*F75iEeh+b8&>=0LRs2X__fqimnYYAOiqI(nw&CQd5W{E z7k&i?pEKzoLMm26N5F-G%Cm{--XhG`67%c?)-<+wSvDhSG`7OKt`xV1tRSu>e6D&$ zGvhJF>W$Tsr;r;5t6Oad$OkOT{=*2`Q`G~W1-SyYC=9NUDa7cn9#?_ zy){lo;cciP*^l;c;16etq<7zI2**i2btn>iMqGOpUm+YY?q^1uF1sHCY6;I$RjgGU zR9?sqFc;`YsZGp>wq2|xfE|#x0vNx>1ro~tooEvfXf9eqwd`ZGhdkQ|D)z!fknjllLk@}ID5SF2)8s{eH zf>`gZv9yqQo0TNrI=uRW%4QCGq`g=%Vftn!>M;<_S?SJG22N8Xc07Ga7(EoaPNtfj zle$u&=H{I#;^HMROs$oq4Erk)y1iXv%9BGpefDD2JI;bs+W{|I&m!qy`P*;(Lm!ow zhO03s6l9&F;eJZOtQ4|L!VJDX5H)B+R*Pb0@5(XrZzDr?zv2+vxs~Y%-xslD>sp&L zc_C00r%;2ULBA*RO3plUvdz7X;h|eH5{*9G##Ij@8P*o!Mw$uA-{b|eLewdth$0Qu zQZrKg)A6+9q)$w}{Tz;|W~Y8{*9g34>R|rLJ4>5T7(l-@0kb)4sUuiFSx8jnBdNKn zVNxt^v6$JMIEqEVBg2c*%)GIKX&>S2p!2H7UtI1|gx|SZ>m#i1oF=KqV3M$I7{YRv z&xnV9@7pWsxW1RFy%vu4re$)z92V(;5>FSp3E1dvY+5)I(ehL8CH;?lZ#ME=n>4h0 zABvKgG#Ov2ir>(Kd!?5-lD>LZ%ry1?P#ly`iJN`aiphD;7W$*_h#zu7k>gA_u^>~; z-c;gAPtyGqFl{gP4NcW83|D*xm(ka-qg*+}m4EXHh#BbfP&Jwf8pZY}Jgy=qJ1_az ziko^7xt6SJ!L`4a2XJuIt+CWfTQqMrN;27-W09mIgRI`Yz=A|-3}4Q@z^tBBLB+4p zTpF%g@-gImsrG&JGIg(?opVXtN^F2%yI0gor=o8pL}T~(y+L}JTC2JC@adljBQAE5 zRLI#B?=oTba%0V`0GploDn6wcr^UL3`i)Bq80eR!gwXrjk?fm|$d#B0*{$%`*N5~N z`pTgy-%n4oaWQsdgZcECzH#mO=j^q0xE%Mxu$UxnvuL?P9b@CPDt z4fg8VAx&&(f*XR@;x`Xvd-`<7G^jv$#VPmM`AT1dN@W2)j4e67EDrWNE=xE2E6-@p znD^)@@4J1KMl$8WZj}#hS&{D}5KNI-`P7y?>1?|Oo1!zrP`9+pDwis=U5mHgT>>|Y zJVaoVxEpE=QO$~H^}MXs&X;$x%A2fFSwdS)NmsP!3Ku(492B;Syz(6upy*|7WU!Dp z=g9^;zPCmn?9rZ!K33|GSW!tm0$S={ zIyQv|dUTo_2^M~w8B<8+OlRgmZa+X17J5S%Hn^Ou3tanQFMF85)H`0KmDYyg(LT?2 zfIB}f9wsmKj(HwjF0z+RnvR3gFX=b)9;Pp#dw)wh{x@hH`D4xh`fiW^!ZauSlfZyp z?#ajF?KVxfme#xot7cVo{2^2je9j~o_Px$FrYp?=ExWs}5nT4IwQJs`L0)p0YIVQT z$H^^)kGXfXeFncrp}$#5aNJ&S4*s~Iv4v5GZD;)QyFxWo$*KkJ$TF!fJU zTFP`~>X2FfFZQ4(VY{(?A5jz;^y;vigmLd!A(dgAvM*C6sAD7sv|4V8MTCNG=QZ-f z$7l9V%bxn!FYV()zQo#}O#`Ew;JpVWkMjLgSPMtc_GS;(RQQqWHXx9<<>9tZ*HgVP zhr_T|fB&9iabX*u(NIBO?V5b0gflM@BfN7M;H|#El;{%9reH-#*_{r;Z%6`-W}`f4 zft7H0w+BR>2u=YWex9Eu2T{fAR}Bx2gOl!c1*0Am1{1HB77s$YoJVySO=_!4Ob4(Z z*R|0-G)5hx(&%E^_P*KhNTI=NUQl=0VZ)oUQSAwPO1$v!P8B#D+UWjmF) zSuJIOn1a#b!jD+r7*AlX=nPh(MLO@8BXd7$l~|U|*-Omp8Xf5(niv?l3ht}gT7T(+ zKVdg}u|w8BkZ1k1@t!WcbLbo+$-QxFaYACPl7nc9m`XAdSgOfdf5w5Jx!3FHn`D$- zNzF1)nezUazn`G(EEFAgRcJs@sGRoRILhte+y%Rt@Z8RAEwYSX> z()4lWtGe0Xhl7H3qzqmeWm`wa9_Wf(9o4N9(%O3w z;Gr=3_XTF83D$|k_*PZ1QnaU1oe$7P1x`Cb>Afeb;W6RZ^b$2qW9~C}2$o>9^ND%c zWz6wOXpNO#fkby$9o(~B&Dl`Phg#th7&x5gyo1`R_H(t~vFuh1a@9wr_U-~1VL=>J zFF8CN<`YKv%EifVJFwuyvv z(r+0{A+Z1&g569(R0bNg4aKC(C-X7Gg4kxco}713OSY2X5Eq7}vLP?wwF5Yhn6#($ zoF3pdt*$s9WM%CjpXWUNF_=u<=YCHpQ}dZAdR2QQ0TTCa-APfY@j`KGosqJ^b`s7f zmJwTOJ};`+0G>L`W;Gh%-8m#b{{9km#F#AOU*rvHEZedLE9iycx4+AdFN{LRvMn{i zJ>`{>55&7`6LQBt0quHsYV|`;f>gDm1qr3WQWsoy_?8xd%bk*k4x1#;vjW?EPXuAv zLt91sQK^?Wu*OOMxQwX&@jqSnzuZ|Ky6FE?k6|_Z>Fyn1>(tqb(;6pTQ8JL&Td-8& zDDdqGASA42F==Rzs!WO;1$8$c?x3s1dHCnxR@+msOp(0qwS899CWtiX@#Tx}CzvR^!$ z>$z7@y?0~`*L7b)%^nA36tqv;&^HL`;HCISPeh4><91-e3syawts%F%&}ITA;t!3oxe_a30>fcU??X;uDw>F15J0^Z{K9V8`4{-w(D z?&v@x!?5}d#UzIY_e{L((8doG4EsxJ;rU76Nao0)d7=zTD!FTSviX__lPP*yJU-si zcH`XDS4eeoGL^oa<;)1^QBeBS;Z*+67+cHz!pvR1FiOC+%C~8WOL1p#UnUPC!09|U z5@~-C_ycDT|Mm}&jOjc}r65e9fpSSJ7^OTf-wG@6c!*A#Be7N_1kyb)8|3GP7I@2o zpeuk44!nn!=xjYPO$o3^gfE4RP9VYfRBe9tti75p^9jUy;p89byPxA)(FB@`vmOJ+wR)}#fn>TTD*91FYfMMoZ{|Myg+GicbDP>f)t9oy9W2*5(t4q|L^&5 z-g(c=ne!o&d9s^(c6WC7x%PKo8>Ol&gMmhZ_UhFu3^`dz^;fT6@4tG5;Dqw#g z@Z6WL*KX=E;;*X5$qrv05Us_O#9qCs1E4>eBE3ALI?L+0y?TY&^Y8O|z^TmQ)vM=X zIY}{1Z{w3}^e+TjPXhzUWkjloVu<*PUC81;%Bz0J7nkcc?m8CO0M*;d^&C2C*Bn;X zdXwh4fKMgB`)<#wF_zhr;BwvjFK=qFYTL^gLWB^-kbAFX|QbYtNmUzgbwJf$mMz05Pss9Gd6g-W z)oXj7`Ng=5Wlx|Px{=>}efGtkjZWbSnOzOX6lY=fWN_+{x(2mlDQ1(G*#Lw?!m0Fp zXr+0fDr1V``I{Omt%oJ)U2}|2v2_@Q)t#s+#Q{|i2a`A%gx7&b;2EH zbKG;>$x!)5C!LiRbD44snn05rpnq)@;(fQg^pH|%;kI|jHXNFF>*D;BDUr1iVVS5rB+p{dU{L6 z8vCr6nB-wc6ppNM*iX&6O2o0)jePIx%*52J6Ah?w%)QM_ZG1aB`VQOg?$?+Jl3s z!eY_aV%UhL$On%yAyg;@yAl;jFOMp5ws?qQi+DxLh+^2ch~+$D*kQtA|5d~#2|O!X zWkphCCE+hz7VA@bsUn#;nXi&7(r!bn#cC{ynW?e0F&|)fJ!T^8)7GCaaj}c3wd?;9 z1aT@&ci#?tG!Gld?<7)~p2%a@3K!LTT2%i=_pkIoH-DL64MvXcBVAUNOn11yJFR)h z{k<7vS3uMOzwNfcj}XrMi>B0Tjt)JF5KTSz>~`y+HP^uYv%#uOPg!jx_DK5YVwK&P zTK^4S_PX);`x@PTqwHYq;2G{sJpmK@?-wSGsjXOpKOVRLo{2h7z~lb_@qonuu@<){*_f%EXSZ~^8$3o7wi~nY-JG#4 z;XZfxmyr+~_FK8b^T%(&yYb)H`LyF(JIx%U$CR;D&xp;;k8&PydFPa%)^nye#0;Tq zhnl9Pu9+^bTXq&lliWAuE5013cKbKv)U&fW#P_3Ycm3KP2kHkRJEehBTQKvY!}Y|K z_8Qr2Y*Q*9+K?muIqkwU)Rj7r9%kEgegk2HEV+-jRq^{i`nNcJpAH}u z`Ca4usW^((pdC3H|MrUdVOqgJ8CBTfq-n@{uu0=|n~>|0W%L50=F(#gpY7-)jdfVK z`_A)x@$-ce5C}y26KQlvYP=zQJr1nw9&^nvG~Yjp_ET~2C}Wl)J-jjI>4(ngy5GI^ z!cnlwntw|Lb4*pgRe1Z?XyoJ-kKO8u6IP8I-d7IZiBdbF2m7A4#<*VW(=yEO-G1*t zy80Av1KgFDly35`o(lWwCq|pWzk2hr@go)51yK_)6C7QJVwZzD&iD=wxF`9A0}VMn ztX@g}WFr-Jtj${r(VB0eoQ9F+Kcv+rlJic*5FqnWc zD$TZ}EtMcuVIHmaNs6jtAzR)Yh<7wLBb+fg=y#jcoy_c0U6E67d3Rn{2Z$K1m?lto z>;r^-t&0V%Z|DCGSnC97rVuLfpHVVq3tbY)hzyXd0eM%6(p!;hQBUplN&5pJw?OXK z13Wjgk5scLUSyi$H60-uyk{}xriW*rhX|+ofqmsTn_%5|xOmann{ri&C9e@o)m3tZ z6ZtS+9o8Hbj8@d|)2N}=2QWK6J?al89}UJ~6TeA=H0>vvt^)4s<#UC1+np&e_2sLf z0X-NJ*=Jqm=vHqDTus!P`3^pNgK9MzOAIfg8b5Ch@#h3Sl>iu4aHn32M5E&lY&aoq z;yqv{p0Y>yY($@ppYjwS__J9WFfA>%y#ile4a720YYT(op2;x)wxQn4uC-rnJ@oxQ ze%RRhG}pZ`VDGNH1vm)Gd9DkWy*HreLDZZ-x| z1Quw$?PwC>j$`G!;-kx{!0@{b1g}zp*sk<$X-lhpA8Z*#;{BzZ6r$+@Id@kcjiO*| zbqQ5`Pl4@aCYMK&1=OKo8nARLv3aLfKL%yX-P<2xsB(Kny1mM$*pTI~)0`x?tIl8r z7*HV4y$7qsRdIW-d}6UVK*zIM)jBq%@MJRWI|+=GyijUHk<0pxmESTZnw0f_~`4kbrDZZ=wI6 zwt6-Xm)$?>nxzb^?x}%s$_OrhhU@DbK;`R0PYef2&dG1&b7?QlX>-igH%||6!&XGd zN4Y&v=+O0R944R(1I0rE2v3(&0Tzw&p(BsT4~mCDS6VU*!ij~=#wDEd?11q zrsvT#fyt}fY9r>g!OY^8c0|_X**`S0e+L!jL)mi9oToDJvMnLab(n91sGp4b!b@rV zBp!T%lf$Rq8dIbn{Mg_@DH?>YGOM|#8~AE0Ov^74*F$ENa$!}@@L$F(JG7)5g1;yw zFQ#lly?U|92#vefNDYFY8YUw?tlb{|jm`VH3v=bQwp!^0+2$US1^`!H<%detkcwi7 zK1@8(H?ePatd*}!A+IxdVqlXl{atAK(P|wrX7*#4^IKY^Alp*b1g;B0r3Wq4jsDkq zxV)DU&SuV!ViO~|T_Cj8laaahkXG(G4~9ufLB3(Ws>gH5+x=1G^^}MadV^QgG+i>% z*hPdrp^0G4q1yhIb)UyLq73heCVJ=q_pE6r6Tb308(EuiA+x_#$7=I!?_b#~{$3!fp2E8K@X17-9jDZPggKt|eCB7~rD}p%6Wkx$UIDY|FQcC&}ynAX3Qly%NGi2XpGnJQDlGMPc%2`^Ny(zIx&U1 z-DOVBx4j|-7oVBm!S+Z{6*8fuMxR)`I)gxM?s(t(`s&5LtcrUU|1dSAo>Jl9%M)~* zj`cy<+VkLldK%ZLZdU;XFUKidzkx?mHc9ysnpI-AxcIjTd^;O*2AiXstRNDe#P~~G zEr!Vc>l4{apVU1~-5(5u(dO!D{Ps#Q1a5Oq3{4Jrd%!n^ZQ<4u za4%X%!QFAEtvB_ty})8BMiQ=_`~B*q1eo3ehyYT#iFNE%wfcsC!wR0u!_X{ad|2I^ zs*dJ!z+PXu12|a@lE-Fo1sU!@VHXCor|ov|&ABGApWb{P9Mw_%&(d2u%`vxi>(wXS ztjgg!q`tW{BJ|j~^_ScmHYm)$09wbtGOMKH8$|y=kp-Tfus|8|*`&g9_NccU#ge}g z^kC-13X91M&*>D$`ip5Do^V)#pRu=M2Jbk0mgiq@Nslk32|XZQw$K=}L(lN%zh8&w z+}jIo<&ArXUqsKIDfRQH@bJe`GuL-fYOC@=9e3xX;vPU%pG+wQvR`K>w-7XuOe&NR z8;jo>4jZmlM*-zQE{y!(!$F>jF_l}P3)9rh1*p(J-4$QQDlU$VD8|L64g06LBssaj|8)BzBnPYDYj!>JPe7jneUKL9eakl5l^Am*9ROnlG*B&Y_y4 zLkX#+mj$ARP@SNv|Nj;J4#FBr6MeS!aW|1Mo+-V2tfuX}hrKp#AoImS71NEOJ^L`U zRK7(!168WppzSte_Q#UzFZpErS!vK7*|`3lT>vDti3M=mlGW;UXB^5{h(^*C9=u4vxM~m&;TgRP;^B9IM^R%*t}ozKlkal$N>MlOq39 zSV-+tS8P^Q1K)opi#c^Ufeeb;@4h9U{vBh@037U&~4ksa86inp1f4AdF#AJh(w}qT|>|-@S_T zvfQ06T&AF7HN3Mi87kpCs^Yj1n*W@@c0W?x5@k~VQH<*&%hE!`-qWGZ^4av=GfK{_ z2$R7(8gKO{aHu)YW$PF!Y=BoVkmK)n~ZQhAtlk37w3^D!mHx9$)3(N&@LDW`Zi6p&BY!-vcIRCf*6O`R*E9X3mu& zw}YGuY|29!mJpO{;sw$L_p=)ijAgy8urrbBQhvHNCn(iPd%RQM0OUK;4q#11qtMoTJSTw}q@#-r_!`qXJe zzH6kf&B!MX(&^|OQyNc=dS)Vf8tm!rW$dXb{^1BrXpk9Cxhx2Yq$Fk~gP&77tjs*? zzlqIJ*9q(tx>s1BScUNP9iC03wBBvGsx(@5n*@6KO}DW{8fZG?pR{|cA6A2;$S z5gz`eQn2>RdWodC-#$gsYC4)c-9A>os9Lw#l@nq`y1iAMYPpG-Kx?q+%PYEVma{(^ z$fa2yCL*vh-_ca*1r7{=wJKmSk&_$I7-&p-Kx2*A&@ENfmeYQQGPTs(Z1W>Tyy~xK7+BjyCWZQd>{fyhX9bIxb*EoC<-88O5T8 zVXn;^ zW%H-U+@1k^$;?}>=ci1Vdwam|Zv$b27if%M9muN2#fMV|MSxQ7uw8Asb`jkVU5`%Ohw2V-8^2W?duflYdU-kR9*NQV)0C0e3VpjJ3{RReYf3CdG*RG zorqkN9?o=eHGsvMghpz9`?%^cDB-Jurf?PO|2ju0WAS;l6G-xjbusAu-HZZOjg_6A z`=fPNL-Wx7ua`+M`@AnKH2sIeYV1z>G@Z8oN}Tc0g74$HSEZ-KmY-Q9A?4ic! zgiNq_1b?|qz|@G=lNqba%l|@pT!mSDztnE=>&`qxlrWIV(IY@YzOn8^R5{0lzJKjt z#~81m$Bu$rtLK;wCBU5rJ??Q>hIe_n-L{QS0Ij)(96n?6RFplw;HGMTf+hO7UG-TiSHlawX)Hr#2h7#>NCLARjh7K+4DP-*>& zO-}ec0f$hS!I7)cfbDys%Ii52+qrPy0Jh+10m=X7frB2rez38}h zSU`1gM-!Y%CVhcki1T#_(<6X?w)FXC6L1P3A?E0wj1ZZxF*s*O^cq_dyVCQ3qYK|o zs9~ZdeQ~;k;_Z?g^KJOyd7%PWgEAIS3M`!kN_m>|2w8cCVZSt0$d)ePQrV+2vN;e4 zBfhhx5r^WY-CbsHvGXpk%B`SRmXtzcyQsrNOQ6b84yDR|n>|^t?uBYKNO(@dw zF1$u1Ww?^iFAi-wjsQ;t*rF=8D0)pHdPJf86i{YS%V^Ek)aI`QGGvI5R99{c`f4+F zD|wezoud(edH@Q`IYShahSn}HR44m<4HPGMuN zV#Y-_^UD!B;gGLSrI^PoH@Y;qKHJ_QFdW3sZ2P=3gPrHRu2=42(s*h9A~ zQvOQmX=qDb<$|Tn()1lRVa8n?DXNW?PQyc3%R2E#H++=oe z2|4*%&_Xr7F=s4r8wiHyLZMSqT5aDpvm1z3Y8IzDeis;>Kr^IfDwF^V6ugjov9&&N zOP8n(%|QQ|=jr^77wltN!!=T4e`I6R5ON$=b}SHSM1QUHh3O#~Lkyb*mBIB7o|CP~ z`?uEGn8!{_J;No4(S~QenfmYkp(4+a(`HV7{>~erN3SY_vA3;%yJfJOT>lA=+K{_a zBwhn=$;X@6pIZd9=*6$8ob&Le?AhQvDA1hgkLg`i~we;Q#R7l+cw6q@RSt45bhF5}l!X?I)MH;YzzL`a0IL z`HdYO>}dVOHe`4N{B(sCAnRs4NT^XWOjwa(?=s=|M&nVp`0zb6Q)kN>l+s*idjxHalMD-eeEJ?=4CE=%?@lEPZhudyTV#AVmXH$q7|z`#>vEp`p9Y-L@l~O z>%=-nGeN)LA$+0V$JB$3kAH|mp(&hgc8O_ve$1G$n#QxGp4Ueq$um2i>OIBRE4=b)0OKuGDT~)nGm<(}J1D+~r9b`ha=317 z-2VBv1aH+@$DLRNUM%ylAK2k~HI=z)@ulH@d6?R8J==aOS_w5bIy7r^YFklbYXsMH6mUq@XgS7f)Tk1>&Xt5bx zF?8Pv6%>Y!%H>i7^fI+KMSWm&4*Nf6lU>ZV*GQ7?Lk#P~uW!^nnxzSNbn5Vr9gKX_ zKe_LH)ScoR#xfftvA)noocby$b}=HSKM1WZDxH^T_lY2F&OPM0b((O#N~%MMVKccs z*lqY-0GiC2ZGJ3`Cq%g$W#F652wmk~Z>7;QXXrw9yZSJCTHpCwMM^JxgD9Cj zQK#yo$8O}IWymM0_Fwj-rv3QdOZ<$6*UijI<2ah8YIW*L3bu~%R3OkTL0HFWH2Hdc z2$@6o+ob)X;)^XJN|M%KdY)pV)2$=w(FN#(z`=dMum5y~9{ZTlr-rf5|y%U;c!|E zkErL#nfd(!yF)C$tS)@dr9Eae-6#aT%UZl%2nQPxvKG2zPomBG|NiSY*pwL`wA=iN zeAK}{u$ob4me!r3$WyuO6MZ^Td@zr=I=y;3H~$~;bAZ01`UfCRLh((z<0|vLPpgfO z(PLq+f_Tz*AoCI(NfUEyR967P3Q`|Z1Qp2-8nkZRA#=`(H4Wom=N*p?_$Qd=NSiUa zY+e`WoNOx_d)b2hiLs&rj(Jr4P>@xUAM(M+x4aXN0Q4CmaCS@i)d5@30K##?_L;SI zf|K@Ionp`b6m)o5P-g7n|I=nrS?L-`?MV%86V659UucJduAT(rtgEfuB`)Fho7JZ_*p4JEC;9%tH z=^~&k(n1N$Z$(Z^!9CrMAV|*I*TS=rFT$7$ckF#Ht2h5aD#`Hju9@i#_sUjZUekd) z^12EpuPH)@F0Fulf#NWowd~yLbneOh#ELLmIbSU_V^Cqka-v6{&9%b~I z*8#fqsrevndIDypoKfWNfuta}JZENHF;c9as6tvdB@xK!w47J4qm{Y)BMiy#Q(3k^ zb?GvUg zI$?F4k}q?Q)ZXtuc={xD=E+U9&S`gjoSnyQGbAhjh&-?4>MSLXIespC$~|F7xLewp zgrBq@oUyp;A~-QvNt8@cd-fi6s{}QHfTb-QQ(Y!?pYb*QJ z8RP10xdz$S)^tsDp<1Grzvs9ghZuv;t{;W z!aQts7mE&~aR6L~&giRPOOP(iQ$k;_1-dD;mTP_6Uan^wH6zh25>tpey@y;VAaChU8&m7?8m6#GH#hJtLh zxw+KNI`S8JudkBF9Hjmcy)#S8PQK`EiiEi=O1FN7{kx&RWrxDQ>_usQ<~(`lqUSn_ zYW{`9N-V&PApvj%k6Qxc{lB44MyZ@mHt*)zS+n2lg?lQ%FMi5Q26VT;1tQ7UFcT1{ zeAl1g|zv%$dk8^MQ_0vWl)VSt7T(^I>@3KdLSD&Mt!Do+BD)*0vY)z^1 zoV|f>-4mk)3ORa>Qc~tVR5x~2KnTcO&V(tHRgaG{EeV<(lT*-@SwGPe(Q~NiYAs25 z98H=0_U0d1E5H32R>Y7qz)QbmF`n^5DswMvkJP6a7{;XoOJTpqSX00CBC>2=ej!ia z8i+>?t+tew1d3))4h-(L&K7r93f)`O(%15=L)aBG0FPHTXmg%9*j&{EQW7jz86vJ5 zK=*L8%rAsqbQyN(PONCfDuf1EBdul2X4@1kiq^-SpV)zxt-lXcm!cTJZ*<&PcN0KN z%U@+q@zQjenuobOJSB@vad2yDFQ^fOvTUnOMuk9L3pq6%^8C>4_)u`*)$V?7K&EH) zhPGeo`iJe0Z;pdB3K%sVtLX@}TUv?J3sXJ|R1;i9e&g&rP?Jf*_1NGkWq`*)qwM<*Y;z>T;IMZ^3z#HSny+`gdEH=P4b^L=EIien$KcaM;~Ym z&;We7Y`9Wal4{1h4snubKPWk|Wol%DHV^m%O4pfv+R~WWox{ke%M- zh6TTeqa0oFEn1{b^#s4Qmdt|!bD3(2?S-P1rE;BY1f#0hPTns-t=Bj`a3cXt0*k<_ zv8j_c!jY|#i7w7}I7)gB)&Q|hQ;eTX7|(F9&NF0b^X&eM4s7}p?MhFuXCc|Y0*hK76qf05TD-7yX|3(_#8Sqq)H~xJe6FKlz!`MOuhi= z2!jf?10LQ4X*T`!tw7M!8y~Icz{BFJagnYF1U37gZdlg)oB0~Xk4=Rx(NRY-J*vxn%*NT{_kg2x;eSDO7p$X-%f97 z9Bc{-Cja7Di`1tb8@WcZU?haGt^d{jqZU19Q~aD4Z+NM$KgjT0e+|6Z1JM7_o-o3M zA{ZNG)!5yRgg}G$-l8Y$tnDCih*Y~pIvKX*C*M>*rsv=6WOp11wFi9V(~dxf~RuV?^5`o4y=qLo!xA!Ntf4DR1S}!T!Ih^e-RMsn0%IeN3T{ z{S@FyxR6630icXZQ39MFb|M3iTTocV0KD^M4o0%AtaN0~)CbK;1w&?WJHvD4GU2Z~ z@yO4E7p4K(`&UjUf?nF^M95w-h1$xQcalo3;#YmAuJbKi>CffkkQ3mc_1fESq@-{T zHKUi_2sC@XlUsxizy*mc0t4AINk>hk%oELJSLv7ow+|;X3Q0$0Z%3tKxS6Qp?aLyD zHpxnm{c4f^oh?(uSL#MmQ56yblBfk1dlX%0qWUX1Xw)afAAAX$O{vv;ai~N1A|!c> zBt!b+u;-^**C{+w5uTQ@F-Rq*!|)+~SNDe;ZexB+)%k9{d59XuoYd!vAKvPE+R-%Y zpU99U@^Z>w*X%l9bQJLjMhN^lV&gwaSKnbC;|ALSs zZACdj7$mkWYW8@(9!=SGaE?a7$*TK6t87IQF7vOF9I}&>lW`+{&Bo-byYV=f@|r*F z_QuuYK-Eagf18lZ9_!5SZA8QxZ*8i=z|k?$OowP-OEjAXTeFkSC9W8DikeYCWa^Km zFrc}t=4%|RZUCW)xNE%t19O=dFS3Ztp0ZEy-t5KC7^@)cLaf*iA5iS_IcOa4jx`PZ z7jipeR7>tJm>_J+ZGIRBYi)M>ID(RE6GaxdsdvrIGd7#bFDWbspoye+$f#{Ub85Ki6?*o(z zt$^141eLV~txss8xeqI=>S6~ZZC>ZXqupwayqH(n#b$@acOmG#ItD_=b%7nV4l1Rh z?05I8E$LYD^|XSst_nD*K|9w(A|e;1Qtj0e``^(mBY_lLKYOY>Q^Chrg;__7!S5*! z1C{qH4DyzhU*l|j=`cVly`{tlmoG4I725*dPgXZIk=LMfPyHq_{)p0604#4}SQ4Ia z%JRMW%quIja>u5EVp2O8p{vc&W%)2JX~>MOm?x;T%HKGUYPfX#RVj={Xvk})Ih7_^ zQ<7fSIbES4m_fpmer^6G&{#-3d$W2-F=mV|z2fjv@)zS2;^ZH8HEiPDG;JDMh4Qy+ zxVMH|6{*y*zsPyNo>G%P1OHwWhGSk{_j8ipzobV;Ic&v4sn~B| zFvKlndIo9IMf4TR#(+GpUi27`ZLJJFql;2ZvVB|=_dU_`VlpA>-H%`aw#`KDt|G)HL7F>C6d{ZbpX z(^%iFw6xSwDV|RRl`NIZ`p^d+6F)ERy0Kh?#%8qUPV3ajz5Dn$OTu>TT;Hv?WF(Fz zvYd=#WlNYTHGb?xgot$ysdVs-VKnU-hVu+Hi8uyWxSZ_h1r_v7SK$RgNlR2dNi#d9 zIk!D-t8{dm0p&9ES@a)>ueu^uE2fn_UTGv5hq;;=vWiu1X1}?yXy9mB_)qii_fs ze_OxeSDM2&oruKiei1tor0pbBk)LH9@Q48iIALK(o=r6eqr5L`QLJeDL_`?*Meqv1($;HX>#Jh3$IYDBA z1KJ>$zk_i+O2*^FK#*{h&e2D!*W+rO1nU`DtPC@VFsZuIc>SS&J_C*_X`s|l4w3fx zCKJ=>z6jM-aM_p`*(Tm{UZMSPpOlPmz;9<-)Q7s zk_fR9$EuLF1pDJOV%icl>uF{syO~dlB8fC81vlq`U0HirfbZJ*%RRa2IJV^$l>8ba z3TOh-Cq1(t_;7YT*G{GGbs9PYP1iZ?s}mNfo?l>7F=h6Hgf^1!zYyg%mMYXNX1%ZA zl*{i(a0T|dhxlGo7IbioojBolm_0U_rZQEp5+GwlCN$3G+!KC4P6OeSLlH z;%UV!56g&C0#qh#4$~RZPydub;D5{*KiSXre-G@vR=VzXZyY3zTZiV;bPiu31H754%KJsbN3b5ROdTz2I# z*|^Eg-VBNGHwDFN+WoYX2rqSic7aiHZn%RD+HYbyO|(e#NNMS;#DL~&9f8MrkCmeT zavC}r62Lw~9#dM+(q*UdN6%?sSe&p)RB}Ek7Y>rsZ=ah0)5qKUiyUN1K9QXjdYD=N zO%G|Hun`%AX<0^2Z*)B1>8}KRZ;0ZmU>oJx-AHNTzQfMj`JzQ6cV+2v%eD~*0;q!}o z$HM-JczY8ildJE~U|h^h-|agi*9mXX`U<7ram;q{A4=aZ{=AS#K|L+#E)#z5xBlkh z$!pPq_M1{ywbgVZ_eHsX!Q@axFB|;Pt+8^?otl#C?ou zBB9EQp+O~gJ!ie+vbX95k^BYzMz>_Gu95{p059{jOXcalX5!~jx7{A`=dCAX%G`$y zyw3Pi7-hwkl>?04cc@iMA!j35+7e2cQssBmve_=(h}zrElRC~Vop38%Vh4D2L0QB5 znc|R*m_+tvfW6L)NeAqjimuh`oK?O$87H>r`)VDK|9+3ND9|70PJA=U1h|`kUsF<2 zbPOq#c%NT@y&q=JOehtf9;ey%z5Cu{|1J%U=}6CnGV*f$z?q;G;r?Ob=$Q4iu!SL` zw`AMB*UsN?9G{vR)P0O0enK;tp6qt!x$u4q(^J?!u^I*81(nFX957VgxojpYfZ-1GM#e@-0_mfP*qQyH@%5~noV8$SK*kN5Z zQL$cLvyhD>iG=zm0;CT#TMZYAV|^SnRaQH>G^+t_B1(&9#vm3=h(hP1Kl^=9yBQ+1 z;dM7H<%h~mamK@ryeFH(m(w3S3P~ZXH{#awu7c&(dE%Z0eLb=MQutyuD~1#rv4&B! z94puG^U;pxK$s?FCZpfZfM%7j!ZYx+*hvJARrCI`H^d`&$*ti{??jlFmfWq$=e3ZKwpt1bfJvV~d-@QqR)XJN9w*>^ z<@*7r%HF3MkssW)Y;P~O1n$zS9t<|Sko{F>JkjTJKKU2?2|JkN-%uY}-#WD*L_&h) zJ=C!iv@ufzw+5i4-o{9i(Q40C_c@#VXbaZ-w^!syuM0hH8sr+Ic?$(vnak)?VqLeS z0TrM$u!6Heerk|fub1K1`4PAM4xzik8DR?DlI%HJo3L|^pKc~kB^Hx27gOvQSXXDR zj4NTtM{a;xyx0#**ayhraI;9a=ErHT68tJm(siRNw)qv>T;#rWPnO&^sQ`&~<5067%thIceI zvSR&YGZ=Gbp5Df9WH|YWJG>F(IoC}Ou0VR;d=yWBVYEr{xt^qw8nw#*dYHOPi5~87 zoNM*ahfuhHg}V;{_x&gO6X?9a%%aGb7H`I{vId;Zw0TmnFyI>cO&2PJfE4r-ZM{&l zpSGM3uAbq|SjkT%V`{BKs-|6Ea^4fg#D;(SWtbeKHDBD;)ni8Oj_Ql{`IE8=ve#ye zP~CUE9cbvc=u3ATKw~>D>m=IO9a!9pWw|HH<;8dg542!kdM$`+pYJrd93516kI%`)n0e3 z3uy1QUQzqrg4EC`VKy1ko~>gaBZzc0#jxI_xtGvS2Q zoAm`k1U@kp8*&4e5pEeJO!O$@0)u#W%Qv|eChip1JCwRv^uCyEY2DUIO}h!mMW9Yp z22F8nuh8NO$g&d@T6QqdWj+NE;(Mf^cXYy86}-8iQlM>naW9;yvUBT_iu)uERTB=` z%}3wR#-1a_7=g+~69ytzHHnaAJMKsG65yAiAQikksG~ZWUdEdSi~&eM29?OtHbzld z-_)JwaLO04TVS86>lyNOD3)$G^f8eI6KieN``ieO516f%rFa9fyI+Mbgjmb>yBJ|O zksrmuV%U>`C-E&(IN*W4Z(3WF-4V~G#Ana1H!~vuiu6C4eo0Y3YX;+BVO}_wb!fe0 zT1KYkstooqo6$cfVp(0?^W-stXO9jwg1+#JE+nXmllQ*%v43w!UKAg6nRhae7CYjI zX|rRp(u-@dLOn>CV03vEyk-{FxBcR;5G9&ORdl`vqIlu3*6C!lP=hM8^X9#n3Oi3$B(Zp9rjOuezLW3qzUp>^5=|_ za&dSzQNldlb!K9N9jKI6_^$e$#RZ;bJMNN$19VBXuFyzDr@_StHK^THA){xQR;gDR zw5o4Eht#If#oGD(ZxmnBB0`~kdFYu*FKzP(y3OR&%iy50Cc*RZoDMP}ALqn7SjXjd z50!@5{+%uq@*vjlp!yA-q0YG}^e#?%wEbjcuDrUu1^{1Ol_r|hZWw878-wcxA(=yL zvv<)>G5v8ipFgu16AAcX{Pc!iAV-MRSIUnU4<)d8V|EfH1hlck4%Ss(V33lA`rMNF z`QX-WMUvV1KQfenlA*3K>N&cM(Wgr}_{`XwYvw>ItYzUCHRvUMtAUVpZC zfM?$_3!<>&(9MRH$fIXnFS6nx=KSBAm85!8P(x(WM&TXOB$wjUOfLmfw{mf zYMC{Kuj$NL-9=6D>)eBR5c)_($z0lc7aRp|O|b~Nb)e(a{qpS_F&hq|De=n}9KPlJ&7F|@iH3!M)g7D^ZGTwsvJ1Ck~3srjE z3Dn=6p*{Y>V3XVdH>=g*cTY)2lcbcGwofwEtY!)$Eh&hP4^4cxim5$1g+NP79ENFj z^5QLSv))MJFq$(FtB0iFP5g1ue1EgroYCoDnLecc&|P|afnU9UT%;g#$gR-N?R9lR zi}FXPwe{&p%biKdwYC_i&Jd_{sbKo;g@Y0h{+0N+7V78ah3%N!T>Uc-aY~zb7A)h8 z>T4)}3xn0QlX1sQ07=)uS9Xj);+;V-P1aSPmiuXD3GXe^s3&1X)H>}8g`LG1F7Cmp zrZ=QzP0o8Kef74;fDL3y3el&oi^Ks$kmv7De5uOjIj9BP&JXA*`#M`~hWU!{!)I=3 zflRus%9v%2(U96F=!@Fk8C_l4f4P&sEy?z5 znp66olGKM|7fznAbL}Q_Ty12}(yzX8|dYaPqD^9kXJPznFByiR3kZ=3! zx;L8x;JuP3&s&~AF#wVDvw|t~K-FFKb_jEr>I2M6{gob6bB^$TW-ewx9OwbLMV9rp zDnw(zfoZ8J@8fPZv}!51Ze(Bo{U;8U7n8lu5VOG?NwVOb=Z7vixs|?e_wTIYw+Iqw zzxj15I?fRDGH-R(SdOroG7n#Dy8)A#OH(D_eZG8AJWZZ96oV-C}S2WqvvB zkb`3;F`R+03bPZ;ZTH6}YN_fXceK}Cx;yKOvLp`ScZ!ZnFY zWPTXgvJeP^yxGrY;p3f^+KpD?2buAZc}|%LEQ(`G#`NOOc^-V%p3@R&X78+cn+x%9 zvT}I+BSDz$_r{CGV^;8IueQBW!taZiSznOh@I4JCv*`pvI;~!cEk7paL#qK!XpO8v z=`r}HG--i`r_0v1ViPk#YI78DkOP}JjKA;Em7RbgFD(b4D_?3Lvu4yjg z4peKk&i7R<3$x+)=?4)tyR0Iw0c^kR=1VEN?YnkE(t>3B0{nM2kp}>|T!EnGMCY~* zGwDRMBK`0pp$^ZvMbeIU>>Ro)-&uyXdU|#_)ph!5iH3qvzV-fi-*lT)fW49! zf_Q2dlON?zL72-}#IU`*r^fnYC_0#OWox0-Z+MDyPjAAozj6z2yx2fbB7{9WGRar5 z#Ko8#_AX^cuyo{3$Eumup^Mx8A<`sV~#-~ACySIJuJuRGG=iAAxLqI#k35*6^j$Ip7~ zhESJ2Cu8sgi^F?`k2L@8&?p4I_&r~s#_Yn=%~xyV7XPn3M6pm$2=ddzna*m*&y3Ef z1=N6lSqbBBDR*%oK(vog+4W!8kabHw&JTacwoZf~{PHmAp3)gT|GQ=zMBSj$djuqw zY;&)vy}nmmQZ!H#2(xLv#=5n-Xsz-QxR`P2tIP@Pxum3NScuJRh21K~bRwdd$y3oNFdD}cMPX3nbxx zybCgcH(N)N?u4qncwf)wO>&95Dj!xmd=g{op)lO-L;zTrwR)|1?`@JL`Sg>$T_wYk zZ&Anp;_R=Yy6V2LVOXWRyCtPdIs^oyB%~3L?(PtzyIZ=XySux)yQRDFTm0|m8Q*vh z-jkOxIQs#6v)7*Mnpe!_BKLJ!fV^KeTPth!4oW_Y38-Y=nngDgN(h4Vu*oVa^`Zme zMEMJi`YULbEblP!zTWD|CMP%ID;J*N^dI51vQ9EjpI~&JIyJ0!J>8M} zwsy}8r?xzN9mT?1H4U6n*7UhuMs)I=*8AlveIdzav+qqt6w)_y`ME!wAnCrSEkSfj z)WUh!yB&Ep*DBXzXeBalLfeBt5L>Dv>SAFp7p0TK-rfTEjr4aw*jkt*NeH%W%qC zwqHTnK;hjmM&H3r@-83zt2}$;Frr>7`IU4uX<$=s$xGG>{oFOb$o42?3=2pT*W0-3B53i=CWUadS#DZ^mC(8|X zV`(kR(}WZh^j&!)PD#cF)!f3Fdgta6=8*dP`xE(j zzsgn~=B`@C;abKKqneqETuO5M(qbE^H9ZZi6$4~l*125K%+H4_`9Y+o9ddDxX8Qy5 zG7Lx?r|KS934%O%atbmsGP_;AHnTa#-MT@YNH`2CL;`GRDN)g$zcXg*+H~X;7w=V{ zdT{oN6lvLcZ8m))B2X^*H|QT9Lj*Y)XzFWqdxA}-{#2}fvbAM>vcJN{z}Q+}C%qlp z-F&Dpo_LQEK}=JnHjnP)#HpwjaItBwS5Ddtq;|1vd1$)%Qq5*(oBl|$zKA?ZDq#BT zc3iEu$u^Q@Dy{(U^@k5ZL@+LGv0+}#+QlM@2nZo^A8VY-%j0P>Yzz$I%F4!$mvo6M zy8=+E9>GbF18fJkW$7n@aI&qZSlTa@+7R9;>_?`t>$4r6doQd)XC2?kr($P5HL z0S-<=bhNi&)g?k@Mn z0_22`49CLtgrPIL`QPGqap`t{*+~^LKSErlE0Zk;5>3xZgKXr`~BFrX>@PUiE|Wh`Mm4O~&qU(&G@* zo{el*DA(@Z=(BY6N-(hTn-6w=v(>w4_wVKO z3~s{fMbfaM*<9@%{QgF#AHr}x=>q^~b|j9JR^WM^=Y7A*61 zVjg?gRP)7Zw6BbHzu!D|DhGRKzUYdV^A;B`GZka@!Qeo{vM>tMsg&m5c90_^Gv^!z z(~LJWdg+DB5?V{!#u=BWmMjvJ=}`;fKcD5lEnWVE>hOzCD0CfVQ~7x?j!%(n;Y?bM z`R(mXb1F;h;@-|o2o~wWnZ6pu#@#u);WUKf?3<}#HCYy`I-O6_6G2)zJ*eL!IjmOc z%j{pC?p@~y=n-7}`m@00e3vgbmye?94hjlV#SSn#S>`q`mDd+1u5W5mQC9w2f-r+Y z{dN7@>NF zu(GnIrYO>18@+|`sNWh~t6WWr9p}J^fU?!pMX#GS;E%V!)=5QW; zH%B&^14-cHvR18jekHVCZ|DSu@?|FaQ7U+CLkzN!NALpVzRl9nl3E`}iW^yYaS;q2hhtHz9tf+TBT$t?iw*Sm&o|iZ`NCn0 zAAy?C<)VL+lS33KjGMsV2BAgER@n|1N;*=bv*Hc>vELst$HntlXfnGfPsb6>5^#{XQhgXsXl{$=a#1lfGGsXN?{O(lQWXcJi zho{`BC9<%COUM1UJ~l@6GkDaP@%}cdYJ8G8-u+#>DX1&fe}td~klk|8jbL8I#v`RclQ64n&??TU*U$i@_SX ze>g0Q)4|TFvBg0{w_MM6g+U>3j|lh{@HZK%Erl=5#GpB6ft=!WWeaEbdxYn+sLj9{ z<8No2jQBG@f<3<->OT6FK_mv`;7C+o&8d#1C7y`M6{}COdAyW)o(-KyDTR|y2!h(p z$J0|?B~1ZVYXba)bO@JHhoOESVK99Y%)JIjW;S*i^ypL?8o8GnP4q`&Pf9sWO<(Lc z6l`talEdxy6AzX@=2l*`-9s5QHDzZo(p_F0F3k)as7t_UOQ+-6X<5?_oZlW@4{$PE zC&`sS`ZhH-HroAUDxrkU%GF_;iO;8PeUh4;SsJw@=3nM>e{xSP3Sq=q+hiNj{We1^ zz;s??oW3k#l5jX!m8fL9f${U=hHzvDn@H|>@b}_vnbxJFeSV2WKvSf|7Kz7;)0m5! zi*{@DZGz}|ak=Y3I?Vmm%b3%Xk=w&?Xpo(vV3}hm!o|b3*}1suo7LN3am_|POcKGz zpn`Ad^|C#XKgEP6Lv9P8Ul=_sho`Ck2rM(5UQUOYdx^bfvW|W?g_#j#-X&zOx!Wo7 zvY$oSbP&6X#Y~(nAGZ(^Ztvf0-*l!T{PxJDWNLC!!YEwn>qMCrxx$F^J@s#)NAM9&G*JmgjIp#A+_pqT@L5|~CEV;l?S*^P zoc3u4-=`S1KP(@2r8ux)InO#V8W)!B&aAe6z+qod%d@j}4&m{QK$e5^cybVyuoG5d z%>1_9+z$WHSaflj7*Imm*;iHE{n=Xw_{E3}m6n*e?ug^Y>FD|B+p|ODJQ$cx)f>ip z$lv&DdDAj;CAO^wWd0>WKR*-cdUSBgr+vBKpVKC8Zqk-ogf_FSgK<1KTF!(hOAL%` zzCG|1cs|is6&@JQmm~XGa-%7nIQvKG4#q@e#x~Jyw~~ff^ljld%`B<=`LG-r@64wm z5U;ypVe{|yRJ=oN)8glEy0KPL!pU#D=QvIX;TF^`JlNQqS(&Lxh^UK5FuF}%!08dP zUV#b4=e7NnP^IUv&=XVe!Gt?L;$Cmwaa$V#_GnVns@XAbqfLST!a0DL_~TqDci#)L zpLcU}!KK#Uz2nORr$-lZhKebpN393_W1SVB!4M+ouf(2f8BhN-&wko}Hc(!Dw%e2O z)HVI3_wazThP8%9bTO`|J;L<$QY(?);V*1iGcdNW-Lmo#2)`P=OIdE|2$W7YHgsAv z*MBNw8UDKpaSW_HvT`6yD9DP6otN*hrqkC){|u zfj_%H`Zc4seN83u6o&LX=udhS@9IHtAZTivm|){{q^z}g(uI%t?maQy(f7$;Ya+BJ zJysF#L0qxZfBKSrQYiE?evg>fwR$ub!Lv~WhUJ!qW+KP4Zf||%%j4I-gC(B96ZfZ%mX{73$;L};l2soF6(l3Ah zG}51L`hC|F;PoDF^+cv&tD=uwkMn=ONB09m3WwRvk?_OEiCO0C#oyoh!iihqaprqI z=8Wp`CWR2xUYWJi;0e&Z1WV%4kFZ9ZoVhy8loq`EwpNh>nF6U zAG3{Sjzz)9Va8T`kc_Nog@5Ds3mZ0g_=>% z&k5QmW5Xf`y1N}rf@{|cdFdXthnGwXq;1W^&)OdMKRJ+Y$)%%WtGk%LzNfQte?nK8 zvy@Z1n?5FVRs8SRjdKZQccPEMlEiM?z`1Dm3T3@iIBcHFwmgg=CQD#*3gguObFo@ada+7 zQeOG)xgXjX3dauvi?gjDT0;4^bCW{EKTyXkLphz0-8dud7Ad{4un^q>9sz;u z3fN+3vMJLokm}z!ySn!FDtG`oUc`3FI}nfo1(sq2A|Wf_hO)D~VJ6qr@^W&90c?Vj zn5RLzn?5TBx5UaOn(NPeZ+vhxCEh=_G|&=iQ;U)jXF_HFELj#OfDz;OGlL zLg;$tDqDt%ub=c{Gj%TLnKJbtkN}4H{~K{R7Nd60yvs&0QSW6H369@k>)wY!z%>50 z+Fog*lUi-SBL#R62VOGREDPa6i;v=8=X8ZPvRgWN)2HKS*zQ=|tKG1NY+_QjNGM?n z!i+39dqRD=z0?jD>H~A>KT-;TKc!$%bblVpB~&TMFK5Rie)mwHzy3$!r(F;ST9f+u zEcTY#k_?DNertHRga@C;Q#kgIag%X&mu}J)uikR_HvGMpoFXRdu=Kq6*x}31%LaWN z+f?hUP_@IC znv(S*y_zVdnNNR68f9rp^246RWsU?*)6?`Bg`*oUy6o#{u*u-iV{MMlCyFfwsBsyv63IS*;M19lEc<^3u0NaUb$CPh z->>}q`E$*cE~>H?qvVZ(MQ8jc!nrRrQ)r*W-j=b)&d=kS&+{hJ=paoPzIKq(pkBqq zNHXy@$;j>c=J-Z_PWDqwF6aO7;e-Fe0v@yF>JwVZj!ZI#zprn`!>mToFiXJWaA>hP z?hf3W?i0$JU=s2Q&>3I*GI4eDo%|$1EU`P6^Fy$>7S1`nRR{$ zIM)YL;!Nh=w4sT9(7>(j>g>$SJ7v(4OGrqVlA5X`EiE0Zj`kVBPqE2k`}2_@)oSc` zXJyr4j|7!;qTKiI%|>Hdv23iY=W0q0d6ku{p#Q&G>FeA3JL9e#Pe5~iduxQu`ef$3 zu#c2ACQO;YsL5lyEpE(j1~)zsh(@l{O|R&5G%qhF_v>9X@$Fj}WWrB)RgB;3*LP+R z48AibMvQE)QAvQQ_r+_BN-v(XHWos*;zR}Ug2q}GW zWd-TP(ZFB^MbQ0pbJM#rJ6lg)9!*;;gm5nH+6?uNdS&xnF1EjC@ed1Jvah2F)?;+9?z9kRkn6aPN%CxJ9H`+i4o?+x$BKhO)RvYkBHVa`>8~L+j#sF|0#jM#}wUaFKxt3CPqdvJcfJosf@7KZd0<#Igk}| zG>e3p_0+A?7mhX#9;*0VGA4%JBN-SW!yakM$%E8CLEL(lG@hlO>(uN3=Lu7n#mQYT z5(*h>WExXng&UGM#XqQh77_hqUn^F?(&)@>v$8m+?a6Ps+qFEINI`j=pTGWL_J4)5 ze*%s}67m9mtg*6^mhGFOsq->2GO~4JF6FS-YIJloY2Uu-&L9@(9`iW~nORuS-i4_d zzwu1(sp)8RINVsNviLz}YY05MzgCHr1YJ=G)Vy!dd=`IJtI#muRK2gyA8yv>bw9s2 z6H(~Y4z!JpB&^aWV7J#wl&sQlwc*%S8g3)L-4&`3(%)!Yp!4e?*li?czfnI<8j7aM zMv&;}fztfe&8o;d*hc@eB>zHJ?FWCz4r$G_>UVO_Y^PyuLD;tD6BILrBFo#LqxgS5 z(@bE>gb$Ltg|k@mG>36C;jx%@5m75wr*@S_@}1cCalydH1FQp$dG*=?J4jik7@;%y zvd=dScPkGhxso>tlY+0)O`UQV#}9>kpp}%A&Rq$zS?sElC6WKnT$j1z^Jl{iC}4;0 zL^i266{#eD|9)_2NQpM?>CvxNL~qwvmOoZ=gGApR_6O0&I{Jnt0nO#dGZ3S2`~soW z1onNvY=DNi*?L15a2H*jop+(iGBG>GvYJU*=OGH=E8&{0^zjAv`Y&I;1*&42l>cZU zd|^2>Jgu-3lZ^ZI#~EJ&)z`u#(DW7%W5bCoXEk=VwsO}uH;%Tp`0U20$xFc|orK3r zn|iYY2*E>zJsbseTeE*$#8}8ZF-<4~(9{1_k{ZXe`)_+#lEZd}m%AduO(((GD=E#a zwzz3(YLdVIoEN1;K)CgX@K^@gfRr4zsh3Ba0G;V^dT%tN;u#9$-g1&+ISbfoKp2*NDGUR!;T*{VahP(gB$v&#qv_v+HPK_-2r7;x1#G8B zIlJ&X71zz~pga8;z>{tDMTqpBHk}F>>R@7G67o4msuX+KR&(NEf;34}uYz`y=f9Uq zeV?g3*{yE}#%z3ie28Iy?)EJy|55|~_k^R+*3}Eil=FwqSFp&)%71xZL9YnCf<;ST zD18l^FH^4eMkayfcOMH8et7{Zw0Kp?%Q@B@8S$<+R>%Ol)kxL#xkY&Ax1gT<(bf zG*4D*&`F%i223NN;*YBi^7dJ0H#do3N=!b>$Yql}VlFRTjXYx{S)Kte*|sC;jCSACxsu!Knx zW-vN_*aVJ#GeVW}u*ka&vWHM1%`Xp!%~_&fnOm$k-rM&_r*h!h6>7@iaEKAmE@z8J zcsxIJNCenD-)%+6rf{9VJf4!U8%OGp5`>vxX6*F4kRJ*S!wsxKC06T1K_Tp4-uVc1 zF356NR$qK9o6S}(+F}2DgpGyKWYQB<)U4?jl{)A;@}?C!nbWg7)bOhleLuF4+cMKw zGG_vV?!X9rYxN(?3Wih25Ua)NC!6gtmS__eM~No z$4XU(Bb^LXgYkrQ85v|a6msiS40jkBGgv;9nKu`Idk&GZUfet>=Rd2c%z+u-aq;oG zD@LO!8y@v0rJ6BX;xhBF6EHZJ(zZBEyBUYE&@RJ0eqkO~;a1@(oJ4uf=>k93jejJ| z_o$^sMIG$#w|~bqMkPd5MNHnnSQFdTproc27Zb~33Ek~@P6rzpw%43hBG#(#{Ne;$ zEsTc2u6IZK%4?zO4aMtns_)gG5JaFRE3CaIJ@0zO(UdqxES~u8X8%{V@+C<$+uE=|Sf86j95H6Dsi_0d` zrj7UexlqZO!OPW<6imc@L2eh42!Sk0$H?gD1POa6PdrbV_)+av>&^Zx{a%(nMK!hDr!G9d zm86Yr6hy>NZ)4nZ`}`n_e(eBS`?a1t4sqZfDki@HO;9EKG08F3>U~aaF)#Y?-D1UUi zI=AH_LYLwAba$2Y9H_sh)bFLa&3_a@$tHk6I4Vv_cEe-c*!|P?etCsWs3Whgu5Lp# zzXXk>4KsiU${5RdnKR-15Vg%{v z2%w}d;*xu6CIsOzsHA`NLW_Wov36j>5^j<2q(D$#3C!w=Gsp51Kb=kIC@@1=fR1Px1vW+&&{uQc{a_tDlyp&UNGBT1J}V7jM#kBe1i znFYo?r_3s@RN7+|ogAo|(xFjC<%tNg&E@5hbCmOOL2(_( z>MZ$@6L!YnO5U}4=jBnC&K^}Fk#zR;<>_Q{;H6yFlQARKsv;CPc2y{a-#l<9CXY#Z z53YQ^aLoN}CP};OewD63%VUDS?g4Zt8tsPY0Pi#nU+6RTjm{sX+vDF^&3m)n z9vui;%9mW%5FjpbWN(`J10hsN8KfsC4DW5Bppo$VTXPeKPU@40zRWSi@eM=QQ60&Z z(?VE~l3a_;EWvUiUu6E$Iz;+dOLi7`d3hO!Bel$nFA!6Wy*!`Fds|hr7e}14h}7-R zy~rSbmGJDnonIHtV|sF0IQa+HQcIQH5r|FohrY0tOYYJaII<}a+XyWFIOz=|h|3C% zFH$LsibvRj9SJoe7G6Ll>QvL=YP%hO)MDvv{rPB(r_89!pu87mPI0uU!ePV+%c$w= zBv5jFK!$i>ws-g;Hh!-6B^w(_`gxG*d(?YY$NL)^GBtX(51y8yg?Fg7midv4aXrvc zeusu-nAge;8Mw7y;T5FLEh{htWhx0D(;Dc7RPoEyswINWq&iS5WaoTz)yiTFmSECT zUjEMh{@oW}Z1Z@2Tl7y{4GljP@|cO$IhFJT|DvX(-H>~+jv@~s^YZf+TW5#;g4;5@ z-3kkZzqux>X2Kt$Z;|SXe|_i-%Vcj;hC{!Dk!!|rk!6~KfJDve0FC)Pp~5i-%&RNp z<14oN|2%gV1k$cW+Kj=hw4G0_jtG8~C|g*717`qTSm6AFUG>u zh6(54Vd3D^z;3BY#Z%!6g@CR4n06weu=_|g&yl4C!Z^q>tg@w1DI|Zu&qTL#x?k=_ z%;)wf@~kvb3wRVzs&%~iJoqHFpZT&&z@FH2#LeO8?;d3slcIKK`9)e1)UqO&XXNBLsiEnOD0roionu}^glN7*>dO*cCm3i7BA=bjeu zzEt1~==M7n(eNy`7xj&&Ko(0@ z)^tyoF@bDoV)Wb0XNL5OIHULp^6Qa3g^5oIL(u;oMWK$ zi=C|f)3iQ|+~41ip_cUz2zi8|j7~M+%IWg=`w(`fV6|L7QI(evARYlW?U|yv{Q@lf za)36L6ri=*Y#}mycpZ;atBujHuWoMx2!`T6F5~{H$v}cHC@Apqg5a=R4!i)6Q~N(p z!@em11x&46+PUas{?NC>^t&BGhIEC6g}MR1kLPBJ?!CO;4h#$k2?@o;DYdo=82eyR zQXc;}-igy?TV7d_7-9)L+| zYNLFJ(6jExs{^nr+7(P5Is6?eGxmgcF0Fi2%*V`){zJN z7pW-dZ?CR=^@j|)l8IX&-VycD@;KP)FR7iLQ~V|d6yOv+_aanBdLBtKMq-V?SM;4= z^q!q{cQTaZY08gvfeHA@7Z(JsZ>O@dvMw%cmHkhl=TM-kxdDHZkL%9kyh&4)J8k-L z`BOm&&F!#J02;d0?m^NH!wyn=Zf;U!8w&v%BhqkSf{{!xOg|b)u{3x{NZU!tBW)whu|7gWR06q-oz_3=V0U+S zeLXSREorU>G#ScDN|m;Xm}8|u-a06Q@w*kxl!|aTxLO4vtG!qI6A+xJ{!3*rwJsyS zKdQcx7R1EF%jyaK*Tn$=;wa$C(pOhkU2)Q&v-wD^2X>D2u|ef1w15KDwE-$C1gTYk zDzvR^%>`bxLHe_vPksHL-JPO$Ib2z&t$vmn8!2RsOdcE@ zEK<45tg7cvU=-b)ZtfyL$#MyvlwPY7#7$Ha0AAyD*fj%l(Vh(57HJ19wO+_U}d<+AZ$gI-|R&f$4Fe@p_gCZFe z8rqG-b)-_dE%TdQZLG}_JJb@6|yt9TQbuBGYlF4GpRSeMFq)#Wk~MKVl=7 zCXV$AxSG+FDu-3*;UBluzk(QVUE0aX&WhyEv3ZQ)? zH3yCoP%FNFkrVLX3%d_8Cxkt@&82$x#GCvWvCD0}{-%`OJSSix>=n>_H>q6!b>{2W zQS(wn$FuQF5%aP#?KZ}Mywg@A{_-p^4LwU1yNTx2lI8c3e#fYjtvyfGQD!6t*2XEB zNexXO8m&q1ZDhHP;o)2xT}VB@cZ>6WW`J^uYqCo={n1?6T7MMzY1_XS zG<2E_cyhyYF~|wY^XuzWc9T~fgks^dola^Qzw_A-BcnawtlHk$v5CQEVk#5(`LJAX zvjqgWWqqV=Gfq74{pLP^`O`}YybwD=e4*o9siu#&_h`DHRsNi0#tNW*m5OF^b90yV z@p2Yr#Mlafz~>YpiiZA$qxlGsOa0L+tv^$tc4+Z4@bLA}4F5MMBv7;viHVn=|9Q4V zqZnS^>PPY zK&I5@`qXj$`&c6X^!!|=+2pv@iv$A`5JfKD`LosI*;QE?yKrG)0S8bhE|-SD^3)ej zG&MB^%%fo(Z{NNJQjm3BQBl!GME39_>(KEMb_;JOZ8IRM8f^VkU>R!Af#LNI!U2ev z8X!W5@%OxjtZ8@x84>YlrU+-*Xx|o`npC0JN4iivGE=1DdAAV&*5>%QoUH7a0EAnq+&VURO4<{7L1dj#?h<;_yQ?i0WvEpI)evf81!TpnylV4MLegY+! z({lM&(@KS&c(u;yw|Jbggm^x!C3Jb@l#VjhTH#^stu%B!zVoo_;qUR7Ibv4XS_`Oq zc^*ci8fzLHT5h1ofpPwyFKzb6$+RlJ*BGoDh*U1nji`Pmh(@wpYem|abt9lIs8yOC z_+&s^=n@;S0H8c=h6s;L1JO*bE5MSpP5{??)Jv_L&xM(&}?Lz(VLZjijEIVJw z2Bo$0tC-b!ZP0tKMhm;@kbBf^eLY(#&9N-K(a=U@@s`RBZBI`H`V|6Rx)YWG;Jx6N zk1!Ro#wOQ43u$O5(k3#I}l|J_REYCVywy@t7lXI(|#d+^H z<=`L{fM}Wi${&L&Przx}Pi${!NQDsk#(CK~muz-;sF!;1;NYN`61&4&HAP8-awIl8 zwWnq-H{o9VuQyrYIJfj*-5A2Rg5_K+lS?IZ$cf+i|4cT3+4bS(c*x^343>cFRX$-! ztMx|bKn!(JVWAxOjYqd9#-XD4H(3^LnfJEUYzk}3(Tv71_q4?Fk{AT4o4e#8jfwV& zq=Cvp&xJ_SrVhr&G#Dp`b7iL>kW@7$@ObL^uV}(}-O}^relLGBMzjJ{gNndv`zO&@mI4|1(C7Pu^HS+n)NUpK~>jilk4nm(U_Q3bewWOW|5P6HYK(>H`uSehIGK%P4j zQU7|1zAen0uX}ACD1xw^mK9%XynqS>uJm>Jmum9v>Vg;>vBxdoZ5hF{TkngA^(r2C zJ;I_1ScWVqzSJZmzK$#~`|Hx?81oitgK|mebdCewGW3ma(}%S(B6ReNheOXE{IOKt zJ{g%&z`|-d>#PFmbfZ8zmFFWH8ylbdv^P}Q_j>E|zcWS6Q3le#*;xcUB!C=9+2qsf zc|Vly`FyCo*61)~>}Ebs9wB|dn{4H*iExxH7RKX#$6SWt>nr*?lA1PSBAMfS?L0f< zHqFQI?b3LgXWK|JCn&D}NdDcy2ry|jcJHZ;rSZENjfHnnmn9p39TpESsmhSwK*!CS z8KrH;B>vYx;Wb>;}nDF1rBXJU0on8${FTCx`sz+ z!@JqrUp-u(W^rCU0qPg<@U}Kx$NK#US)tE7E*INCA{=iM%ND9DMgmAz6Ep!Fa68`K zW^~HM)^>J!W?rI}!#A;UJ2Ik=01};X>K@K4p*!+{calrLAGO7TT%CX045OBUf&!P( z!f;nYixc`Ye7bcP*es^OOMAB~SNAoQP~MM4P*9M{5Z??g)tja(5o8NYCiU6%9J3Ms zV;YT{!EOTHA>p|@#19!!iFerc%w#$Z@?Iii^|@hxVCXd; zXn6qm?mjug^R_;i%mpNwNNP+>jQlSsGwz=ch=&+TweWbwm_@zNKNxSI+`5na#SxW? z=fFPpREt)E4y5JY*n~A^3|4>U>(jMUu!+)SF90;x-0Yfp2As(A3WM4+!l&!v*}(q* z#GoHm%`8x{soedKx1K6mT3&}RRT`c3HhSklQ0GBXUtL@pA|jl$RL%i-Uc}ixLtl{{c5TCJs(jOFQ)qEL65QqCs&2UQjLc>r(ow z#KRQ?T43EVT3~$8(?Pw97)Hm!>iPX)V59{RCr#xq#H2qROqpsZ=;q?+RDM959ULDY zpPYmvKvSU4d^DS#E?Nog?Br=kL6p~;EdK^P%dQFUvq20{_f;HUGSzafN5v>Zb?|b7 z&Ew*7hAkt22)70*DK=$0CZNlr`GNf#n@r;C*WF`$c+A;}iHh>^#x}GkSC<%O77{@q zFd7)&0$;ysRnun|2_If#UOpIzHshxiGoTj#J%{TH)_V##*dTm1X zH~W3nnB%z%`r&Lz0BmIgPzoSj76El@z7Zz6UJcZ**@iomVHu)x5-H$v-MysMfH&a8%$fF*KO@zK3X#Z|T9JVqk<7mD3w1Bk{49vip z65X$>4W%%7RZo$+tv5-XFk?GkC4%YI#%zUyk%Tq7lK?4fSSB5}NiEO!J2_@p)0v*D z@1sE-DkUZNRPA&JM|N#(?bBW3LPBqw-RVw^=Xbl%*Cdw+u!scU5Hl{b?kNnWk8Mpg zJrY^QeNsv@FjX9wrPTFzu-J9zazEC!)%r*Jf=d7N@`;RBiL5S5AI4BmjXpZ1he19~ z*GhrfI}u&T6z(b8yPG7ZyI2;dGc5|8++P}|Q~DAQaN$cv z%T%L*HIc1sJXea1Q6^~}vH(;bmgq9g;kHo>KK}@0)JhMzK*!I{8Idn`d_?}R%K-#o@FD6H6Vx7-JPQ@gl$X`oZFNtRH%t^>V6<#*J8CT z_|RK=n5se1+AqAT5C!pS_%QA**<~4?Lyp3FC*JkZ|2mr~j;zC+2Oj%9b8 zxz^_QF~5s$MZy@Q<_uv*r50PC|6zwmBc`XdOdqBNKxL*Y0u30P098uD(QnmobG{Xo z-t;4y!BH>o;R&LZ}C8x;4r@%=gZCoj0$QmE_jxn10mIb;RTe)M-) z-plN!H_{4XgHo_2zplG!_D z+oF;iR_7+$zaV5Qy#Pn%B62L}B+op=0J&h10KaLO>m0ocIp{gCFv%)@JGI)^*>}Uf zD$@VYLnHte`R}AHe$^ zD6pVI{Kxo>ay|zGZ^*4nJIC{%M>3~X?Z#pdl@IVOu|(G1-BE%Xv59i4_XmXg?1piB z2w;Qag$xXoEKdxy$d2HXp9aOSP|tsq2UMiPDkqqPyT=)JB$~M0$H~xT$a@+^U7T)&S#><)pXTe^j04@0l*N~*+C4Re;pWTn z$2HzfPyBj&AZBBdfNbHWisO^OXArCM$Hv?a`>eL=bQPre%84xO9$3I>oc_lxUaSR{ zb90>4xUC5?&Sy8Cb@qfnf79|C^z4QJmf0)|RCIJi>QUyY(y}rufR=!;38Xv(-(Mq> z5DdJ4p1WTJlEe;uT_jtLy1N(G$ssv8IT@-Pk}>4fyI!Dcl8#Fvr2H(FXEH|6v2}Fp z{T_&R0{3ur(539F=DOrVq*I5Wx{@ITQNct1j*^z9-d|LoztR3+5@3gI#2z6bk<#yI zRYW>7<~HVt9B>4^_=!TR9igGaAlO1zN4T`Rz5TRk=E*=y8}0ULn99{Ze9LluelBk* zm`-MpCoS!cz#AP|PRQ$L0n$}}fz&XL+vKn3P2QC(NrQq}dIdN$=1Rf*4FTO2(33Go z>vIxw$Q_R&6G3Jc9?ef=Lx1Zi!Os+dky@LYP=Hf{`v5T_WBjSVe_=K*lzvd`EZ7yp7=ih6R=sLdyn$edYUpJ;+tjgoGS zn9EJ*?5Fw>UiBKl#trfzI^EJz#MvI@fL8?zjtyV5L;wiTfyi$i;gxEu08k2$rPtEZ z3g?9@DB<2FisiA7tm6X>?Wi`Qwe!Yqm6~CDiI_sPb9F9Kz8oj%m!7gyN5)l$!Qz$`?61hd=0q7*-(2>e3FhNj_=)tKzctXafTx zZgR;ycCJ{>M-8|keyrwxm=6=RK0}37GccfRGIVynYWFs`0R~&PEEC{cDHSUYP4*!Z z@o&$K6XAaa40|DIGAqUV9lmKQ((U2Y*+9V4^mW#3o>uDYr-MH+BnfKjXf`c+C&tGN zCRjj!>u$N$KGHxrz}nm!tMf}>+LvYawwug@1C`KtN|=MY0vxHP5c?78%zA@bxYJqF zO97kg&-gp8q2fZw2ZX)wl?ZBTYCAK{b)3DOAX%vlgDRuGjjx`d_o9cjesadg){nWz zeaGZGdE-RAa#PJ!(UJE?e zv5=^LOK93(m*8VvCdtV?(ITlynhipJgcum)MTqd=BK&^yau@uO*%JE8qSyQBAa;_} zXUTJcPGz<5@$Rl%fJ`YZEsg$7XQT+F>9s@)Zs~`_>A!vv1{pH-H_R{?Dx@kZDu$d; zvj|9jA%nH>>GQ%G5`V`8|IzzJI0Rt+cw|6~n?~Ru?u)lz2#01&8f?c@w%_Q4!d>wC z&8*`s=_+it^pm1EiyW9%A)fgO3*lJ>1rtY*cshFpPfn){dq8_B~EX`<4t`1dE@yUWnOFpI2L?<$g?#pq( zHLyW+2Vq#Ad5$B2FQ06V(_8#~k&2 z6s3E3k5=wm__<=0Dh{H`ehw~;`z_HZk-D4ibCne_?tQ=x%Zb77=VYya0&4=RoK2s2 z|AfuKWg&?;-6@|bqUcC4=_rxdcu%dop`8@)O?<~9-jw*3)!oLoZI@JbnUSh#1E&n{ z8|m7>@Q%c*^X~vFyfay2lAj!#Asl{Wtt8Sse1Pzn$5ug^xKnVAgx~X9ztqx_@<}Xg zmXZ#{%&0(uhVt>|zj`$99^8=Lc99yviyZNX0)x&tS{tB7rXjnxlO!8_{EhB0$DkNX z6CL$I&TkYgfb++1oIeT;QmpRaybyWg{7Cbg^FKo2jsSU~)t=Rq<@|K`T*7h}6vkzc z>uJZVK_}~o*p1KSgeuTT#pkA#BKMBea$*LIqMj(GeM)e-0!oMF8TgPWPY zCBEI=pW!1=A-lxTqUnsL5IuCszfyaeKt(fD6-JynX>VvLF;HR3wU~A92Y7bB=ip&- z*U3?CuPd;7%8oze&p^@UV`KlfK6&SZ-}*%g{|`8pVd|5OMF^Ku2#y#p!li3%m+!l+ zyrw3`+|p1fM)*`}QDG129OJFU&RNRCZQm0KiA`B6-GnhDhG<=Kjrib@eX~ZiTB+NTSuR;T6dCwO`A=UE(z8T+NV-B%Y?XoZBF2OOQmCCMn+m(uW32aM#Av4nNGOzW^`4<|1n1Xlr9zIxm836%( zK#2ofARR5O@ZNA!!0%7u8BE1^^ofb^UEvM+x@awrKg~HbfHz?T+t4M!3!jIVS5K`U z`-+E#CNK_Q%?btf{kbv{jWTmZpxNoP|9V?YxBTboU<#%Qj<;|g%0Q}XMEPA55Ri=j z@Yy5wn*m9!o)64V=*w(ZFOQ(fu5hn+{sy;`*%j62fTnbVGtJvyKIAD7eFS=lri!Gf z4CfYyql;sDBqaD`?8@)3gnm#V`&va7POp5|u(*Kbva0*Ze1(q^3L)1U*`yB$-}_&) z3V`Nn_IPgm?r3jsZHMtJ&i+Lb9p`f$@Rh@A>LCD~mz6roq1E%B(_J@Ic60M`Umq{i zDLjQ1HWLjmBlXG2NpT?zW7%JCelhbN)BwG54tJZk? zANj>bE}$d+Hkk*IO-H1>u8}|L$96e2;N0zM5e7w!U^NiB6ExqHJDS5Ws+%+Z!Ukj6 zB95Wjql}i!uSm1$|J?_In_V&uPbuy3?G$(Oa}p?EsIsX|1LpoL-xY<~3S5@4#+A%z zNlM9&V+8mnfD%zvRaG+3uaEkVJ6l%>cnwbV6H*+3$pZOc1_ktzkJ1(gNh#xE z`@(jJi4X+4UPzbUo-)B(qUCB6a-N6??an75vX-1eNYiK~RuTy1PN7L=Ytf2`K?d>F!QxBqfwax@bd87_gd>(SIp3_ZN2BIm|=cOwYY(HJyhCIJk}OZ5O*5sezXSr^#^J? zIyM{q9b@JmNA{+MR;H#5eZzYoQ~!wdvmry}wrjP>q(PRSEvRDv*se5a<$LwpdnZ4C(2=Xo@D3W8UC&F*QiTQ1 z&zIJ(kqe68`4TDP1Ba})`IeYO&Ri+u^v{Oy$p&)+%~t*Ad@tyU8?W7P*_-_Wg7=D+ zk6cdQ_49;h2Y@2Ry_~>pR-)g_OKg;x_oM)R&(ORFOyp}8elS2!@p|zh@tNE3705<&7Hy-VW8jm;@4TGI;+wJNx)L)7LD6EIO`S?1?E&5n4RA z@LEJQ2tHB*t;x@@Ny*5T@jDAx%X$*l@OegJ5nP4bTc)H&8=h}a z53$9jxDClL0IkeegY_!_?(~CfO1_O=pW`Zs*nD8OSJMX9UWKSV(aFwKXg_%kb;>(( z?r1kWvj-2b^cW+)OjTOxm{G?7y@L(Q7xTvL`&u}Hjcvy4LSgnXIge5re6AXWkiAno zL80NCVm1?*l+<4{wIOY}8*(d1{`a?cVh2A4(Au&?_lI(;CBy@yeRjRY14j?0CtrQd z@ZF4hg)m-o6BjZV7!`HV88v@3=vYn-7x`a_#$#M;Z{f}JtkkYs02WFnp;!?-u+3vD z4uM@mo$trjC?@nPc6x1EJ+_QS1?Rt>@5-KHW|ItWQ!1Q{#Xx+k`n*`)&os6M7Def; z6>3L*+$V;%$yMSH6l&_tiP&+4zCyp=M~)_)@Wy-hmrbJ4RBI)k`a=#+M%fnkO8=DT zS0|=tndFGoh6yo|be@2?#4Eh{5PeF~r1+_lSf zQ2yN|>Au<@CAJ+SykLD89oM>F^5x~Qk<$U~R;LwwUcT$aqB81H2ahhtd4D5(=NM)! zH^%E(?xIHQ^9JZM`gJ`anKh% zPqqs2w6HSZ3{uoGA2 zWS&GO*1prOvWfUAo6?QdiC&^(lbUW~tr68Cu{V50wQkcteX7!%GBI_7-gNQeRb6ez zE@DRUelgI?@3CD%Tl!N69yzANqD|I{vz_09v)=nRYOBNS?LYD_y#A0zhu@J<^RYjw zG-#|ZLr2e(VGO|UyqDKY`H3}7j12;XSZj}}*`)7$_3U7Ks+;-Cs|#oOI|{Q>SucjKIa%Pm=CNN zn0}b@>Z7t>CCN4pMo&)JkXA+dFUgjRt|>kB5IPLeO!mAQ+s?{TNnW8-Fq3m;w(}k$ z>nl&V)SuIV%oY24 z2>x}+7;VsKoMQG$61ks^D_A)xH%^aHPJV@v!hqJ2&5A|45dBLwj^JcqDd>EHM}7U% za=AS{>Gr^*z-{&*)k_Aliix*j-Vy^3?*Ku>sR|;Qeh-AHK4iW)_>k0;wfd;|C++%d zi$xc{AE@Z^SRwkY~-Si#ChZLy!g+ri8tG+1fz(g-4o1a@ds}f@g2}{aFTDHhI!!& zYO*(JRxNSf*W*K=Ayev(D(DQ$api%ngp=0(05+fSDV4~<@3@jq5nure`G zgF2ctV{Y7h21=Q?UjUXXcv7GuasDJxmcSkEtfb7_8lnR3@~Wx?Ux`M~hh_1Lb&mxu z9WAInZ~wDw_46`RQ!9UQoER2{Gfu+D#IyqYAX#^{acjN`0)SW3p!e0M9%H@5KHA9j zQLkFJ*{$$oT~3#jO`FSJn;h$zmbH$K4*YyB7bgx+@M$Fm;-Up72M5C)Uhh;^RvR@Z z(vp)$CMVn1k@{IbnI3rVkkRWa0tM#AR`2$$e^DACQg?lQy{A)YSrhY!fQ-xodRT!x zbkffpNoW*+C;B==2kMWG8xYMSigGsvppaC;_(-5KvFX<-l-^YkC?R!O8@O7HKdkHK zGE*In1SO?vD|%K|mNB7%KqsXZA$j=;=uOELD?)PKAi!zZBtjK^@L;;deu^q``Gp%h zBV&y4TBI(lJX!fG{r{RaA=aEP7FvA`o13&zgw_-lGsJlh%{@H>8yg$H2Kc|1F$Y*# z!0C6ejbLK{H7G5xE6fb`_AZ^#O0Wjnvc$P?aHi%~;JRd&`V1j6`M@M}JiiA*s zri^P^exQ~&oyO%%qR7lRdzYX(+$eKxgGa*O|BV!A(eF-GcXnjc|lU7losFFYe7XZU^2jlFKjNccI?~hFg&>rmCS(7uz1a(W6O3FV)<}o@ZDeO$Lqt zyQ{4c@|jU&ZTIL2Gp1n6Kp7eq76ybPpy^RmU<*$5_F_7+?TqCpAMWoPI}F5tVrL~w z#!EAB9Z%z1jIL~1gO-uO9Xs(D`<&1AW(jkww#U8jI};KSG5wae1f;9S?%yyon57Do z`54$3#60$>SYFJk6R;D^qZ|>KkPB#7?W16EoIv){&l(xLtCJ9ZLWHOzlaZwk)K;ev%a&fI zGQMD6NT++PSY*b@eSX+8thIc>t*(z{xZTu zJ#qy95W+x!*gv^?YmMx_wY9v5^zF-hQ-F?jYZ#({qUF~_K-sPZFUgU_7E6MjPum^m=d5=yFhaBc3MW z)7$)0GG|i^)1L!!Nm=x!if`{Vm-jP2G%!1B4-b-$`p|D|{=qMtgO!TN(lor^w4TDk za^6}|J+LRfmbtf4 z8i~;TxM$0kTiM6>4Fw)8C)3^GNp(+fxa%uW3h27fkU*EV<>tt~I6Q`({$s_CEj>1}5i+<|er{=#yw~8M|dty;r zbe|$D|I~9H=wA!-n&*y@K|5yo@%GattQ_&^zX|jPcsAd08mFGuh<&fSwzSt;O!^Gr zpyS#`;NXMuN{h^5$vxr@+gC{zor4NtbZlfs?6-B+G0Dt>xNcFSt+e{wde3^pvvD{+ zUqnI6Rwk+dZqakswcdnzyfiPzmyk4y>MthE7!2b;m!0jZVoT|4%_fFJbZ;>nh8ET5p#ZI^RwTnYqMT~Z!5ZWP%BbsQDGkiC!)P)y~ z8EcKo=k}l7Sv20jyM`9zaV3#2<&u%i&)faiE2iplm}`@QKG}%oeNc+HK+*6DMrt5! zMc5|5`}fa7G{eD$gG%7`P5~#BxbQ(xVYGSPg-s`E) zHZ2`H-^F|TgWl7=H}NB$ClKE*zPxfjI7jqoS<~{b)m5IiZST-K#{|hWwslFg6n^&* zd05c=ohx|OS}NZPi&i`BQtO2$aWg<_kog)(j%0Y!;&IS)-M#zhJZVXV`8jQJl2 zFq4jfDRa)v#Y$$!aju?q%2J?6pF>qGd;-FPf~+hi%eGmNHh}i0y{#?% zAE7J&NY*i{LNRY1g0mX}9= z5gZZGt=rzwRlX0N0-LL80k+rC&?wvk2gwE4aL~f#JJvD|!5q%WDDB_?OFs>!Su+EZ zj-{m~gb1Qy|kDR-$(P5`?b&m%bVIzV11rB zSz~%2Xh41YjWN;gAL)u4+UJ^w3Oz<<>`JdlZm?aiPVWK&vKVZ3$KUG~gB~(w8Y@>N zP1=k2bDrdjaVVzEU$(xzaC;(I)f%qX%*f>ze?GRO*dHxA_|FpPK3nXsNNe$Zn_*_GGY zuUM=H(kD-Oi3cs_5(ivMc&pa6B&vLMUk2E}S@Utft<`s!E0Fw7oqD@zIfEfa(oX$B zZoC$!rs@*tVQ2MT#}SORx65c&qgtQBFkc?m+A6hbrlBwkrbnI2#^W;$ycKH=qbudnWrXd< z*+{h$MBHov6C9Wi$og;PdpwcfE`biz7jt#a{(;2cM_IP+#x{MeAE0J)i#shYWP9Mvq?F#wxC+57yv4#YRw}z$&$TuIC<*hLoXFna&GO<0=gH zlg)a||D=2_RELiUX}BM0o7CCjQbko^vDvWGT0c|s+ithNqdw&Ol?=hjb?60jjUrCI zc3N2t1Ydn}K~mwosy2_jp?U+=L<`y)YYpLPD-K?MrHhL~G`~Wvvi;RnhM&22;Vvfw zyJ);(miwYlL^Dv)q(y^Jhc0H*4Q%b~oaTpq+mEOHQKtBe(JlceK*p|b1h4#eN-HNx znC2mv@E~Y+RM*?D3dw&uIP^%|<+;qy;!f1Amdh38YW$w|`0b!R{&oKOo*xfa2WFx%~O3fJ= zrm%B`U%CDG92Yn~fOhV9d;Z%t?hPGn?bw8b&)b8zPefT+S>e2t3dY9O7~R7LPx2UQ zVS`Z2z;`EDKfKlTZdoDm_6=A(n|AvhAs)!AGn`HOIIzCJ#GB*y;SSaxy1kyjd0N)h z7Vh^BbCRlO!}n|JeutBj}{ULD^iA}GP-s4xF3!WZERp}2*ryk1|Y}#)p636@) z8IO(qpzvdcy0xE1{Ke7QU{bB)YU!J~N-MCB*q$s>PI~^^lvL{4(=>$TQWwE~2oIa} zIq;u`k_0_KT)EO+M-IMS*n-#Vn9809)0b6tZv-5-YO>VE*CL5$;_||_!xE>4BB$m) ze!Z19m}T;0em_CjJ6N~Ma0K1$+AGzm45IjRlq;FO^W%pk48J1x)~#R1*_Sl^wC^x{ z>2^B|h{jSMs?Ed09a%=OfaI1oYuCPPHhm?MakG?ab>Zz)V<79#hs>g%AsOJO=&eUF zS7;E%^s!%N!Fq$Ivw=16Qv!INZ~tSeC9NCfv-Nq64g~uMvz$YwQafKJ(5IwGybKav zDBDoXq5dFgzfVVUzh}7F9vBKdA^-2g9Uu+^ zvCK6_&8T<}3-HyY3|~9@Sq0=Guw@%Y_wv=TrgIV#X$uk-745)y-xJmI^9^D1@z$!_ zLMxJU*S$hm0$KI&cY z5`bkznh7^}mB2c8>nY}K&eEqI9#%7m`CHcvXw8C0BfY&-194mfPVXwL_+EQIToW<& z0-xPC$X{!qhfq=C05 zS;fK`G-$$%nWpXrULQUGTsUC5_bQMwnz&U%->Tvdci+F!aK4k#=X5{xP6 zt|bXFfQ}#{0&ieqOg4Y*=`(s+IXMsJ9$cx+5mqM)?S1ioN3}-(INSK*2hPGprS|ot zNo%4*4oQw@s_uq_s2JjVH=fI3d+$>T_JP6)X*bBvO)8oG$*}?)iA$`;q8cfb-KX`&|aHJO*7? zf7w{^mG$)2cE+VAMr-pq*J}6w#p{vWmNog_RIlp7!txDx+6m5}i5Q>=7~5T0>3l-t zA}%JT?caTE#+V!yI9yLmiEBLA9>Imq0}ZaFAQm1W^oB4O^}%a zF4+cp+zLi3bYGGe_GDSMaHB`^TE@Pi=Y4M#4rD(zR#xK_^1v>a!7zGm{PF7l&eJAz z?J5}V1UyfGt>EJhV$?_za`yYeh49RB4m94jK#_^f&v$ntY3#4 zplky&{-9K##M8Bs>H{yP^tq--Rq`8J0`AxUP&|@LJR+jnw(&EXA{Y!@$?aJ@Fhh7T zBLS`mhnl2gPi6qegh>|(g!RGW@WF`$oqp$m%fP|@gN$mK7Wh{PwltK>|0#oEV_|o9 zFm$kQcjkT5*8rjCxErHRv17ycMNetJwe=bR&3P?oPXoXBy>3WiV&c};7FbTW+y!qd znVFliOCrwc{Z~tOW#7l{z54O%_n+nWnplW9@Wz~Qd4;CbKa;8z(i6_F_J5(^dVuTk z>L}?;2XW5Et%9>r^f#%#MOX`t9h++;FWbqS5~#M?@5<=>(*3<;FFcC%DY^_iaU%ynr$>Ztsq=Tb=N9@UEkd8wuf9buKHcWAr^lDX}@kG)w=<8j%JEc zXuk~!2i_jB5mi(b8h?yol`NK$tuC)hEz%3qfL+tQhna(N3e?T$`_ZHu)v4wv9hUNH zw*vS8kC6<25u&?H#$?D96oB;U-Jc;NRU{*ysH% zUGXpMj4q3xx1GlP+#YX%^5*RP&KU)OAK9eG4rkL%S=r`J47UtNOeY7()gKrMdnTw^ zqJvJW77JXCe@At@3@ZfJzr6CVYENwBVK!n}lCgi17nzdSZ+D!5<)#(tH2b}nkVvcj z?)s|5XlVBRE9c#Ni!+|3%?Q*dKKle(Ln1yyy}UkA{}3%U84{8EM}{%csf0DGW_`ca zYmBnZ3S-RVKL|yzniiY3wL@Jafk202XeWXBIUas*Rv2@-LzoQNGzpMUMCU+p2o0-jMex&7LgBSifG^RW6 zYBub)uOhnLmSmKg7<|#=>Q`o#Jl2yQb>g*=Bxnug9&eJ!rzyT=JQo|QEh7vNsVU(9 z9g~?=_Wb2NwrO*wC#GQzTi8SN_~LDM7$*^SafA-sB?b+D#0BJ&78m%X&UXkamGH*} zq{6%chV+KStPS+_lu9LdKYvpC@{*KR*f#Uq+ipT;I}%|(w~vQB4#v9p2KrtXw|Mb| z!y}L4PkCo)jm;EvJNt0}(t2BS5qeUx{Cn78_J^lj=+yi~)eY+=1WU<5Bpz4a{(f<$ z!F!Jyo*zYlU+(Nu{uRDWS3yh_BD|&~{pU15nJ1|E0wWuUjEv5^$K_IfT1+xBG6D|M z*K|%ykQK1JbCRZrJ3Grxc#gddF87eF;kd0?>4Z1zS6b3^GMFUE^VK55?V4}R zN-4r=GFj~Go+kjp=jZ1TQ02^F;w--2inBp$$6au|6Ht1}V|?V*wyyJ6^#(~6f==HD zg7OezxzX&0-tv!~fqtrY0r>*urFTdAj3xLl?t({e{*ybFrSYIi;*1zxKAtcVe1SyH zYpLYu=m(0Dt|HDNhJwHySu$u5mg7FN^LLDTsHCX7xzW2S%HGf5S z!qSm;;{+UpxL$(ATp2j^X4?1O4nPOV`TR?dYiTdSA;|)0=C6+THwZ~c+~W5tHQ>`I zW3{lKwY1GaB1tlz4bLN2Z=#IM%th|DI;$^xNGMyLGYkmz_Ct@xvAS=3XD4`+d>~m9 zCT-I#<7oat)0kn*aSKo=7M2m`jv(kkv!Rb)41V&Mpcq=U$e&v)9d z#(`1&o`(_ySn^6=#10!JFBd(-<^2zKrkr6$X$r)IRf&`0qlcuD*UT3A{uHWGK!85+C9! z`=J+cx1>FNg>#eoOx1pOKa1x10+P2EealXN2wFLZH@?opYwUafGL_)JZFAq#6AcU8 zySmnYU(GM_{@v(6V|ey>6bwZW$BdLA#4VA`V#1Zfd340%9rcNVcYHZwCbHGiR_)bh}>wNg_i1 z>BuV(?-@q5PDG!NTtj=JLlHrB5m6o@!@y3E$K?33=*1&z5`c-IJs_q1bg$+4I||;Q zFLn~}bu7^ZD}fTRBSDrXAt5o~NVKp9bTN7!o@lx3kyodCbMK`SU<vkA3>_v{mip>UQdwimZVKPRYmpLYypTLu8C zX1TxtZ%|p}JTyCBQmcO!8iQaI8i$VAZ0JTxjQ*5-N6B;B9v2lBHsi>doz*9ukWT_C z;-dsE-zmiiJ-oUbh)vJ}$t`V4f~P`%Tbi=(pOA5j^-M=atk^U{v+)e@W!{moVpl z{1X4gSO0f^mEjAb!=KHk-*GW97msiGBD{fxLIfSA6Jo1w5@A^mZCVO%Vz%Q5u|OLZ zoYD+;>(BR6^aAeaPA1F<_Rm$>onO*_w6O~X5N5>P3t6x;2G7+SM7%f0ps(r)3t2eC z$gn^O3=auWeDJ{3>IXcu2r9w2FO@iTbO3pqhoghwqIDhGdZX{5Se2mG9$|5SG-l(@%dOsQ!;d9CWTXg`W|hXc@ia7Zf}N)ic*p)!w&$ z?C$x?HNnZC;NTHBhvFb@)(fCZL_7PGDSw4%hrwE7AUZ1QHpXroo6gSGG&>j9)1Aq3 zAe=sZ0PYgJE|xp8_~K7gRTqBz00{xNyQzPwxEK0$d||K{vaz{csSv1pe_cDx$-}l z$9Cec`?A98bT6Dc<2JkwO&>te6ci(2IY92{z?wB3z}_}D|BtNoGaed3<-mUDhLf1A zjNi`?Uh>+=Q6)cX>7A*{+Pb`{TC-mAa&m2eWC!bY`S~FuB9v0F@$p}+ zMBN5x&KlGEa8S_K*Z0#EyQG(MNxL)$JG+GyCzULZY3Dwu%PPkB=|27eee-)W1yw1Q zgKIa8jONJQN;gi-30OTAZ#!A)mRZISA(+20( zvu_3GAl(rI5a}+hWNKVOg3!OgcKl-D>C=IMa(zWDIb1t&@2RexPX~mDgr|T3AQR}% zZdr=tz+D(YLDaSmUfU2g<^dK&K>IbJ80Qui5z$V%B-<*ACmp>tcZc4nad0HBMPR7w zpIz4koQHbF&{3obYd&B{s~H;(fHb0`qr*b<(Jw&JOSH?Ep!?y{-5Vn4oV(WM=HX#x zm4h?XotMX|8T76Q94#rlj%|I6jUh_xnW}2!_ui042L~ngU~Mv??CK?ma9oRyj9lpJ zD}aotrV_M0`G4uwN|CT1SqNZ@>@6>&Fp3cZ&tejsz!$?%A?iTiS{#wUWd=zFQLVSJ zJhY274;x4~egMb^_BpAMWy$%xLz6(@NG^Y1BM_MH_yhf4ns;M~is=8$)p#nCsSjJF zSf=UnuW*Ac5px19@*nq0!gwTC1rz5C%)EjEHa4~ulCgy_epki?L&&k>zHM^>5X%0b zn$-J1X||p5XNa?hGLg_*PV?W0w;O9~-32^C_0DfIug#;Lrm`-K)%ajZCm^pg9g1)lwY zkmW!E!ZLijSUn&7)n6k!vH&IfgH^Z=ygk6XZ=+CIB+RgxtaVC*;3|allPnOeY5%vn4R z-Kx(J(SX=LRNjvm)_?Wtl_yS!nEOmS(xaRP2XY`UM%+?$=r<{FI6B2nIQ|#g$fXz4 z<9=*6DCXuXTnHF-@VSgCpO_QgC<*#46kjY^)Du3LeKotWMeQ$jA@`RR3p3{r}4Y zdJlzy+q4r(r^7U=-R8ex4yH9y@Fu*^gSt{u0_!K<+Gz|ctK7wo`>5#X-x(Jd7o&j7 zy8i8Y%Qf*AbwyEvN1G-6h6sE?XVp@+4_c^YYKdv{YG(dabV)$s5Cu{ z=XlXl6R-89pg{E5ExY7ikVQT<(gvTuU&q_mZwo59IS9ihBpeSFA~xO%bLK4-b=8N? zboa+|b|ges{8>+X^+;JcP}`_cbAQfbelft3reS>ESxtl!b%cC@Esz2HwhkNO?4yeM z`ewi#^=y-cTZN`GG384_+jPS9mrK-^5~AbC6I2C*mi%D8l2P7@dB=0SOVuR#XW49> zn$L1j!f#}>)MPo`aB&c+!B; za`6G|^%o(sAO$SY)*@zcp#+CVrO6}fRDhS1pGzWtM}Bf*qV1h)$R6l>!g{FG!p{PL zT+oe#h0RIc!c{s$JnQVfwK7>4e@5_=4$!6M%`%BJRw!N9z(6BqiLoeIVwrhfV?z!ABIw#lB*>X zrInTWq4HO5XN?;JJCq(o&H>&OQ`QHAnU%cqUA<;J&b-#$)=lZWwoSglKS}Qqpw^Rb zklJw1f7)j6t7x>Lw2sC4@gqN1xE6H6NBMs|w~I4Wh{UTsoHt1b2wq1|-kf;%>D4u0 zc3;mdzv)x|-h>*}3};xI;bbytS5pL;#G)1o{JZ~jNxLf^;eK`h0;ZWxf)1{C z@0yy#xH}8xP;BDiON`AK|KER)fBRsYg!km-efHZfFfn;Mg$~7$jqbMSdv}@YUmJmF z5O}5EWKd8Px;(2{jLEo}BZ|YM>Ck;XjOHJTN`*`s|9D-e#-2jM@sm#y8E>X5UFT@+ zyC}LG-6%NkuY9)R*!2jz750yg20m-Yq_!Y8T3K0v7)qV{Vpzd(mo))php!d+{G*#U zXA(S|N9bB|FMe%boc>Tz^hBD0Ys=KktW#{=`C#RC!Kb_p8C%-|e=_<^SFQ$Voj-m$ z+luE@v9oVtw5$qjGlpB2kWo`=T&q}@S>C*}r)T2ZH$ZAcBw9ayj`meCHX0xT+f8dO zTwN_KH>)sAGAK9PXWI2%wTd|01_K_*Afs_|bOd2O(c=`-TFjIOzeHJTg!?P z3iXux{yQ3eEtdVGF_q;QbxKM~u(JeMz|i|=m(iaWgm)B`lvp`9QYBtatN0ucB^xUZ zWGyT#fYuu1=zCxq1>%)on<}rsjmSLTM_$^P*rs~gVWx&Ytn^)wro!hk_yZrK?>^y! z65Zol=;!!8Tu6*6$LMzP|pzXpmAvwhdJaFadKo zI{$PeMv4$1z;sF#49$vhw+2l*CU;8*m zDd!~xnr}I`aqBfZe1E>T``MYVXMZR$E&@-5oCe?kCPBg4f-Tba6|r)Z@K$J1;^VbC zA#aJn`NDl}sVkIzyly>7Qj%X%(rBOznUPl09U@T4JYt}zr;^p$dQwzh2VtP#V_z=ATCuri5U zpBVpsPPNdWxv7cuj&EByeZ;j`K`}9EB=6}bCi+ya;q=LHw$kb*S^lcV<4NOHdQY&{6=89zS8{u>cJ$(!v9j<&Y#fgTI3()S>~ z!?$^bLk4rxCW~omxkrT#AG3twPKWoqHoB=gXU3p6FNx|pq%z?|<5MLoAvGJmL$VyB zF2|qNQCF9_6A>D`|cXY zCrJ0LD2hUJd48~>9rm0@duMrjn`P=?s97e#5v@C#uZpgS{0Xr;hpLq|--m%J3-cnI zL28>A(0PK3mXwcPnW@|ht6NlXd-a-ISePU{kbfW}vy_{*7jRIb7Z3hVF znW`{Pet-H*-M~Qg!RaB_6U`F++wuYHkzgOAOcUW(ZvIp00Q@@>gxP+ZT|=2!5@tCu zs6SA)@iuiCCbhve%xvx%DIT|eGZ&kj++@;mG44;U15{|Q)4BO5G$<8qH3DPGz6LJ8 zj%?!WgUVlPByGA6&(L91oy)U#97#>ejxKL#(%c9#nZ};^|59}Rtswk|O0{;OB;Rd& z{gpmd7vu_wmT4>Y1c!xPF8H5j)1Lil@iVM8WZEGdUR<7@B{Uk(QKs5Ft-GDfsAqUE z(orxdL~CPiR(Uq~Jooj(&^tXfo`-27MK7Nzf9dPf1;6ATA9Bs_G@|RFw~>fC%$lZC z{4UM&Plx{`_=;SzXUa0AXGNJkep>u)=KOc3Z=TFWCaaM)QM8XQkAy@E%x-ephUyYN z)13`hH-q3k<*9o+I%YHv`3UTDRd5wdPJ+zQQ(;?vZ>o}op8jXl)aPRQ>fFC&WXsG+ zMN8@q1u^lxZ5LA)H;r1YB6{uOO}4H36X_^6?5dc#)MOb=w%_h>Gf26hAi`iXM}!&@ zK3rvI6srv1-i=>g`tgGko%XKBk3_9COB$qk%vmtUtFNCL98^|vyFnhxYc+Jak@-&I ze1$Xi+4;dLoDS9Tt#3}bSp%v3c59R6BQT)KGL&Rn^v7)-|6+a^r?5$Wl%M}cS5mebL|Mm$9!31EPv*m25^2_gy?b1*34Yjpo#S(#Q&6fwIV7Bv)babz`_s{I) zWN^$4Jaz^r6gy!xW_iECFBw*Ob~H3sva+%)Dyd3$Tfc*EDul5}UTvyGF{C)v zu0lY?*4zwQ3S0Hz{$kVSSnkydi)5P=WNrsUbZwUE9vHmscA^ovb zRlcQ;tR)c%1^pw=t&6vBv21KaFq3+!H@-mNUdxGYV#;z*01h?|wJUHvxH-bYftYBE z*`n%gf$`CEl29i<|M2JB@$PmIvNio9tcm{1^H1Je`Gn+9snu?D2bGqV^7(LG2Ix8@ ze;hn{_@643HpdC;2Q_m$IyC=;3gcx|R8%^`xM0m0{7v$oqkRQ+#*rBQiCB96qMH6l zWQr11hCEi09N$zvnwbA~`rhQ(8O-&h<@rxjefzQ~=fk_juQY${znxwLr}^d#V*Rfgm(Sgfdu&f_y4ojLSm3z2wzf13riAK+-_p}Nw2GcHGMa^h`jf|^ zqRyojb)K#ve%v&!(xP9}brS|NXHup*p;8EYS?nx6p1?Cd*Zna%?d))3)ff>f!u`DH zCSyW+RNxCP0k(0A9_4E{%CDBlK3#q*HLRhL9IqPxJ=6-vkHV(dRhUT;Zm!%7aKN~{ z^xk{{_nWZrn(L0+9DdQJJWw+vW#tL5P49gXtF2_^3*37!wUEEe^xzUa~CAX;TjFB5O^(>*#?P?t20ie zag?$;qzOtnbB!M9I74`SdvIG@x@!GX-MB|ZggCuFnP#C4xE$r780o94-#|XNevRNk z!VDiy(dK|Nl5pwzU=kT6rHomS7&$q9g8yT6b++W`VN=RG?Fy=1p5lCwx*bE9B9lHn zCQw9hl*~3#$fM}B4l63CY^w{8k6-^&CnInSp-PHR3Y7&JTeUrn*m2W8G7)yROw;GrErVhRW}s5_^wgp+80N$9mQr z>5%nnwYOCFxkpLeAC<-I)*|k!f9fhlU@?|kkg~EGCXOQpb7u<93`xjoTmA|R5_)*mSE1`U=0X2-;D`vgp~EE!MDs343*kvx zsChA2mY%?(YGTJ3)0)?#FXNHVy1BS0y;)pD_Ctju|3K1pL)F|oV7Bc+WDKgNq%!&0EWphyopzr2mS(*Ia;dK1eFObQcV$X;h4iE>cN3RO?KES%U9!p_EQ1JoPXy=fROJD;{)x46_exum+Jxzl(8n2IX zz`&Z**oNpJ{>$O?|GiK6pZ%u=qjy`*uA8Oz(a_Ozva>f`C5Ry+wi=S0Mn~1(@(i5P zB*njukDs_($_4^K1!2#FCol)By5rP9_iM((@9@1zn0Xb=9$mHr0I4pVpiPR;oW5P5 zWF594;o)G6eI2G#JNYn-Bml6rtKiAaEpOQBdG$tX0n*awb-EsG>KgRsO>SJ#q&p@H5s7OhXTMtAYgwO`x$0{PxW`9-&V53)(CEXib0(h zQ-jmtN?6AVw)EK8UqXK30Zt%9Q9bPj6-ZckMzhq1>TMGgiRd2?ITz(mC9=1>D;Icp zi2a#KIscDJir8u-{#M;{Y{cFm_+&c-R2tX z8{X|O6~UthNFgmgK0Y!s_$e&hkx5Ug`L8a#>KY16JQ%47xko!X{6}~FQ7CY5S4gcA z95K*Y>W2;6BG^$xv2{?z7zU6*xw>>e+Ev&3+ZQ3S%=P$S6bxwK(za;+u!=v|qh5;2# z4=gkB@ErK#e_v1Qu#8oJHr!@z>pmv@a+I<(XtRrX`?DWAG%bi6TDL01;LklOF?c;K zq9bdE08->z?wQMXC&J7WYEeLuGo!Ar&sHpVmH-bVp?4%Lrm7hvJu^>%6B^%$kf90 z!oI__<60R^AMP8DOuj-s)BfmY0DNg(y4mXLYN$)}jR1wiYyXA>+=pY5li6q+$LkgJ z>kkGC3iLpqT9qSun;#3_0KiN-Q;Bj4Z?lPAPeMT<@yC_LL&5LB-z1gycjF+YT_(*W z3(>2wm%}9=C7)z{Egg~mo#G2TjIq@xS`!N{eX+e~S;w!iv4$vcf?i*HR9 zr2XVD5c%nG(0b+y;Rsl8E0L*bx@YG1t}HL}!pVh0WU@eCURE|dGZTt+ZKE_rpFu)` zrludpVn&>cn`wrIaTe5X;AeWq6@2$jAK^zT`B|o=vHAJ=nVBRkf)f{C-Qt|pnR2=N z_jQb@aF+FrMG};hYn>+O+1M*0UTe;LY1ghv!#;W;PNJalYOW*mQ=r-?2fUIc%=9Mc z;3wY_DY?}aBzpgj?Bo|TbboH>3ZKx4zYI)h<1&!7x3~B7>>5mZe_*vU`PqVn^u-xw zlN$#D5X*0E@|0w0Y&1ihFE}i4NI5w<=at%CBcbTJ$j^L1o18bcR#5!F-c6Ac+WT1> zx6l(Nj!0u`4;h&ZWvi+y{fx5xStz9ADhs0BL}1xrx?g^dW~QxJKOr#D1bgwVtH zP-uLTWRkFl{(t{H{yW%vm;iXFj=Q_NvGGT8EAqzu()-6kG;O8#<>cjC4*E=iwNy4@ ztzXL_Dk+&(G5rwA(AHKW;-P#OaUBLu&(RTyX|$9~dsu92EMOP*QxzIYTgV^lZD3ML z!IuL)9ed*9Jyf!_;9iYBzC*Dy?xnau0EZpU{qgZ}v_phQ zu5waPD@=tZcKuGsc@)p|Qf(&z6T%B{Z8qd2$vjCD^>DmA`)QqiJOT}*&H-e@d2M!b zy9K^^lZmrs^S20-_TTHvCpbtUEA(sk?xYpYp>+jM=0ZVi{@Wvf>7?foEx zjML|;NAfq}70S6h)VOIv$gr zm}YdXpBPEFc-Nv07}>+G&(59)q|fO(NaitFAbqC3eRJ(SjAf`#*}P>`eqwHue={wG zIa+wm{Z5;tNE< zqTDxITa?^Pvc>M%&7X^%#t7nmXd4)WGwLS$bzwqdmN5-;oT&h!c^E>=f&3H^2GcBZ zC$!DBn+_}D+GPu?H$~m)5~Iqyr^nI9y{7oYOv(iL`NdE55hQ}y;UEdDkgl+3s|*tu$!4JI9}b z>5s3=o)UI9Eg?ps1RLXT?P8p4e2vS!zaA-mP_BQ3dVC!fHIkFcireQBwKo*mK9!F0 zv7X*t<_wmb!Y|h@a1s4iMMZ`2;sY9V)**l>i4S$9C|J!b*L3fo(EI!1)T^kxx~ca0 zgSj0ov~vtCpalbgz;<(97(YDdCg)}J^Bm@nuc5d9TDG!czDd9|1~c&yf!ozD++k;t zzO}(u(Uu<{`MC^$cj>!#_p61lwXaBT)ejN{WOFjh9MSKsbW6WYp)qdh*-v^U9>MYQ z@ZILMqY@0JqzoK0TIkK!oNthmlM@p^QB&i9`oa#+YVGH>W(d(48ql}n;;TA2iZ&@i z3@ZNOOgNd=ljHw;>#(!IPc-)%zh5Tt*+i3@lCS-YijQXr(ysQR+f|3PSp(G$y~%&Q zR~y;$P!PKe!lxkp=rua0yt^cm2)NwTSM5Iz8dIx8k=izI~jp2P8 z$9WsXrD2+5)$*H&G)+0H*Z8&vI zNwunrgvAh)z_BKZgyG@hQkj&Ll+ec&CS$Ev{W3Er4D+jxN8{OKs+rdRQ`cKYMHzN& z!=yAwcc&=bjdb@=Bc0M9f^>&;cjwUErF4fh2uL?bH}hUT_x(NZdVhTUowZmq*PL_i zy^q?Y{Zg^{>f181F%e_}rr#jze#U;Oj$^i@6T}$F^r?<_H+Odz3m7L}Pc|N7nD#%* zUxxn`F6r468!TVJ+jovSlFMS<_vI2wm*n__gjIJ7w_m>ozzNTE#L66Rl9E*(8~9ae zygdxPbac2Q<<{jB-~Zg{`qEsh39hvf;{=X?%*>LG{aP!^rsagF$6wnS>jhzap?7oO zDx1n~ms?7tnCzEF3H7#_8+o=G#@y@Mn>HPN3B&kM(m}?cH`GlVRqy%8oShnge}^k6W&ev8hzQ|0 z#|{iCAhwPoawNB@?Tnu`wKJ7U6Wf`=d`nE+_IXxjjutrJUzRja526s^$%#U!!VD+B!W2>FUaD#$Z!Y8tLc&={3j0A9~sC zO=X*q4u8*=4?dD6o05IAo>Mz`e9!AmG5G#Q&82BjGAd}4^d_3Qsly?T$jXxpAUuy3 zEPyyU2D)+aq)HW{Kbd?`d4&f6uqR~E563H7<&INNaH)$QurX0E(~bkzBLfRTi{N3StujK^HyhP1N zq(m}&Qc*)QreMXVX8JVI1j%Z2er|Oyu9kD z%8js4Nfn{j01PIj5XE^+&d6v7ta3|#1Ox;C4Ap$9{C{~s*Pwh8K#P7A zq6^TpprN7$rT`NOF#X9RsKYF9psIPqB_}6mW`aRq(RN$xmLo1{WrBYmweVL<=`CYa zX)8A6XR~)99%nMg{)e`dr03^mmZFzSW%v#xj{^I7(7s#4tbA7I%CiC1r2`!;&^;-B z2kd45PCPB2|DqA%*+o$z^2@m=a1}3;3wE}zu5iVny34ucedpAoL^8H|)evB(O5Lou z^G_qCAb5~Tl%HQsHqt!U{ND*h*y#_IXnxR}pnwy-#1Vwe_be>Z_W&tWYrnff2z>8) zdMFptL>4iWVgwWvDqI18KM#kxa@w;9d4T1o*1vM0gs)``v}JX)Zuy@iL~DMqh8`NI zt7AsX%q=crp~i4R5W-4iBtQUX8EjDJ2zw+2vyX_jR$vKJ9BODLtMy)tr*I}Mv4I>` z@SPx80l*Kq)-*n0GLWM96gk9HU=z?UvS(c3K(57OMAf|^E|AJ z03=t;IW)eua3xy#>&4Hvf}Hd0tWX@_>)pHP@_JK`0Ui2_CmFv*jb#OwezGjN=-@ ztOS9d0h#($?TgoOZIjpRPO(_KG~~h5-@W`k(-vxARyrQ&C{IY*&=WVqNNmi_A$+IH z^Z``9Z`H~>f%1KM_%TCbC-2Q1E-9&`rI5Js97H`SMD>AI+YW$p89KmlG%<%#q9QQX zuF%&P0GyU}saZTWX#fw4#HlDmwHP;)p##Uhg5+GneT^lDUOP+BdDF76JaxsO6pK>G z;rEhL*QCLkqD6VT>z3A-*j6~YOW59qz4=wg5Zs80ygYzV;wIG^1Ax$i>JqToQox(q z3Rq^iqnh^tMv@1h)NdtVAryKGOz@hnmpe;9bEn0U)C3!mFaGHhSsTNSW;j^}BZEp7 zQ~D_~l>$wS!ZdT^guat(6mnsP)l^ROVSe5ZJ8j+r$jf6T?XAb0ldzwD};>{ZeB zmib6(w5E)Eep&cGIS3O2V%+W@ujuhR9ItYphHmxUJq{+hsLTtp*J~`sFf4A;KP5sp zH!UHjF%K!)RcM(R`~nib#{%Et!ZOS2UKuLfV&S&v^-_Uf?dYgyn4Qh=1|aC50wvKO z#*CQTSX+xL0R0TaTw6OuEqWLjw*dkEv>}rdKue5Bgyl&t4nvJ$^|r1tQJ6n4x5wqY z3N~5wh2B+xa{AY-xfKFgzp*GKq!r*aM*kLCDrzfjY&=QUA)rOP{3ptJ@P_{yDl=w< zOxDueoKnI>Hnz4#E>vJ*o#Uzjw1a6BaWTLrT~3cnqljGFcqV;zHEpa>1pTxM3(;wA zqUO+~arMzESzSa^&2H6ypF}Mj78Qv~IcHR5Q_Uv&I`D3@+Toj>OKWV|)=qWdVlb!M z=Ek#^`ESAlhMotcG3TFwsX)A_{M7XdqTLh_{@L|(cD|!uhCF=jfecG%Wx^vGBWE8Vy`j|Uq!hf~oF^t0OsOOY4SjU#9dm0~pSL9A7pECzF6_&b2f`bq!^WS2i~939Uyi1f0*z8KSUd7nc8WA-ehc8mqi8- zQ)S2N3#*d5KXj~QXr>ryflEY`mXcC3`w;G&%nYbg;Co6}Ms8sL@4zm2dAte){?v5V z>lR`Y*0Qp)p6#?F%%NObxM#sVn)ip-0${X9Kqdtypt4DfXN$^=uVY|kt$qS$ya~cq zF6MQgDmG_tLO?{!&*s(fu=2#Sv%TYQUs*7$-I-`F|tUMSgD^ll9ZSz`EFPQ zIEwcd+w(SGLGvt}al6fKfwkuBF4&^~gSDpsJCODA+uLRIop7FHWM$RUKKQ(o7G&MU zv6i&4IRb<>^rQ%KsK_sxBqr8hb&m+1l*&wR{3l| z#h)g`^REvM#Wbqh!YCp|$C&0{i5E`?wq2htHz2kBL)F)VeSvx}7nxlMU}{*15Mh5& ziOPI!Caf~)2W;Bj;iMGG7Blf0>THODuE<)ajgU={`K-q#!!{rx{U^yOEW`k=@su$O zTb6iF7(L$9IwZPfeh83pP{P3hDkc&2z6baMHEK^7atn3pUsWARz|6R!lnSqin+ph$ z1{tez4Aq<_joA?p()?D*WoTT(=1zgqtw!HgJ~%X_qph6~^gosR%}YW0kJVMu?*QQc zwq)T`ml{ZSH%^NgMiWm+Ux>I-AA@Bp24k-_%?53$ckZ7KC{3WVvr{c|PGSyvF_epp z$Wk|pQ-%~5Qts_Daoji>pi~H^T6Wz^gBw7)(ZC^5WaeG@1 z0W_Skqz?cZt0wc`%KYwq$IP60+n+bzMb!-qPLGaI5$TLzHHMLkKVeur-pbzG(yVFn52(4h8ec{(dAy-Uk$GZc8=}nm)@^&Io|EJk+NX z!Zsl)FN$i6_hCj_;47*s*`wa2(cy&6ceJqyl!%`YH5)|#hoY~O07Iv@XI#l!MjFR_ za=`^0WLID~2cSQ2000D-^cIp53NVE}D2cv*%L_bjZs2(nN?_q!U0xb9N`UPJ?SV6E zXZHbaIy*SHABdc4Z(>A6n?eNoF+(PHpc$&KRDWZ6xHD1*V4vo}D+mK>Q~*i&3E}cx zKW35hj{T4P{4|Mr`yCdk7cMJN)k6Z;N_u|;&xcFy&&@&}mw0Pd{=m_J^e#78nQ1dI z@rTt;uucr?Do;|PQoR=vS}noKKHU2Ur@vW&^@>C91J0v`MVBNmPvci0$?@XiA_;NC z--&9?oRf!}n~EM_70xbL$nZMc{c?a`o>#vAGrjdNeF?0$h8CvY784doB1Br6aM(Wj z)(#;3$deiKocYxN>f0?qbc^8Qcx^~$NLoRZOkrb(Ym5|nr!QT z>RX}2@V}6zva}agizLjRhsEuKUwqINv=gbrE^&?#6Dsh3HA5r#Rk9`*qqH;WtQL5% zz*V9F@MR)CkFK%Fb|pi-A~6oTz(icq1<;TGSDGs2ei3(n zFMMyWT5^1U)^QFPA00W=rzZzL&MyQjWpSE4Hp~uTV&m!UFCg)P*XE&X zZC8G1<;JZy&bV4&F7pql6KR|r!6Cq{as%avDoMT#fUh$NI+w&1CmqN5(aur~O?)VNvjL?;G1o6=ZJ7o9teHjF5z7$@1Tq?@w@{v22Ugx0s7ty!a4p14_z zWd0o(cF@S0MEy|zb=!{!cWF!Hb7i+{n+l&dBusz)Tf?6p@rp7Wg&6u5wzgZo*&KY8 z-^MQ8?^@Jn`WJnBoEn8fqOEv~UT>Wg3y#LU*s4SVb(L015DP)23($`@k<#i|s)&m& zny7tWaBc=V4CSD43Fc4Ttt5KPAZLfs2$sD{0b&7p&y&l?g*Mw}dJKYyphvEEY*qMu zz_NB*t|%PmrJ7UxlEt<%t%>>6n54NWTS^crdNq&jWBx}o zN(f)e>!lFtxtU&P+KI0QW4~0pV`bV|$X`KGa%`>GWUGRoM54t^==fr7B7(I&U(D%oPat#%^N&JM^O^rIJLU1ZkWs zQnCFt$`qr#-*)xZNKyXKzbHXgwozn_wA6h5zR~1oho1})E=9I9QrzM;vMUX_Xx4Tf z{PAms{08>K0p_IDhSPdc$3!7!O2LQ1=vPyx*v;uq5l5D@!r;+&Gj z)0vi--l2TQ*?c-Pe$QuDmcD8^7<0C#&DDq#Eu}g0r+;yyXLgCsl0UicLFX*vOgVx~ zVJ06|)Mu`XG3ss2J3q&(Shl@gqkKqU8kf)Ss`fW8;%r0v!5?opBE&{Nowx9fk!VT6Xbr zaDJV@DGSS0AI(63EcT;V zf)L<#^;r)>kISXiLE!aosoqos-kKO(MwG7wMAA!r1{R&J{q?o$@Uw~*ArpdR+kNE(9EyusoHOw*GRPE-zC?3_jim=yvo(%4{#zGzPrYN9%=>aJf$t=kdO))Ay5s zVcKKT#6)_KVD!z+pf}=(#)-XZ^y%UOulg-jMp=26REIZr(EAoMHSwgOY|+tJatf)E z#^+WX2#eZ2bq^mCoK<5+nAMV1CzKHY?8P8jFO=2ZzrNN;p-r_MTdpFmjfi* zx}X^hW!WE=gl)FJ17Ca~u>5-5p!IYLF@076E2nUiFWUIYzkmDf0b!}7g&R(f{7i0A z@_4mx^US0N=IDYszT`onhW8j20qT-)!<_>oTfhdO4HzELJIas&KHHp3?g*Shqem9E zpP{^Y^ln)!_eW26$B_vKs!ylEhIh`VER>`W0+CNIRj?Z$++BKuN&LEPD-yWuB{Dqe2Jx# z9(m0zw!LfIq8CeO>mkY@qkUxEtCs&&5picFksZ5Zz*+uVk`ZOn`e(exC#G(iUmp=l z1!hH=ZMp{-qiDT-8=-ij&e*=T)?_5culYj^vm&3g*rl;wxz9hKe`yo^^M;I&$l!sg zVZQ?HEq?~eGeQmAXAF(ttrYRtt)bA5YY><@3?T&vR5(2`@D0+Z^eR0N)8Fx5P#OOd z3x!4$n-u*>GZyF{O$ElH5gD8gnOTvHDPvdY_A_7ASM{#Ci)^uTNq21ZbMZKf{&uams5FW>f&+)0rHAh09JvK#Dw$@=-IXI93VuBXP`L*9T5cOPS?zr{O*Vqwtc961Shs0n2O3nGZJ#ALSlusQg@{qa5TVvg5* z#4({A-rhq_34|!*?t9z9hDjmfd|PlZzHr#p$ef)2-2by?GUw&!&v%y~h21^TxL2WH zx*+e@xtSoN=hKF4A+dL7Cp~3iadsV!ulCBSdVVrIp7DQ-R7gH_6RJKr)=;a?HMs%TqP_s3yY>8(>Z+Ed8P+?jGgg;ykA8KrG5)L z?rDh5E(Vul9Zt#e@NJSQhcKNJW!$TTF#cew14pE=p=YFD2jjLchm~t)f->2|sbaGM zCD_pKXS0T1D~+^+J6P&x7z=*0Vg3AQIsp|@YqLq^X2ReLC#x`rq_{&iY+6cdgcIZY zLBt)xs3Lb{$r`__E%Z<8=IqUH&MJ3T!dCP(J+z)E{f7VDLwb#<_2FG|Y%57}PpK{3 z%W9<4E=!(;p$OuaR8G7daxM)xmlQvg;7tOHB%<_>5j^>o21}G7@^QlT8O2{@|Fl3E zAG&(T`n!<}!Au5lRX4sGXrKFJ-qAHd%pXoZLnbCaR()>B#!0JQ=(*HvH;Om=l9fkq znn1ODU_U+~C!5xd{P6cj()Yu}-qsdfph%r&e5D|^UtX~>kh*O6K3h5%73-V}lh;{>8^#u$4Qw7aJ3*Pt-0<$>fMh+xINxSa z4n_5@Rb(ro4XBA`k0|0nbjAbar}=XUs2pf z$AA_8l)gFT=Z~#)Tfmu7&fxMPgX2fbLc?cp3UvEKKP>H6pflsbF@j2lXH!9WAg$ei zAYgTX`J)|t&~d-L5o5wx$inl5^uf<*3&Qf{$*>NhhB6oDO2End5JSIW$M`69L@>9# zJrmoDQx%OXa6o^J9}~hZ&x?VDSF&A@c*uR|MLpDlFd3O6u+3zCq6k~pU)URCv#7OE zUejY{<12Bxcb1Pf7bYD|$|6{!n#EG>=;nNdNg~KSygE_b)_p%WLy&qGe84Uen$wZ_ z_}y|g`|%Mxuk!74raC6OVG(#tS}dpY&ze|b3$_j%Iv={{XhNu0;^F#fsF2)p)1JjA zX8B%RF%%-Bf4$7DM1Y8qLEZ`ss}?#pS{3zy3gxb|K|YWm!W!^V;nd?4dfKS=po*C* zE!c#bAxDtX8S4Jp>3H&&YRC6+L2)M=<`OOmZl`L%^`$+0vVZ|6jCQ&0#h1M0}reWe?i$aEn__s>l z(fTca>T?AjWFya(z}H@mky~FBnoseYV?3P~bBpw3pGAzOUJXAwqPyDWk{oQ@lYL;{ z7*Ic5=ZfTyAuEOE3~z3gC1*_Y^I0l6Tpo*3XPsB~T4Qs;P{i{S|FvQj$xCqB4D5rjdjETu3nbtrLi6-k`%(-qUB5&F1l2*As4NJy%#PeoLR+o{^1@xoZW~ddMPl z_3sAs2Dw@g7$2ReCt@NEThD0gbBIb3jk#a<*%Dv3vD$uRtyEbrvNb)1hGlF#bFFn! z$@8*n8wftlf5$b-_MuwNd)E4S^SEcY;y?X2B^8#qMDd%$FG$css$M;@Ro%7K)Q_{X zoCKCq`}tdPAsaQZQ;9+V?ADB^ zn94(Lyh7)wQ$nKiiGMd$pLoBoXKs{Tq2IZu`QleRJR%<{ zi1jR}pqFZSZ^KMPbA}20b-X3_VWKC3D+E8(GPS!sF8&m->X;A>ekA*Js#DwgmG!3h zA0up|CBpNN+t&%2Cw#s8<1rtXRx~3>h-w=el}$u(u>NV@VZ;*r6mMc;8wqH1+xeia zw3T*$YHi@7Wo)@gm?|^>_NBp8c{CYGee&#ppj(7N-ISjBNULPb*qawe|39)B=g{9q zOiFIN0edeQONx%tJ%V~L+S8l#MQbZS89KNvqxR6j6{>?wrdzlc@m&mg{>L8? zP^FDtx}73*Z^kqw^4J=(Vmv-!M#xlqkv(QA$kfl#`73(-mf$!oyf>qpcl@^%=TvU6 z9sNi%9fSDoRi3OM?J{89C715JpC2SS)mF;FD^Q;|8Xx0UY!dyXHid<_jF}!zVy+m! z%={VmBVY79(+!Nqb0n1iSGV-m+5nF`FH5deU63 zQ%+Nc(1?l`)FT0Y?`naswwpXmC9<_PD)+|8NBa58olORpCUWM8u@TGfY4X17Bf}ct zxm^-M}j9lyHCqZk4r5b`9>cg~Dtv z`dqW6s@nO)f8)aSnV7`Sba?AL)IVQPu4%I7|RWq+E=Pf9M zF3x9)wz0@lcUn9a1?CYHCh3U?abEp~@?lgH^HMKcO+>4a{i>h3XHMk4|H3;@=t5os zdN7XF!`_%1mWoa`qP3NRV0eVwD5s1;E=q-(JOEVMK3I2rjRv=#88zmz?j!nTqx3us zu}6eL0k7Tvfd4Wa=W*-+ssxzn{vYgrkD~z)-bF>tn-)oqXA6}k@~}q*elz{y=eF4+ zr^DL~$T1v#x|g4KYp!)v*i`DQRjYvvFxxsM$DMHiZ2v!6$VtFSQkoPTO#EL&E;%Jd zBLY#)-qEqJRR9s-fydHfY z$wPu+H$Pjd3dod(?d|7?$;qWnR-_d;(v<*yUgK&fFN#Q`tP%@jdJhN*zi!*lSp_n5 zeSJkWj57h6puiU)BSR@502ZJt_Cpej_w*<+%e%}+DuBSCWSrtJA9ariv>=Pe@e+gl zm|=r-jEozddH|^tm{?w2?bZn{nq>nxk#T#BS#o1=riZJzsf1)$jqb%8JEi|<0Zc<- z@T?Xp^}KFRKAv6feg<^+U-mQnjE#Zy0dGa=Br*YWxEgwI>VHH9bP_WF$t%etC;mm9 z2sPZ3$_ioykSu^6gDJK=&j$j8BElVAUtO_$5Do(nseCP%UO~t8sXD^jE+8`s-~=4j z+NF1^0?Z3J00Kcq*Cyv?GjABM-SBI^!;a{5+0C?OS&3Tv%n&pmJ6QN;E@)+1I4PKH zadD9rn{oGB%b)9+bS=_?%aQNuG~^ogYzA>eE+juCg$;=gDLxEleH4fG!*Cqn4F-FN zh!w>WnFu1Ft0GgjMFD=~ox{U-sSWq{_dv2sJ+V5Fl57Sdet$T7R0+N5@5gK-j zQFCt!ekV1#@h}zYX_D#si*3d{biE-+d2=%_Cug7wy;`aMDUgJRNm^+c2?vg=(=Qb5bg#y3=X%!5T4c zXxXBIi8g)NuxEB}jgu6gK&$7uVy_Q==Hc$S*$m<>Uq9|-gUlv-h&n&-)m~K$&aq+| z9w0QGLY+rze<$UCH*MTTkbSe)El9#5{MhglY~+13Sw5p_@!b?LeR>P_)^ zsIswNP^1;hnSNKn`z>QbYyQ-roN+_pL`%eMOComi`tm(%VpHu-;vQoIL5L$d?wGJ| zCz3<J6`IdSJ5oFI0oA$OdS z2eSBMzc?j!GBb}3gu~!D0jdDNV3E)WkRNerG-%B>fT4oa`@AE5<8(!)m<$+?{(H;S=WkSPj7)4Sq3g>gIO^e*^c;EG`M>egU(;40( z8}#yq%dhLJzEU8*7Ibpq3)hryDnIQ#3+e624<9JS%i8La%y~nX3i{^Nx^7EBVrrtw zI!X)~w~!oC@X3hj|&QtnBP)0tHytF(k@PRfB%lFDK=02c36T zQ8<0&2v!QbXMCleZ3f+IYjzTZr6^#m9e<--p!ON^Y@b$8?`@W`57v?;rOIXV&xQ; zr#Bpy46r%$G#rlO_I#P-n>PdmrB1mjudu&63Gof$J}4)S%uP@GyY3W3g-n?MlAwA1{)UD!TYwu-4GSlK+gwXx(b!UBM8{Ci`|&zR4;1*j1A>$g44+S|H3Hb{c!*dsnXD-q zlgo>H0r5kTXulq~M{K>?A>NO6Nk3DCsMz>!LaZh@)-Ol+@8wgXs8EGQwCCM!DkJDD z?crh_hoi$@-|vd;?_Bw7X+4@|#ZxD{?NZ6+#Iaa+Z8vnQx4G z)^=DTKrZ917KA&%eev)&RyNJ|>gRwvMY~tCWNOcY71EM30UIKx0czKKQw|=^4fvCl z6`l^O*U$SCCT#m6Xpv7R33nS)r0mDr>9bjX;YP$h2cD-#jO%}KUybQamu5w?iV@B@ zc%4W!%A_aF>IPSX#IA?Gm{Ru0XvPz@Jt%iYZisWxFmg!WU7u!1GlBqJnuvi{nTp|t zeuY7r>G7T1sgAXSNyD^6eE;_VJ=|P8+CSkSG<%NTwc<|gI6J3Vt^M`VCUEdA4jFFy zJG_Q$`;kFAbs-~u$`P@v+k-AuS_)Sei=Et|^e<`W9Dsk#sYXrrKF%oQ!FM{vXf?%Y z|Mf$DL+{I96ZdSsl#bhrF00>Py9W}gx;KDSp)ew6qVpduy;>c&DWks;-BV9rwDI?H z=OeIIoclljx%ks^e)G4AbKl-+ytYttt}WM4*X^Uy=VVpX30A60xMohKaGz^8~J1=wPWBm#X$7_IXac6rSMBlS#NgK^xU2EfHe|gJ;7;+2gu^sDM=j{-E zx8`|1qRjRP=|noqJS-M`n&1ippDCWej$mHD$Fn;%xY^?R<@cLa?dGLaZi@buHR%V? zCj(601Qs3c8Y(ZtsmS{h{;-b7TVF3mZYQJhE@{%s!dK5soQ;RSzvHkRqra01Z}heL z)(m8rFUDxMP2l-7iE4rd4Y0%_yv@o}tu7|!#!RoNS&de;%5wykd$ApQdOOB$7q~G= z>AD2EPiN6o{g}HyW!*p57OyX`H2xGKj4G!VC7t*g@YK5&p&**6YRcj+t8?}J`@5U?Xi+G7nY)T3v_VBQiWswr#ZGmvX( zisA zSX+6Eh%Z(sdX?36!|RsA#PFwbDAKvDyRE)gZZDB){MB|Bw zJBhBz=;F{kwzYpj!|7v>D9wcMZgXq+F?Mp8LdDo~ze(H#{~ckEs#hy}6@zV^Ao+OU RDGdYs$xEw9RZAEL{vVubIduR4 diff --git a/4-Deployment/ReadmeFiles/spa_step2.png b/4-Deployment/ReadmeFiles/spa_step2.png deleted file mode 100644 index 31b8dafd0ae6188af07f53da32990c24a3d88fb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44744 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 rf4`v4gbZ25qvp>;H=oB2ZF^2^Tpx>Kywok*|7V diff --git a/4-Deployment/ReadmeFiles/spa_step4.png b/4-Deployment/ReadmeFiles/spa_step4.png deleted file mode 100644 index eaec481a156908f4034e1c313a58e32c0baceb16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46144 zcmc$_XIN8Rw>F9b(xfN?BF%z;ARt9*LKP4xf;8!(bc7(Ghaz36N|hFnE+D;E5$PrL z4xxt{I-&Ee@I3lH``vqg=bZ2C>zp56l4Py9)|_*Ud)#A;dwx_=mLny;MT~=kLn{CD z$qO8uOG-F6cvlH81K%X(>74@qU4p)llfudCre6j=;F(D(N#fuXhLM~Y;RBzEY@cdF zad5~QvHvc$K(dT+aEb@zpGc}Z8?2uaRWNA8Vn~N!?i&v7la8LrkFfspa>vy`1b?L|)XqzPpqAle?b>M5Ye~ z5+a{6KUOM2eRP^ldvf=iMYz*P)OGpEh#IRy2BA@PvCVIYI*%a>i0Ih~xyPECkiy;1 z>JM#^Q#B}<=b~Zw*?2^H{8Y(u*pKmO(%SR>fN9>3PhQ0GZydtNK~nN$3AX)=bZ6$y z$A{zZ3W4zz!@)6-rZ!#|M1veF>!d$@y+s(^+0u{eoT%N9@p1@=fu+uV8El#&tzCUd zuzbD20*)mkdfbbzz>n5s=e~lX>6x2ov3_Fh(KV_LH4WKC)uXHVLg!>6%lxVBYsGc#gyA zc-cPh)OY?(Mk&0UKI`^#bhdYuoYKe!4<#^2o>!qgOVBt_=pOu+1mv zE`hycZ0Z~893Xo8bf4pGxzlF_*DS$&aBj=Z^etVaW@5BmOYn(g$$a4cJIN^;FR&A&~&h z(Ng%oF8Xj$NW8lv|>7gx8hl0?$I;Q$@6(A8*K~x*gn$Fmy5Z++MJ5 z8}@kXJXiyr76}V#*vWyvo6faU-3Sbu^2vjtZ`x6c^pHCJh$32(WYU)|c&@Rg`;^{l zJDH~;r0NO*?~=zdd@NQKmdo7pWq@biQT35hJn_z6hk4LUpvfDK;IYvIF!5Lhm!!>D z6vs6TI!oe|B|F=>Kg~FHIzF9pU|N){FiMUtMA>_xkpbeU+gnX-!vPzspDTEM34u9W z;s`x+E!wOyMn|199TllksI5ul3UZ+G7{-PwCMhzJIzO zA&kCXj*KT82)1@4$O;)taet#;$Y$BUY)Vkg_9X*$-7yZnf!up#s^%4KUTYL&lQdr= zm$6kK-gus&tn2r>oDr`oV~S<$o2Gz~W2p$vi89IYYI{ZK>MMn~;IRbpsgw~0wCEBE zwEv7DfU04q$ub<#5hiv|*amkqdpSpJv-kAOWre8io49?=X|lG;A}R9Fr!iN9R|X6@ zTe5$*k)q(Xbl}7_wPC$E;dE!`eE~$V%I{OfXOs|%lcQ#FdL!v_jYW^900U6ur7d+_t=Bk*P?4;fGsFq}WF2!`Lys{SsEv>#)w@Se_r}_4-rLL3Qi-lUb zl~Yo&*yClE6w#Y`WcvN?>hX@p-~GxTib%PE>%xv|AN4mVez2B@Zb72+%4RIU4?7i) zo#-_?F(5w3=~|8P0{N%2W5@bkanCUStqi@YV0=&n_p*to{^+@+gm1{t4Bkq^FquO;!C|y zCzt(x^#l9#ts(WFr<7&PUyy0@6izr_vWBVz30EBnQ>zwZwZ!>nj@S?4Afc z))s?^PA|=Kkh345-B0g(K04Xa+GuII{xOZ$VhY*{PXh4^A0orkoodcfGQGgm`a;VQ zYPPW#5dVO{lb$uc9VWgXdyZWDDu@uroF04JGLvTx54_)S9`lrWFT|Pa^MH7pocNLI zUlC{`8AeVnw81lRf8oB*ZcOow-ldzx4t9c zKL^kjcw;z_!+VE;0`CsZjX3%3DB&cje+abf;P8gYoD1d7D?K=^q#ovs6Ev0^75$ZRk?&TW3)XJbQhA<H(98^ zxA2x%-%__0xR+U}f%jD;xkoWvTG`OsHA)$d3d&Rxd#y^D9YMzL74B#}zc2A7tUrEl zV#R&UwcsdOU0yQlHZYI*VngdA%(^fI;$oO|ok87DfRbh*z&;s7;1d%x@Ro7I6K3)zNFYf6ul>nBMAXnrHFc%Oab(iX#7Q8HBksEDGkcUS2 z$lNYYQk!?RA(oJ@v8o3jGXk6N#T+5-@XY8^ah<*yD2&&7t6kX@ZQ_`6tJNfSk3M97 zHJl3nt1EUU&l5m&d+qW^;|_c2u6rO>!^%os%yj4^&VF1NGHzgxeubzmfD++n=>zPe z*pL(dN>s$IzN^piJ{!XxsLo#$b}BQK+D+(~Q9gz&ucq{J=2B+_wzO!2$WWrzu8#rU zkC<=PIN&yz;*s?zyb)^DFe;h&IAw4+UdCJH0oH=%xfg=6`|l4!C70x}p9wT4 zyj>TbfM|SIum&V%+b%G`!8%)cTOF{MkIr0#4mg0JuGP*e|L3p!0#Pe5d+iYU;iJIwA<@W z%+gZ+1sEb1_L{)NbN_$55Et?gXC;bqOOGP^!XxZaY{0^79XWy-etW@t6ux*8&6%Tn zfoH>j9j=B&d|I-=Qc+$!L z`MKu!3yCV$8Ix(R1eE6llXbB`A2s?|F8&~_8=z&h&7m_T51CC_AD6pgerPSthxzij zgw$|(>DI2l>@Xsb-D_~qtyo`X1a7b43iVc@$GYQZuj&i`eubz-)|-J^iiVH(r#K#~ z&G_!t;m0kfx62C_wlLyazBASmG8^h~MY%YO^w_a0G;X_IHmkE(bWN`uv+2PRSBs&2 z2?3W|5lLxdH&yNmiCD~7)_zPWyP)Pp^cdn)l`8uDY%wSwoM1a661&K3Tl|E#3PQE`VgQ zAQcyc*V8@!@Jz0+Utt0>O+zfJI+ivC8YMXmE)5jzv~D!hyN))Eog+{ubV2K$o;eY) zKrzl_$t%Uw0+I9#ByZ;1iZ~XmS!7M^PRXgi9VyY~S3MA>k9Hz$J$iB*PQnS;?=mC8 zt2T^btjZmBuk9OROz^v*Ho}aYbgrvd@DpZYZ1u@tyxKc40@9wnissH+w+hXOxAe@Z zfhTFX7~t6HKX&}4i`j;c>pDIia<9|j3GaVc%JhA!>?efB=Kc8-9M#85*?MK9GdkWX zSAm-*0k@gL^E3TpQ^)G(8-b@L*+&}&_!o%(=Rzi32f=>;HP-(` z-b?XaLM*_9B$r%)O$1zU;1bpaL-lG-9Nq}lZkP2Nh%W2HJ^`-mesRIDuvdLJHqt37inU9I1bD?B#vIE~Y4++D%XryDODf6ncip2cNP z1MIJkv&X?$h~Q(lmrg|47&P zqn_e$ilhbYxrIb~E|2I}CkoB&rMa;j5%nL;Xks=i~5e(uJ;EWu;@ zvh_uF(m~UCI`jEVP_xZBY<{SoX?)weu-XvMX?ycsVkF|Sy82x66FK2l`l~e30pG?2 zM4q)oJQ6c=W$e5fkZg6y{CQ}ErSx($zXT}B8S6_PIl3o_onFx0`sfR+?$5$%gGXiS_$&247|tI#B1o9(_NgNFA8uZo zWMc?YGQ2g|MPF)eZmw%@;-8+n8gMuL^9b}de@~dN(c-V7h8L#xaYgXeoygEt^^)c3 z44=`Io=d=6aJq`QjLk+p+ivQA8AjfR@@l9PCYTAH_(T?IlwXO0;132dSx4-T&CPUi z)4>j8;7N4{Go;lGZZCKvF4crL7BZ5*ri7up+Jv~jIH*0FyUW|(M*sGjWxw}fF%ev} zDF0*uR36pHZ?8E_>!f*Sc;_R5pJ`tlD&V2cS1K_ILo>7OYb(Z&D&CqlScxo4&<@-` z_4ABO(L8 zXf|$_?YJSyYd=3+_+Y#fYT|;99+TO3UG;sqBpj_3ANrcTur!^HLS@l44=>c){g;~m zce%gz?z^*?!`6e_8{Vf|CXJmhiBm9L4O$`6A}Ya)_XUI9F-$X|?rSaFb!T+==PA*4 zKNv6%x=seCxckT=V#;dnKc;NA>R+?C`!bDZXFc=d+h?xuI&NEuoryykP|_=4SAg*| zpL_DQXbC@1{Q_A2_h)3mlRG~Pnd*$!kcM`hB~qTs(Dq8fq^z{a3wE z?}eFS&12nj+=dn3jPQ9sLIZH5v*p&@=QWrU)AdU$WXEMMME{(}54|N%Akv5|t8re- zn>=$wb!Z_tw#|TuOpT4ml$np+kz(5VsRYs8KVm|P&QHz;a|mJ>KXTIntcvesIW8t- zayziz+N0^C99o&0NNNx3v9pJ1r%_8e$Ee3=#kZcEN4dXRws(uA?DOj091W}6BG;;2 z`DJmpvL_1rR@-_+ZqLw=SDWSh?oi^%66xO@xi1BEKzCEc{VcN6uz_9(O62wkan7l9 z^LOwsSvvHBMw5Ft=M3KC@ZnH?`Dm^Hw+q)Y0weBxl+fh9LSNu&dwBBTc&QR#p|=U8 zup}e8E?`I8=KR;dVMl2{Gwx}SnTg>N-5;9W1+#&x1=+NUznk9G-a#=HJCBCT?4Y`0 z-?6!Se1G-l)zVM|jI}qokUp&3ahi+%HGh5yceC4LThS0Ym>ho))FN$1xGZ7zY0JPb z?+U=BCS3b1va}i^JptH!N+9w+7{hKaie2ZzZo#CKb=3^l+cr=10iT0G(z3WcpI84 z3=YI(qmG{?ce&!}!mN_p<9%Vxk*x7UFo&LKr_;U16$~Ga4Iv#4qje9AgYp`T>bD(D zoq%}!EdnJ$&;r9>Ejroa^{tq@I`k}w;REX3{qL?e=r*XPB23K691li7`Y0!68>BK; zMbJN^T)f&0yGmS5PG&i_>%MqoWQaTTHivZem;Q~ny%cCq(C4b?jP-Z5Cu(tx%?1CA#!fE0yjFJOX}dC~32Rgd*Q=k>jEQ?98D~ZNIIF%%+fNE5>ffm9g1n! zqn&LWyMFizH4>x|jXL{K(qi*6*iX3Qwh9&W@lK%Y&;GzEn;p2^J3Co1UCz`)NvBtJ zL8CHtY5L$1SQ$uj_14u_^?Ge_SmR=J-&Or<{bf-tu#nKF&z+xY7cDqVnY!8xTc)B$ z#mu?`tcAVS9o@MB5bR~niojd_xSy>rn6L~KktpLXk#>xTmnj}85sAJe0f2FD)9r3E z>~V{GR@G@8L+JLV-PfSlm@{c^YQC0qafwOEw>Z$q%bYG^LT|aF7H!FIt$l^(2#i}- zIv&Lu&~fWl2udM}1+tG8bklA3@b;_FzR}r~c#|c0w$9GJZ<{)Y>7K#h@csp0T`Xq~ zp9Et9vl_cuD#Vt2rdVohd>0Z+a#4%6S3%_A?>;k+H&JaFe~l1mkN}ep-(sA}M>SB( z4U-!iAgI!YwL?dX<)cwX^|Jnad8mx{NJIglPnWIkF6WG+OgX?Pzje98a$249^+QDO z?LK7Vr`)0koU%H0z+GkIg5_PK-6&O16+A(wDv<-g{hRh-^BEwq#wIQ+IK*AQ3EqGD z89UkqF5HE47}sch9S5NE1B!Pl=b~azx>-{+SDW3!Dza09Csuh!oFp}@XZI@LG_HCG zR^a;6CtA&XozE)Cm@HQ;INfHI#KQ-t+g3I&RlH-~AV6t{<(A?PK_}lS`keNcVwVew zoI2bx7%WaOeyjNdBsuDWIHjg@CA(FDQf!H^bjd?TPB*i=vD9+`7q9Fd)-=x5u9%e# zQ<@EIf#-9BLQQK*{j+=&xxK>=`ozM%&fz~YBc-aQ5^rIwmyqGJ$5|&CJ+Wt%6;Z#DI(+{!hNxja){#OwW8je&_J*T$h zt4412C!=1wf==AA4(rDYD<7Sn9-|)uCiVE3G0$hNc6Q|IV!cp5{oOOdO}Q^3a1{{W z+iIQpu&1Rdu#QQ5VRsWv|0gV8mY2R**@6RPj?BA1NqS!8;S9D63Z1TKVDmTR!8uwL zwHc>e_x%BOUy65My2S)h7WFq7C;=Pdl^&+2SxKr9WiQOIbe6C~#=m7a!1|(o(AR&> ztuTgiCg?!pj=)f)|%B7_lCWC0a_XE*z?*~Jd=A$s(G(s|a{2|I1o}GKC(`@eo zQpFcvB76qbOuP+#mCDH3I{Kt;*S&v0AGLe^N~vG`K1Z{A*jm?8^5mPeG?pBfTQ9=a zEe05egLA=)Ii;(zUET0dpHn!qr@pbQx;9{-i6ezrv0O# zY`z#$oBRDc>O1`Vr$w*g=eEzjH#m+lEF51pMyIbWn+N#rl@k(orHLUM9o%ZP@&i3O zPM6Hj2n#lB+?LFL`n<2h44CEQiR8xD0q*H*G#7Y~7qF5y&DH$wHE3HPAS6WG8mQ&`!!|gLb$kUFlv9)v~O9>C6f~5G?uU z4m|?8HbhNq9~%!&w=e8uqJ4J8srtO!SWIh%e?Z+MD>yhk`Qw*LUu>j^Q9Eod^+JT3 zAx{}7Zq`>JQ>2(2(Iu}p3DTvRj2rLei7=?K4ked~esM?-Y?pA`d8i!rqq!n6qyC@| zGay0%>6ZTxq!=-wGwvTir-yjl;6Z{=853bBk7keE23eJ(*3;K4YNdz9yT(WlLo|Qw zw8=d*Ao3^AThgsD-`b{nhEbz_-srbZ^f#XfrARy&!|qTn>KGwT#B3;VOnGqh!{zjq zD>A|H4BD24n<&`~qY{yFau$P*W)J$bAbx1ELyt7`4MvAJ049GyOG0}X;Lr8l+E)fo zN%mV}B3KwoUg0}?OsKnk<8wK;D5l|D7d6^CNhO;kM@11XzrRgb3E1N^PciY`mz%D( zO)0d;8+;b^(x%+_>st9Q?FqU3=!F1gEN52ydaESdaNzUb1x=uT6|o=7>*>O_-ELA$ z_DkjyqEjnr__?+Sl-TVxa-&DMLo+*Uhfl%XjrDiQvgl0<*+9+{mJQEeuN|}v#ZWz` z_xv#8SNIJp4{Y6t?wfJz*18TB#U2!?{3d4M^zK9YSz49Go~HtPLKPku1i8&X<~Q-i zJ%IoF{b7OgJF95P+IGLgxYO2j+vnsvTkPi_V>_-4pfC>>P5xCG5}pr+spi|woF(`h zHhy2*Sk;}%^pq{O+q$-JR;4V`LyN`j94zIXgtmI|(d^|QI~xcN)Q%RJG>^Eg(r_6h zfIX;UxDnUp>@4QeUQ;LRgQ{^l^z$rt-Z^*Z!(93@V%w*-Pl znh8Su-BPe{P&Aj8({gKI118B%y00EgS-`+CEiLjXEEtpRVUm6wT-_I8izpnxmILit z1>-SpwoSxPPe#+Qh;oW@BJKp(gP{g&Y7TJ5%?}#QsTP-32Kv4FFRl6dBXpwNZsrK( zqN?V;Tsh9P!cJpe*m!fkshE5#>Bo$nQf_zJmIjdI-UNcuV zZC|^b>yTgNIQ75s8x}56oa>9Yov?@rCO4Ql^m+XR0w?gyXjBz@HSwJ#kBWd*!6_>X z1SU4agBZm(B1qtgiF?Omi0Oz=at*h_PjzY)xpNQVEea>`b%2d_d65k(cMElqpK_hAH@nBh}N8Q`f zrGkj>d;7R!w#6je{{EvD2%8mmtm}z=0p$eU{Ba*I5JruWGN@z&KVBE0w7swo+B@Ep zPx?|d&FuUUQFt;r+x4~WM~vsziJJKN0{V2^sea9jDU3$as8m_=DM9<~xmtlu&`Yoe z%aV+qu05Wapb+~8$(Nt1^4vx$x)m1nuO~3AQ^90oVA*GuMRA#T_D0~c>+iZ+$KKTG zRND-!tt}tal690^0SY!Q<7Y^TT4EWnCnG7xRxJJs&H7R0!1-$0MgR-z>2uJ*iJ>eP zG0Hi);M;A6zgE_fD%*=??6n@%Lt@P~ac>QuxlhGkHdO6jW@3V4KSsT>KQxCH*4CA- zbej0+w(WujK_Tw-4@VX&YCNq95*_6Z>u_RW4`3o=cZ^Q4#WQ(F*xdDj9F^T+Nbj2m zXXMKd5T4a<)+$?)JUoVX-c-X6)-Uy@l)<>>YRBG$Zt0bJ;l)1@q#3-juE^AID3{4W z;lNpImJ)lXcaaxNj`81+8iT%w3Rq*y)!fK>h#K--=N@{l( zL&!HL4HcQ&@&tS$v%f;Sp|M0rIe#d+f37u@Z_udSikkS7!M3%~BnG*bKHl7-i#)5gapuyXzyb<$tm7i?MH2CMB0T@07$B+_ z^~UML(|`VAJf__hf)NS*SNS{?@JA`F3yMnxKtazsu!p~(z&ln4uuR=09nR2KY-O*9sCVH=IGYt+s=638)5fo(6MD@U!97A#xxHk z7-hjhS0H-TI#}u*fC7?Z%kq&PsL(G_o~ay>+)2KuV*jDAoyBLo0OhC)z~JLHHcYX^ zqZ3g5h`PVZ^~Cq)YBf!3w1kG#GOrKXiHBMa)CAYX>zi@=sKPpPvzVKye29Sr;9Hc# zoV?oJ3qjXhhrYMHN+U{{qJ4x~L_Sj`Nc~wC=pXp8Z0pTX{R@9yab%R)`>5j7zka{M zJ?g7-e}o9#XzPgFTePLDd!)XKDPtKalvF4g@j#7a+;x30l$vp>xywG2;gI;vy(xT( zS`vi0!@%Yfj2Zi}^J-5$b`vMW(nr8~tB8(13X|3KAZabdmhwG#HfVRUGy#3-h1vec zhl8VQ={7;e2^Wp$teL*4cL}2A=2!=XlFBu&Y|zT(h=K zP$?rc$wIgK$_aZe0!RwC-VoW={F}Lzv->m&gT`%w0y3 znCwA$f<50;!M?kkL9<99!gY(6MkmdsctCVDMK(SLLa4};If4X<^ZfSKgA844V@NLH z9-@%VxMp}u7R00lJa<<3?p$rC;Ot=q79~SLa?KIfeDi<`>7R1GT;jbs31X??ewd=+)7SZ37Dx5n3d4jPW+d0E8 zrpBy#5&$+6tF~7EdEyyRDFUp9-TpB)Xf>DX)W9)aUf|vwsw7b$CO?*j~G-wRP5YfAjho;q!kOo zH(>&~Y;|rsZKdJj1Bm346ln^IqfRFK6`DZiZB`~yBWOn}x5d7C*!gZ#&un|Z#hpVd zHf(L7F6kZvoBwa$UIdofVApNPWp2K*n{^EXH96aq6;Zhf;7Bv9>9xwtlQ7H*1hczn z-)Nt>yKZB)&2~98R@wwj0 zz#FX_oAgD<-MQrXmBGx1@IdG-Kl|jX0EFRQw6Isqi{+jz>o>Z8EQb|(<`^y`-*9RA=d#|(*nFOhr#-*!RzwET} zTZWZXz6uyoijPrMyEH!5YFupbVf{@B|73%6f1Sj&fvQhS*4|y;epM63r%^h5y=V;P z?k$KVt#0&{R@gG-)fvszDN$7d${fUHmHT#vmg{FlxrjuYskvOQy6kH9VHSDEysj*tqnJwpxTcz~s}YGC1nFZ8Cn zZ<}*|fyi<)+}y5aIC->6Ej!)=n(?jOX!zP5*_ZUZFH@@P`zJs@7MPUjcI4s8v%EEZ zk)0j2jN5!Mak>W$b%#gIZs*zx@yGElH-S1g;EADvXPe)JymIsbz+raTH9PlmU63*C zFP_U==%>zqix#vs`pdILraqwNhyhgc1v+sHrz9s$69vhJlkLy>O!kv_)Aw3>fD%1` z0KczeuAKHJQOTE$?GMmG?;3W{J+$Qgt;cxa3>LR%WWYH)ez$4)FRD$3CJS1seD$Rn{yoRQd(H6C;pa?;DeJu>mz3# z)0q=0mZ+QNUPJBKs zbP<50lSaqHDY{Byn8B6OMjnkrzlXqj3t-m&PHbiDHdEg>%S5XpSN{?3K$C)DC+QT!d3 zKcGJR%lx0f6=ePqq1!eLj}aO^zYXqB@BA*>-ZL%6+b=o&gEw+SM_8Qb-%LJY~#6!+EiU@WSH6fbF0Ia(mtQub-@< z^lu5QRV_stF<#ap-P8{i^~;$HR&P-w{QxF#TWH8rSjVeZby^H;$15i)lW4S&6(xQq zdyKUHxsF;38EdY7ZB!Zyv4H`3{lFSbh<4+#6=%p89=O$eH7bYG@+SZI9vS{4_Y&x= zvfn}>Z39c61Z{5n^~ciBjn{pFCJS_#*TzA{Mo_vS-tks77NaUytgX${P1w_1=JFt2N}|sNBrDqrj?^eI-BE z>dGY1or%yu)Qu%m9R43oR3D~pPmF)NHH)qe<%8sL4sii1YrR8%6|$weAAMn*>>>F# zvz7J9HPNX8&&UkdB9SGcas7!ef>OR{ywX3t%a!}1-AA~E9bRhBB5BK0Mi?QcN`RCrt9Qifd!}VvSv4#Si&HxH5 zx}wkJAEhR6kq5kLudOh8FJd6)uYY=G-i^Kiqksi46ngb4KYiTTO;jQe>Hbdj-5@JI z`l-dR_F!4^w`*nWr|6M=iQ%{4QAi%-{i>=nF$XEI9U6$4TV&ylD~lNnZ=L#0`fIR> zm;D`$fFK=uCZ2{sFG!t+WA!)xWz%1zwsN558`Nd0O$9vc7SDhFG|Isl4&GI^g_e<$ z$CuyMZ$=}gLkec9K0blRLw)m@mp+U>vrKhG@be^FFMtV>jAUAw&JW}&90EigcdmCr zW=Sd+!4Lv0VBhVfEtmuFAr5oWOb6lDl^2(+ z8au1eRV0Q4!e<9_UF!*0d1Q{*`V&C>gwira*4;evwumDsk81z?m5 zAXY)ta#BS`eTdJE6T0}n@#MkGVU@#ba5>BTYqZ@$l-BEyw`Dwbx&D5cKv(6n=qp|d zf?NvsPa1-WCJ3i_#Q=!n$8J^@YM$L1t}}C))o*urgS49jEByKU7uz`o|6@ziMQ;77 zU2hVukvjM4-tqewxsBhKOkix8r`HpNp+kB4)fW93B_qrHXMf(xVru7JsL*9@w23!| znGB#X%D@))?7c7F~?=0v4>}PMd7V&Rh@oyu@+np?6=1_D061e{T zWO=)vPK*-&(5e30jlW+!Ji*ov*aCfWfLv*NG&x-qApX|M{x_3gW;Hkj|3eb{d#K-& zESWzf5I<;WBolqx;Ehj0!v&HhV41$(=_~Ux%k58rIl);Y0@>L0g$MVS*ya!1EeDD( zL_x_obzHH}6_~@rfprG@3N2#$g>S;Z0{xqhRB!?%jokEw=AYdEOM%b__bIo9p3RVZ z-ZXq3w_As)CC{|~8KZKQI0mS-{yl|saDak6oA5+JzCo>PTloD&T;Ykl#*RuTDlVOZ z?P|_+(Cgpj8NhNIRyG~o>reM_bCgWG;vPG!sJj)q?nOROEBI9B#l5HfXIOdUpiDg^ zfI~npZ_AHtA|-VwN6YhUC+U2iRs18jX8x2D(jBON=e|6lbN;<^?@=;I3gESZ#?Gb_ zT&4q@iNGZLKKbK~dhr7gWD4|YB2swzJ?=EFaAy+8Wjm&BH+`WartvY;Vq;)I)q@DS z-{VAXx&g~-I-8Xm%1g7J@3z2Usw@&j&B<#rZU1VqVh}3*TceS7zLJuJn31w(>2!j8 zqTz% zh`!h1)#RwnLO1k8r9upsAI$EP+h~!=BkNqTtzVSSg%@t9OuBsu$T<=_UVAfiH)$PE zjr<4kW>ELQwoum%VR-e=Dd?MALzB}UMX+QxvEhn_Y=G(UVTR5w$RJIN=s5>a$O=M9 zDFA2{er6RoRh}vHIGnCAO#ICGp0Fa_VBsgFVmOn_lr{NVJ*e@sz1l^1sfm3@tX%lv zeJ~Sn%EW%QiDv&(1-q<{-*_PWCc|Wg4e>zR&+o6f7Grg<`EFxj&{^5026;S%sUn}D z_%tC*?ltbf_Fl#zt{#GfqI)z`s-jQIc2MZ$#g{3^j-0mAhyVgJ(yzWl8enk|HKEz; zla2v)^mb@G)Qri{XDTl=UxgwL5U#)Y3Eh?%157Izv1#aZKOm>-cw=p}xG+mu0of>% zy%UamKOg0lF1>P|iyB3LmU%}y!#)6o88PWFMeQ;zFZ|@XsCggS86hT-gNng3pX%zw z?p3x0QgL)X@$?j@w(dXB|8|J4vpIZl?G<3K$?;?J5Rks z^CgYA)-r-`^AiD3>Wi9p;sruDer#9NgfNoE&tXC}di~tvQiykATybFj;E=1zVDBEF*$-HQ^iO21cRAW| z@}>2zfR_d4fH=3W5?O2NY?EKkg3gY=|6O-wBkPXx&s>d(4qGZgzHJc5$5+XYl~D3R zS8BIidLIQY{KY`9-uZCE!qtMxhDTg3#+!4HmI8b7l- z*KLkYww$fseGPIfEY&u&nPL7%~$ zi;dM&Hp6mPgE4QcJwDLU9L*aFST@;b`YK;&KQ@eQD=PkPXiDiB89#>EeGzQi83TDv5Jg_W~O)9Lzgw%lg1RD2m@`+uexbsfkCA-sAd&he^a zDLbwx#1?Y2yXGO(MDo;nGkoI7XgS}^V$};U^D!}EbfL@-C}&fm zsQsp7@DlR}Id#0`oARzfw~+ZSU%j;)v;2DzR_adw2UMPWK$XCvjr0xjRIcI;)A3eN z{<&;JeO5ZXZHxOeKF?B2P)Xx_IwwTF%XfQ>9~MVQZPDp=Y;iX}9G&^0zTY z`%!_~SF-5>W@fCHvq2`H;l#jd+UZ?t1S_@^%lSVq-n85Y>+PIacLcSd$JQZEb#8k# zcRdAYd@V1ONT0>^cZv#i4Yta=@`biqC)@5yW{F)WmJZkCkOu)d1`f0QpY@iW0Y3BJ zu%rKmXWfP0!xHvEz~z5I{r(m#0@5a+e}xq{rLDuC!^@l(RywclcL@`cJSO|!>Jype z5^JdUEafsD>H!2LFnwnc@w_k#V!Jn86#KG3^(g`IBd@ty|FB5>0FT{PowO&L2QlF7 z6X~~AWd{~~Y++$;vJR%=1lj7lg?l-v6D-H70;iGj3g|ax);oH8f;*B&mm{}o2(YDm zR{atp;7PkpH4w78z`j@405IcWd0nH$3CCFP_Y{a3m%jbw0=gSD-(4~)Ev@`&<8aCR z)?Ou7_}eSijL`O)#JJwqB{D@fW&$Uh*vv7O)b^W-blnFvJQWyvV{Z z?eu2aWNbU7DF$PoT6bo=D*OeU;oL9$QAcl0yhGmAZn_7vW1=MD_Xx}Oha{o|i7>$r zo(p`(tR!=89IaZ}ic(#F!d#JpIyJ>c`Arnos zN53@foc~HcTHL^&!YQFaXSo=63zP?>eO+Le?m!EK8EMF?jpR$FdoSPw&vY@bL?$d8 zC!ND2jW7+8O7V3FJ@GZGA92>DMu`&vft0%-QiX)?C4G8tb_%@=AG^^%q@n` z@Xb#}#vL0qUAq%`gR+QX_wEGpal6ao>qiEWyP#Bg6;`4l%5{xu8=?O7lvgbLxVNGU zJ>SOe#$R_VpazV7LzcmPah?d zyT)%;U5j?=D}u*2@@#^hHp_&+rP2Bo;io)?hr0*TvvT&WhZE@1>x+MK0c(9SFcUUK zuxP^rPH)k6SHR;hdx$sQy(-XX-COQEPBjTso|zBFG8_#M8f0-|tb6xpn|jrPo{|C8 zS8UHiYp$CR44l6*rUyZU{}L6go4&wE)?&|^#KOiZv$RqNkU%r|pHfKqI)@`F;0Lx? zEuf2k^!aLmlshBB;Kr$MhVvgbvgS5T4@|cNrIfbGX9*O;|2`U-JBHB!?&WtvPR(zVfjaOy|?4zU?2sI!YZrvT$d+-d$1seP1fy@|5eL6Jm2F;3H!RE z7rpCC0LwGpMv(!X1Czy~1{M$2RO;_9h45F|=z;zKyXaJot6K^mLSZ_BZoBx=5up+S ztC%G-thu~rncz>J^3E&BrNK<==O?louYi93;B$KuP-AZ7>gLxB_|Q+*soi_pr0`ra zruTGm+a9*?y;dFFSKwiW7XA@&ee8iYZMz|pzhu3^fURc37nt7^UtT0??}nkVjqjcx zU^5Z8dI$7015Z$MhVRhf5*B$p-h4(4irfNpAok9H2()wGbv9U}E+E07w>P+ah{EC1 zvW&`g!!Z<(eGSfH?$_7lv#1eVLA|YU4~s>a@gYK;y(wrd}m{g#s}|uKFOw<)J1c(E^`#~ zGV?Yl%C+eEtO`HulY{zSJ$m!O!bly^&$N)r@|*-->M=yV8;6^-;-QzNk!#Y!2hPwj zo`xXx6nafqn}+_H3ZMU3WCP9@_{S%+FO%G1GFrjuws{0~#Fv zQEcg5%0iLCFI3k@lSC?2@IR z3Ex=F1#8j45}W5$*T2jOMwZ4Xf;~h4ISuKyy9HJdybc29rTssooeqcEd`Gxf13i`2 z9tq07TW0f24cQIvTD3bdY$Cb+u;$KR&mL8|l~j%xAaxvoSn%E06>bS{t}~>53)P#d ze>|dGo$6-zzOyzG%&`8c;EWoZ$Tb5|WRMXWjLIfu9$~Jk%n~p+J0k2B7t#01vRVdH zc3u4_5VP!3A?QZa2am`G8Os@!y2_cj*w`xU09rHvJ*ug60kpadAD-E;1X#BCVi7ou zocnfGMBt2-3fGK%Rl|HImFiC@n4z51Og3IYo@#)80KjAmYZW?sm3kT#AMQ0xb&^~fvKO+iYrmj>s(H+)Vbli7yQlghG59YJ zJjgTF9OwK~SoYU3r;Dn>pCeHxCsR!q*YsTa&u1Xoo-iVot!)k%GuIpGOgq_W(BPL&II&pz0DfmayH%MJ#w}+XX>mp5d}OrlMWdw1y#;yKqLa_a{ixcQ%aOA8OB@8EvkIB zGTgl`e-dM#9qcC!8be;bz!|Kdw9)Thg3?7YwXx|RzVro;Mv2O{6p^W2hj1NR&Z;-- z-=dd{ZT(Wym&uyr9UZ8>bFCIXpkjgIFCY~B-Ga9K-GV+$^#qP=)pKTb2~L$Ybo(x^ z)ny9Mz-*qoWPi~$Hp{S=db`m3BFpQo>aYdL5088C-I5Nh=9T$KE>gPa!ku_*p_2q? zMh!37_S%J~_8-ovHZ?}doj*XN6e9>yXR@>o<5nwvyDRAZ#s$g zD$hqe?{W4Ov7LqZ^uYb8njw1FLhnWX4(tTb*{<0n-Nd_|^tuW#VBn1R#h1=vc^8iK zq#4El`L**7c!A$-iGPa||K7Fu^D|bdMywAsmY#sLfH9@YFS^~>h8p%Px+S(%Z^^XD zwr8w?kYZ$!9NRWEIgRFmLD#W_DQp$^`PNAq|6Fegj>B!od3y>_@!(AD=MJGjRyYkg zkUInJS>5ChZ{%T}s|~~+29PiUz5;ZxL6Uxy;HjMY$^Q6$(td}&^6G{zEm|O20S9-K zn_*o#9hZW3Rae76VIu#Fwl|N5`uqQelO%*nNVZB*31weqXr;0in(QfM-`6pg>}5@o zY$GXq_H8iM5Mu1IjGbXDgRu?bde745Q{V6PyRZ9xJg)n{8t*ytKIgpl*YiA&uquG$ z{@)-ei@9*U+7nsMu%XR^c7EkC*+~Gb2Z-W;x9=l?B{c&7Hm<%pQi#0A?Wo(S+i{!@eI0;>lcv3ya6~$1IXNE(eVG<04tyt z1x&Vq@P7+JwN6Alwyh`3p6tCBA!g(!TQ~;zgWb;23P5G<*SWUXsA)gXWIX+GP~}CY zb6eHA?QNp#)+IKV6>}_Pnmc3dzs>TgG{OQ%aEqu(ssE(N&@W#U z{-d{c&tb)2^CQtPQ!3W~;4OY1ic=z*`z%r%L{AKFT>c7gR>LfFZV|hHM4%RANB{O~ zfh_kAvodT-n2~IIVj^^F(aJ3~ED>8=qhQrPhm2G%!93THa z`u+(>7vo)k!Z>lfr+{v_gb*!05wI}eC{-TsRl%SjD@#+O00#`2a7;Sc>UfJv z;mJ(Kkb$pPJtHL97mih!<3%klKhfiiwUT7~7yA3^f%A*Dq>I3k7ZXc)#k9hc2n%XD z$=5c*nQh$DMYTS3GEa;PSga;vi3nn_)R?YQ)1ao%%J3L{41TzeXSn2&}5?qTIY)Uw2x84g^!$c^tMghSq z_OqY+r%t!rJmfG9IA^BC|p`;;+=a;x`i!cj9*8^UuUqc@Ra%LHmJ}c6$6KfOm zZhY_vB2vqw+1%(3X?MxMI|^L43TnNn&~)wy7-$mzK81O&O6>Ba$`KM?_g+p}+F@@6 zc7MY^0KNYo?dfa{H7nNCdM)yU{YS@&9DYEEu=YgU3K(zY6c@0@|9^mknjL{tN^QEzDUvss3&z~1EkaHoZgWB2qEg{qOeoVdhFU4+y%yIv zoKW@^yIoHLrEnubAeqXeE~OWDhG@zvHU zQE>;xN= z9!=Sc&#u1lh1PCAD{1CLUAzz5`ZM;co?jhK;B&fgL+Qt(hn&5z)YnwjaubB!O)Ijo zC8`g-(1}DUIRHg|8$`0vcP=jyBsPOFL@RA}e5F$VcV7FS0ZOyPX78M9u5U*Qpaj3| zJ)t6wLS{n-Xoxec*UwiSp-2kPW39zlriCH6IfKmDf#4!~#TJe|v+g(djAeo@w{A_|E zXdjXp^X(8GA+#fpe7?R(JVPMgw||vP|AVgc+(awQh&L6;HA&xXE_nIVXus3qSy}8E znsO3j+lmN)5`dY-U?!C~!9neD!}d+wHZxv3o=<0f=qx=iT##`6)wifKQ0}z^FS-g0 z9yyQbkR1Cc;HW!=d!xC-9fa>p<`T$oyh}p7L(jy z*u`}8yCfpVRo1Na`jN$TedRsNGDy&VNly83xu{fd^)@z(U0DCa(t4bP<#lJ#!lU3h z0vuMIgn$gpd&1I2l536MFswc51_&g69Ey$T(hXZbmr}klym0^Pd`WWbi}jk3vJ>9n z9}r$YVM~yOvxBpUNUl8wc!l}H)RT?)(&}jg|5R|2gyqJ7X%aO{EHW@l_T(8c{CA{* zZ7tqYJ+lm>1a}>x=IrN+edw8sFtz4DJIq9`cuc}IJ6WJiJA&n1vPf!Fin$}2$3Wp^ z_FcjJSD3FSf~~7ymImu3FeZLpuPt%WZYluV6C10v^t_S=RRNU0P>5T4ud%wTL+wcw zY4Oiiq`Fpk=)lavV~1U#%){a0?HAu@_8MnE zb>5f2M#?Og3A-CZwgO`KQ|c%|Z*c!@06D?OvH8;+Rd4B)eU1O(m`LZIS1n{hD(&n0 zd1#iuXppzErLMymH|{6C2bbfq3F8lVivtsGU1ed5th@7l(TadP3#U%s&JK`ytM?-S zjfMo-MBSNTGl-uP?pNGO_c--9M(dMNFvdh}-XC6CH#D-*4#oV4^=et`aCD;+Gd_Mv z-#;t2YJ1F&nO}_CZj_1U`wviPQHF+Ykx9$4KIv_q z_A3tXdC%bPC5zmC35czPf~W8?RC7X~c?`zZ3$G`?oX=d}3)>E!gQ@SG(Qh_BXjrH6 z_%=Pe@pxT;X_BX8?3@`ECav}ic-UJ3$B$xovXpf#*=k@D`{AeeaR1{cQ@R2kWuJ5| z405%vm9AVK3jCpqydDjv9a()}syeviX-7qir26nO=4#YQ!Ei#w=~%iedL@;+4P0hp z(3#yMfJ6gSUHor?VN5k&cDQkF{gFm8Ctkju$(afVZw@nfR4vzqFv)KfzF-<|u2=pr z(1SB+?8a*fM`9lPZ)kX;d`hd<7aJWvoC%4eUP9flnw2}m-!hsb7e_#30j1w_s4w)< zsoQYKA>fxB=BZti$w6lKq)iiToyh5O}hwMERx!$wl=UOS7WCe3ekLL%Zjk6k>_@bPL6+q76= zxPr}~X(~7EKAO`MxxYLap7bjg^+TR#FQo8ePk#3ZF12?TnZ^yHrL+Im^S) z;JhugRnIQ?#b!kN?rL1^GX;q(&W{vHuS}1JCtQ5fG)de`{%DZ zx>vgBXiZLu?!0XX`_srLx~x~bGqp=jNF??iz9&Hp!@csMynqjYE?VyMzS_ghzZ|Zd zH^9|hdizUVdVZKSXll6gcC7rb@A!5(+?y!%-Q|^#mk|ke`rFk9PD=0Z;*)`;dp;7^ zT8*42w7`yuc<-#XiWrF*sb|NU#u$1LXat$O(54Xm1DcmD`?71l;CpXIGxTL64hTXG z9y`cq=LE;aIp-Ndj!K#u5>C7bHy?<}e`xi(rL;erP!f;BctJ;kvn6Xz$Z2*-+;bV( zH6}VNUXTM}j8@_HjCh-Ulc%}kWxW!s+KeZs`PqbI!?O)V=zoE3r2`;vmgU`Bq=MKR zWlk_V7gnIAHbwqs1G!)uqPu!~9R*XDAojZwJj`h?W_{mccl`rixA99~^DzhZ97AZd6_!3%wYiQwAijvL2=_*%D*P3Og~&UI zn0Y@>e*c(C6y|~!FPHxM&u0<82qVO@jJ1!4WpLs$s7 zfR3|Ik2o1+MPWr!?xIic!Ccxuj4$=YB4S?UdOV-zivX=oMXB$()&uyj!vW3M)1F68 zbB2w34RQr^cIGa_X+zd(!{D_2Qm*4&gHMbl!uEnr(-zZ6T#Q_3t}|#v`x~|n9h8s* z7d<_}pF-(aX8e1&pjscBY<&~ims0V;Tak3i{BgD_th-G+86qoe4|MQfTl%Pb{Mjk%_$piGm zjwrCkhwL1>2m_nJC(N4j2zcJ}9&w(E`)M5yRh8lOpRDU&;$=E6rBn44NO2FucZYqe zV^m10$5v5QUF(!@UemYrU66{fjCKnLY~bEXfD*~oTo=v;4nPlk=+QO%0FYQ4bh-0L zDGEFmZ$!-m!q3m`AJiBNms@%X>=q-YBtDStC{G+#qol>WSZe||6fGbb_RUcuJ!ZTw z+RMh^y7npk;FQ)>%lhvJPPPstJThpq5v-uP!9HAWPvwx~^Tg5sb|$l}Osm0}Dt;WL zk0kOJkj~Hp>{M@*eQ@K!U2>C1S)TxRAeBFkg1ue#z0z}#Xn~fHRsQ7ld4+j?RSLOh zqmxcc6u7($S~Ap77{~>P3c;c-%S0-cH~>*QvDA}Yz065AiNsSp#P5_?^ZornpIp%2 z_U)^ye#Gye^CgxQYz8iGF8X$?6MsR^CTbpW#tBSBNP#{*oUEt2X-_nYLZyA1#4}}# zJo?SlNjc{85hKbH*GY7wUx_(Ax8D>(i{7eLVW;N4kYzNyD5T(Of|Cpp=7;V!xnEchJNovn+-dPXv>ZY73>ZelGp&J9EbRD@R0A>WtMShxT<5;f<(fyc-dLt}%dUegcOOcFUptn|W` z#POEV04C<{>Fj2!>skU&vKVzw^(lfPp0-TN+v}ylvkb77OQf@$i=}--M8Jf)5TQ3oZ z-O$S+g-|~FgR{`wV}@@6bcuUf0(7Qe^p4&0xc3x+qY$sk*<`F#=kgyxl2#P|2ti5i z?vS1DD1`knKhaDWlaxrM|h^2ic2AeOmUzFh|bG(T8Ma9h~qMwbo z&D_M`g?Vtr(h~@hV3s2`0G1^H%mKdQ|JrL+2ie2y5WmG~K7IJGsfAvko%4G7>#r?f zpzttZD3IQr{pvI=%G@%mts7n2J?LW4byM$_yEJ6~N~xTx$-B=(67%%jM27L<$KC)s z4cGx%&)x57k(aM>d`U!jom$j}n;91o6j=-3CpF4)x`#{nzn>`apgLog9M8;>CjoJ* zSn;-#MlUS9?Q{vCBc9E($|QJJBm)#&so`$V&98obttnVD$e9xlMwer-tKl05$0}{~ zdNO-5?&tO{zl+2ccNhbLHU?d6ike$?%iW%Z)K0?Pm_)t`j3tK%4_`v1m_6WwC7)OW zT}hZm2y$3MJ{%ybUn8gG9$3Gr30C~m(qP*?XL{{~JM5NTLE6v+Vkk$Tb!52(rH{%# zKag{kim1kn@fHgNf1s_AA5^tEeCez3`e2Yo=#SWeZXeioPI4ut9PEbJFd5)Xc&$}D z0sR69SkEAy4vAR2pdi#pL_Pz>7loMlS zUVgu|GUGvX2i~m0J+gyzkUB7Kv^3@!s1bGnuqRh}h%d5PNxPV-c9+({JOwieuyZ>R zPuLgiEZLI4);^RF>z~RZS@7+$Bdab&c0-)D zo37b{AG;Q9Rlp+>e?UvlPr%VXlLS#_u%A?w;`DObxe)kOPqI9gQ_`kB_0~WCQq)(u8k|@-YPk0Vi(2@{g=m&e=an?0OcXF1qVnua&ahs48W+mne9% z8Hz#|Chf^|xVYt@&eS%zJo#LiKLL#amK|U(isz-3T-zOpH>LTpJFm^VKR?ZTu*!9E zyACcW*2XfKjH#6vP+-gf^X6?H{u16 z2rYala7X1))XJ4(*)*7w`?a-_momlB4#|mtyt=Q#%2p?9Qo#amZ{62NQP&#hf9kx z8V+2KCkRpM@~<6eFHIv(@O1@Zu^!>zw2g!LZcI6K9;kYH11c%85&bb}Ib)CGt)2tP z21E;~Syg$GZ0gJ#@oxc0?0qKlMfV(m1XiE38eMIW=evvfw~Pd++kR{=sss?=w5Dv% z1sA6fHq=NBQ<$3i^_wJqmKZ}fHi~I`fD&;NvPit2fx@UoYj9epzV5%JCuL$A(mi2hfiQ!Or z5NLJCGU8B@7-HXt_Ov@7^#H}*Z4e66X6w}&4WxhQMM3nqSk-qicq-(d=&wpf4?L9@&f6nN}s7^>`U-1vA^$Kco? zfX^gmKGft@6ZL@$DC0zEe*XpGf+6D;-zWnoAYN#cz8pI%mdp;Q_4yba7rCXT&)ClH?i4ZVRbHmb0kHm!OtZN2AgYP24uX=*^j za`q~~6%3!m|J-&5D0Y!F@Jn(JnAk6*F#i78!Iuyq1RI1OobxO($ z_Y&?4lBb+H4H~sCsM$*B>M18}kk27`EWJvhY_p^rleh$v)gazc67+Pbmu^&gei zrx%`Mv=TLplzXD)x8p+X#mw$;5Rz1?^sZhS*)|-!BYHMt9;(QZ+(=X+86z1+${M6$ zE;O%kUBnZ(s-HpNLDT}7%;Vz%j&jyEtBV*%TDK+nC{wm$SiokVmsyzy=;es5Z~e>} zLR^$&RJ_ZF?lJcqRtY+hI&1`1XS7_ znDPuJ@xo~R+3r+TK1bk=m}B{Lz@nP8Wk!)URs^V0&C-y6*kSi3G@J$){qn7E#E$IS z6s8?<9^g<;Hg}J)}hOCyU>{5^47fUJw2Y_w0?(s}O1<9{DH5(g5irWl@ zS=aR$yV%S=CMNy7W_Z1DdA#qHD7-Lw>MXpJGG4fzD2dN((;?$CMmpG1ygO{v?DIo` zgNb7un-FC=O@+rxhaK899hA z)23X@A-zwQr@B0UnCT(UJ|!|&+#7uv${A49?U?4|A3e%d^^NfZQy=}JGyfq)XmAX1 zJUn24)3Xgf3$A390ptCe>A7?U^mVLg$(KbsAQK4~oWh;2SR#pBK)gGDrR5qWQp9q{*T^A(^bp5Tj%H#D&&i z+Fsqc)$f6Q9z(3qYts$3+g7B+ZEc%e!4ruIc87QUu)HPyGA1)mb~|PE^f_4mXM+b( zi_k~+-h5-vbJXA*IxitWk912F?A!_|IalFl0#IZhEA zKYxYK^NDJ4hp*qIcD-KDK^5UpOrM+obQj#u!jZRSeD(~#pC ztCFaePps=4JV$Xq7sb14JGwsdRGWShK9KR=Ut&u#1cQKk?-?@@JkCE6(_M%r6pXs{0ZpZguFZH-$>aSIoDBA!3T!W8gR^$1=CIun~-;$lTVW8 zpyS;6g*;>BekjwvbuJb=7qjIPwZ@e^L{^Jt*OD+&^}$dWJu7n{)5vW+z^3Yqcp!Pl zVunj7D>)~Ns(}o-CIT6m^{wM%_9sqNR3MV_jGjlI7v2KB*xvHhsn9o z2qo6|rZ8ke#({ctow8~ZdN|UhU`Tz7IcU20-FdKUd1e;at9T|`P5trI;i`GcD_+@3Gn|#D*v$4uJ<6}fxx=Xtwzdb{gdw;% z%35^?*;0Nla{)Tzctsd!u$-Od)com45I4L<8KScUM=EU^3Tp!pWq^#$wr5%x=|y?v z?D%Pf*5_@&jvpnP-4iK53BV-#@%as3cV=NgmAQ#>o7A%JeRUKqzm{GA$FE^co<0 zWPRtZE&`2Y(}yhxsT!Bzq%#o^@Ox%T8nCXpqtysp~p zY*^n)tM!M0N{(Y)-OxKB+YfPbw<*6VGf%FKA@$2U9iQw1yyVKxaobc@s9&I}9+>O{ z%CdoRH!3n&x`3zJ@mEdETW8aB`~;V4?y}S?_+pR}W+oY%PM;`7eW{|Fio8~2iDndT zz0(A=4}E~D&!zT7VU~`* zEh&$;8B<24v5@5mh$*503j1BRT$4Mm#8k6vo(70a%Z$k@ZQ+Kx;q{03%^vn%`e)S+ zfpUj=JMIC#KLf*YyHEAvM*HZvIwSh-zxy*r*r7I)V@c;bZw<>XKBwQ!D6|nZ|I(w?Ssw!{rIm64VC?SCh z0d$}L5tpc`v4GZp7J}(f8s_D0j8V0YRxZ;YG9so9W}(QkENZ-ZGR=LIc^|f*P_6u; zB#eQ_)BWh`=+IKo>-`az8=2SXd*KT5gE4VNm+t?wfA`d+F>(~wA?42W5^G0|n<=ep z*q7N@W0s1WQ-r5{kyS;o+oY@gAvQmxlO6VX80HLx4KUDC1w}H!ZaFhSkTJa^x2;Fj zMQ8Go`TH{E|9DZO$8IMmw#Wb;ByO15CJvo=D%WJBHa?M^)67}=>o`N~(?-W*U5ARb zAP(97C-kS9o9iAuZD*ygSjiEE)ySTY}{}jZYrS#TfHtDgN=@gbSXO zrL+dqn(AkJO@kopkJl1rOb5GEVWnr{;9PI1v8{3P>&} zd+s()jMcWK(QbFBioZ8R*E(xw=X?P%TOO&hO@r?&9g=_q{9&aTMC5qMVhHH90o`NO zoZdMZ)<1=LzJHk1KqLk*_#c?Z`c)1i(VsnBQ-l|$Y$x{$uSfrDB+koBzE7mAV>B2? zwPxxNf889GVu-9*6aTHRQB&Kr?UarB=9qlvAH8ixrY(m26S{>sHNftZBbjdb4R!LU zKrOlGE~GMz96LdKvkZx0or(02zKOmmc_?ZbVlL5KG5Sl5ELP7y5$hHIdP(`h{U-A2 z0jZf8`xG+gcPQqxKmzfS!pT4Vs+xiGxqsZTawGwF4v4|-0H8JYOP7v>Q6iC!(*A#< z1Fmc}6cqsgEm=G;xJdEZHX~XH`!j$61;R91 z06!i?xR)-{E(ctVv-&WeTFF2d{IB zZ#G)=_R!mD8MaqBm`An}Vb2RdyjuOv33SB+=0cw(`l83dsEbzi@QT+iRJ7$@r*o7v z2k{S9h93gnly(;=)QPnWak}Na@QuYPo~eWd-T%>=C;7Dqj)K7-oH9Bb<|Dk-JM_}c zu-y>>m%EHXl!FGvF^GOWPyW(t!R`=raO&H~2J_x$QP##gqE?}Cfkn+OE0qZtfI{to z5UQTxNq0Z~JAO7?)^pK0xDl)SCBzUlhu||)*+`f)r3*po+#r?Pb^EmUnv(PC#W)ID{psmEkHLqw5~d zKYui0Y#sDLMppck{*&l0$ENkNAMv56tg~MmWui{s+K?YbxdyDWFO08)w56w^Gl9A{ zKqB*mFrrM4bn07R3I4}NxTm_xuFe`%Wt=@A;)B8*WKi*lx3N2-Qc2EkvC2$-dSmj_kJ1GaH3~)?-hn; zrLr-!0%Lc4qjb$ud&{{GhtIx6YUH+p;-#tk1xadCZJ(H)ZENa$upn# zG!my}&X*~{6E0V57l(lFkEuXdzxAMc&rGT(I<}8XC^`HVfV8YOL`YnS8hA5x={{nvsAR`=IOy7i3Pvyf|0> z^Dt+J59`;TcdIb=T@q%eVK%xn_hOE7QHnmwIhgkrP^OZytfyz|5mXXxtSas=i^k^wx^eU)_)uYBd_f6FSNeon@v46qmEg}i!sjbgg z0_I3Up`E0ouAJy1tdSV?hKNkv zB)e2S9FkHs$SA>?BsV!G_@fY7IxNud2%J{QBxkpO79?ML$ZrC* zmT2<(Odyp0dFq}`#U=@y_h*HM7-%~tw@~uGjR(*@E)HfA!=?e{vyuwHryx#*8nRMOnb6lw;O6kpQE+O+B(hN*PKP9~0iZT%&)`94 zm2cHJ5@^cC$eE-Ac+;s7|K_kV?ZTPNnOJLQ>!uH;)xBavdu*O1P&Tl~!5<1e*6M6q zm##OU`9B0T)7szLE}Do-W^15sC`-F#191-Xt`JRI~Icl ziC4E^-b z^0K5rX7^EkpoeeAMDT#Gg5ViP)L1fqe9z0eU)(1Aup2n=M3yNN5QqAg>Yzd+IPJ6Q zLBig1HyQ1x@rNL=(88j8%%EP>b(o#}d!0mgr>UI{`vA(saPO?}IGEL$pS%43m_Kx@7bEFi>FErc}(N z!dh@9$5!;yMMvxB`Nn!;`A-QTsQMl2;oO?!C}BLYtfF__dHv_T8O={R;yYum+nq)HX37_C z^89{Br!L1cu9f|wMFV)M%`uDP-|*p-;wEx)?*Jt{btZ~>{2frP0@-R2YG?tzK2kN* zDF$6Gy30xYs&L75TACoSMAD5J6M)zR~2u=RJR0fv%gGG9@=9 zxZyg>fQPd=y4n3$5rjKJexCu)O({wW4*350`X!K;2S({x1@9KR{ z&y8}ov85_VYxq6KZ;tA&ZaHDSa9Gka)Z}BKUt!npW?y`F93{x`JJvTiojjz$Uh4m*bAZ9Ncft*<@kwgBq;^S|tHU!uZ4RZ*G8iE!W=4tiCJ z&@syGlbU{%d`2~kNB&)1+i?qWk@#ND0O7Yx0(p!zH*hBpMI;ec7~mpWV$Z9KB&{?) zl>S@H(lDhQPZm{0zWOqOdgD5U5F7RZnY`fFFgAm9X3~Zp0#%dFtr82J>s+F5-)Ttw zlMijoL){}a1jzpfz;WgKRoqIUCx$G4zuEAm>Y!WYqmF*VHT^8)wOVkUt)_^j#5$-$ zd%xoDH~gAEA6O}!iY!4g7CO9?HPS>qu#JwS(vU*opL~E222{Ao_VM064g2q`e!cS4 z(#bPDoRqDA?HK$c6}r}6^+Bc5zfLM1bJLdM zl?!drB+iMys>hBtEU4rEn4$AB|J$75j51fEA|4h~e?%uH;A7>%VS*lY+ z%67QR(OY5kSpNXbG-wv1CgJQ#>(vjA?p6@t!T;0W8X+Vaql%i}g*useh#VUBjr^?GTvW;#*sAGEF4$a*eS2#Vh>E1TPHkW_ ztv37ZjE-95!RtL@tWYV3Tn_>58w-k$T?;EE!3_+BRiTDA9bUS@-*a^dqckDUm>|Z$ zy_N^1!v0%tNc(+^T~=hqC+F4|J2*{1_9kmPZqExa3!!mLPP-_;s>$F5%}1PWb? zVDB{o=yL4#E=~giLwtr%S`!ISJ>0J)=k3^dTfwt3V<7L|mc?}E%htdNFEjJW7w7IP za6kT-`RW^Uvt-M(Yao^8V_EUiR$cx z5n(h!6y3_TuKaDxUScrb^S-v8^S%<6Y9e(RS?YWMa$ue^`FOC~D8TN0guIAVUXzdh z%bF%s=`;qh{8lIcFWJFO`SLqUQkn^rUV-v81MnfQjbfO>H4D^^k@H_6uc51QSX-f8z{#IXP6`xknTM)9QCWVwFMZi=5wo>^UXEa zRs%UD853cI?LuJ*arf{GrwYH;o;uhoL96PVI~{{XDsm?FJ<<>1$H?=hwMqb^zcHxQb)7n!p%+cj=B#x ze*ET^8w>Yd?+AIMium{jqc(R$P+<~!beRN6|tJB5>2 zB=n~m9(`ImgV2^8!q2kRFrAE=1G@R^h?MW-^}GB`5B_OLOP&~Nq%?*HC$YAR&B~=gwnBM~9F7Yp%tLh_v^yHUK=|a+ zkhco4u|!K*fK@mERm;MAEJnuo{G0|$jRwYie=B(_=Oer+*!Z#!70 z7T(td+M#R|5vv$oM2?n90fF(#ZYW2L-;XwEP7SAd{FrFg`Xdelg|Vt2u}4EcV{_g{ zQo+Ee%X6jE7A)nb$g2QazRqljQl^F*$=dxQ2^v#4XKz^SxrGh%a7ceO4Yqc z38|MVeg_iIE5Y7?qi~qkh8RhK9BQ|1*~b$cQGVKYFZgzxBhQV4+uCb);}^i=Xu49c zr+Jtb^0hJhG#BWL_rQcqH}fDfLo_p>7TjfUhB|)=Hl||9;)O?9v*ruoC0=n0<{bUb z(n{Nb2^u`RP{3ybnRX4}N;8=d^;sjCtJ2bW1^fODj!X;+vAoiz2;CGB zT|R-o;Rt}vel$eLm_(Mp+Y~wS4s5qUhh;N-9=$JV16;3W97_<$fQB&D_9Onr9Syrp z0yRUmjsEftk>%3)DAOyQZ*w2Z?i{NO#JPT7_<}XbbDy3VGyL_D=GWEv&xD=H`Gmi) zMVA&3RUiD2TPL0hz8DTyj|Kic12qUEIXqG7%neU(;hH?8m{N`T!l%5x@*bG=Gt>*0lz!@|H) zIn_9deX^X)HmGgCO;Ge@sFGRvQgt6r zw2+?IjI>6p8hka-_T74FWrcq)BrPGivBtaCF$*nDP^xWk^dTq0HJ&^C03oU9($Lu% zQ?V?_*9AS0={6=!g|NFO6SDItv-*?i?$y+rn~Qf5027Cs7k;KqTD!#&-0pu*eDK@H zMB5}t7--WHfv3rSehwAePstFDhMy!<4DMm6T^mcyc2xTn{4VGq+!V3q62HLu`@ZMA zZwdg*sDtu3F^L?p$CSL1vq8J>2yxn!*_do$Ii>U&_nl9!c>s)7Jr5a=7{9Q1_I1SO z)rT7Vm@l(s#@pIu(VJh%+Xh^><&;h+-^Fh|oM!1}A5iLh1Rw4%)psn|eiq*n{H2q5 zY@K%qaz*x}k>pW8Gligrz_}9#u=i4@I(V~#6TZ`_KqX}$Wyb$fpn5-ib#w7aE*@0I zKUCL_-#X0G@7sN&PsuachHM1^hV<{7b{V71V-d!Wa`olCu>y8HGc1}Ik^YkUwhC>} z?Gw^`T8plt)4*W~xWZ19lw4{2y1o(enhsnqiVv0Yp-%egyPt-(zdh67Q@DB@NblEH z!|syv>W}Bx`%Hsk%%4=@qRdHd52Ua&uDPu**gY)503}ETiGWAuBfNH>HTB6YRc@xz zFfD^TbbjD9%-3SwnF7|q96%y{BoU|e9~khVzuw_qHTY# z?l_IYO`EZKMsk$${)&#TJL{`ozTA5;ze4&iioGAKV}%J91KFwf{v-!VVY?aQwe3Vi}9!vv$c2gBzaNS@d*=#dHj0(Pw9cAB}@Zt0F+DtpJJgjo62EY8A4?u6}kOx@J z1+E}UhjgmIR~w$sL`=y{Dqd=`6t(FgV2tec2&1}%Gi&FvlcFc}V}~gHIirf4?|2Jt#yR+zBNSJ7ICq4^ z%>?s3bAS?c?S2;_r<4D?YYONozWUANdvYL6TejEJzq>jJNhqFjmJ{}x4o`->#@?i% zm^`|eP|{!{ZjS%+eFd46NOn>LL59ezUQ+PNn%vHZz0YgbY8HKm zyNz3h`w*&Ed(nKLk9TYxb-Fw#q=}ajdtrhFNsF9&YP!)@B4Mjx|I7LP@sLKFeb`iA zHSf@>Z+?Z*A=lMq`^0wvUT+&quZTHMl-|0_kjPA$ZeT&&1D_n^=;*CDSeC6nf zNuZ$DkVsplS=J2Wm^V7%s)d(R-%FRc$q%-6fnsA&tkx%8dC{>x`uLbm*TVS))f+uL zVuF`n+c$iy>s-HO@f_{erG<2=kuSBy^|rC0{VRCQJ=B~m!+sa=TB4n|cc7gsdfZVP zgOlTJBAl?TJMg5ct#QVRT91dK0UI7A1d(>}pn}bByoc@!fC@~R8EgIJWzqH-kDOv? zTyMCrFgY(b@XyYD|FQP}=3+oQ-oV109I2rA<$z?}>Qaf?a7Nuv4I6SzlB}J|`8*Pf zrJo>lQeWp)7PAgiD9cf_;E_S$aZ=NuMZ;;g@7Sm9dMRY(%c%pWd3aZ(X(Nuh&VG(K zTzdBglTo&S@Us~u#oB8YhTB31voW>U4AJDH53D;5ix|52rL6K4%S=ZZoU}QZhlxAq z=_-^4d)YI$QTTPZJyec-eW{C!cida!$tDWu@Tj3Dm{gl#Owv3;_495mq_(xDXS}qwHYpeo|F&_Be7&&I8O7dM3GZEUvBnOJ+pEsH z6c;mmbp!3~FSn7;TfMbydvZ4<4swUrdKoI>k-^Ld`Ks_z*6WEV@9eDfq~b_QTgd!WY2_2CUQ8^2twB%FAwYKJ3r&K=imaPJ8eV~(8+ z$~y6Er!ba+TOe!)=6DMiJ2(3PA}qa89~1g(M>#yUZwqA}ex2Fb^9))Di%jcrs#t_ySj#r-ge3?Wess@IR1Lo`~Wu zSv9-VbG;;ezKG^Yb)+h7mJ=Jrml?^E&I!T@?|7>v+I}XAoZcB}C7PQHX_fD-mCa&0yH|^G4=1g%7oT~=YQt2?N>dSef`9PQekU` z^v=P`W(Y&?*&_f$HM-OIkmMm+CUpdC95aC z@wp0w_?Mi4mr`>7jd**0lF&H^qP*6^yvwlK0%|PHO$;lQcPRd?aWmmR90Os;Tbhja zJapp#`Kh<(yZ?4E|5glu>nx6yQM0b7V71Rh3E=!RqxcuAKN`(}rLP`I&)B2c znf!DwY9n^|n?n5kaw*cKrVvWF9KkI^yM8$ixcosc-@Uh`3aVLLFZP}(+Yo6npdtZw zUb&P7VZM@>oGPH6*k9_z;}qbu-*BO;ZfPT)u8N`>0$ z7=%-uw{71=!lNsvv#>Ogl4i8#Uf$b9M0@1f?j09nr{%9eP3`ce*iNWEx{?U}w(xwr z9(Jks-e&MwfUr{N1uW-0bIVcfiHCHmjJLZga#Z`5--BEQGZXt_P1QmuGZ!&8iQ^OsT7kJ$3NZ92VDn5Y?Nue+PX8{Z{?!;__w zx6bxot`N8S>D+m#9&{+@^jHO#D?Ox%BO^TR^f4IIR*RoO%pjdt%F++kXgV7fE1y7g zsLRQBp&Qjh{{O4CYyW4u{r^fxx2Qz9osv)KK<<*`%!&?oC2p4Z2ump;M#F5w6w$3v zA%~b_j%CXEI3o>VIYDdS1`x^LoC> z#BueS1bAn=uMuVP)4#Bxb)>}kv4)vFq~dSD>}{JFJdhX1)P|ISf)?_?lUYKVzH^#T zgpm8|#de*klRqKYH%z111J4oH}iNBa9+^S`k&8)$=Xtng|qeflph0Vkeo+4a4Rr{^=2 z#4a-JdJN;IeAnwU^h7-WyU*?J#Q(VL_i)UAJ+2<|Hqd=lcs=CAn2OXcX=AU&!Yd;) z#<0FzfKCkAVJ&O>ltPqjef{=9^%xYu$!0Qw6g1yg(;2@-1(-t-a!XG7$x7}6SmucH zDJu=yxuYu}e@-)Roz{m@^&l&KdxKqq1U^_J&YzI%@c*=+|3B}~`DRNz9ZKH8_D!*& z=`St=5Z`k}XDh1i4C>S?7*3?)Tg^Ft2{U-2YYk4(C+(Tbx6TxI`AaQ&{2f#4w^x7f z;1xFp*IVf`_^G@fU*Kg~6)exp^oUyDJ)b99wR_Yj^hTe2)BhHTn*OHJ69(Uv-Ym{D zn%8%oAmJYEA?}E{C~~oHbe58MLr5^O{S&qC!3eV*U}ooT>EShtGxR0yWmstOSo9cx z{%rS)Q0p?aP`ljgNJ&EZ14$#%>I+w!`par%t|wGFEy4-4a*g+wyCY!{(r!uZU>Dhc zAaCId+JA8mjM2X@gJjX$FMGreI=x7e7+L-wntXl;n?5g@%)E>FMl)tV>$7LN4lALD z9zW% zv$uZelhZerR%jc5j8uXOva6Yjlicx|*aE^pr4y(1cZitml$l=|vM4S2i`o3C@7wp5y=jp1mR(&as86~O=9?| zkW~rSl$74U+HVXLNfNuP`?g-ifi@L|RJm$Q$k-FZ|5*h+NX717O?MIEGjoFqz9iJO zFf^qyj_*|d_p;XqN(?gf_YYql&q;MCnavzJcjG|WPi%Ia&9ej;A0&;h7MZs27*I3~ zKxsIznh2-M$3iE93nZH1mZ;h5hF1Qmat*bIVG~VT77b=NWlqJ@#jv%`G~4t!x~?ih z;XW|x_^`|tde8g5j3C=II!7HPph6CIlRg0MGA4|sH<>LI(HnU7FbO@4py8;RD~FE^ zl|TUd40Ih}TGl&Zpy!$5PzDbj_dn~1}(7@macO{``Py5i_ z;ckN-OG7Y0^rW5hgIJvLs_^M+-1_>xbo%#*y^YhB+qLTeO0_!DwGQ9so$24Cp&GmWadJhh)L6d9>4|HN z*#Vtw-~2TVoK6X$FF1AigH3^;nvxS*a30*WC7NkOdMKlv)hRETsd=n0EEGisod02{ zf!OcyrAFc~S8@)k@9!AFq$KTB%v?xMOq}_nY|rY2w8sSrT^TLN;1iE^J^T|jN*Bu% zeuEq-zfvemvmK7z^RU+O)R<~*T(C(MF!H&lXF8|l?)(K*+krrTMeo<}&;DoW2gro@ ztzz?`jec3bf9cQYlbp2H>bXLR&eG8E`c^l^dY5wkU7+PezVtE6%xz{a?tdIa4n9u; znR$Gm1>GLHP-u(QsN4^f&%EG#J^`#acNW01j5pnr$DbW#gaUc6Kw=CEvp$)sBXr!{ zVQq55Ve6c~Vg6JMd}H@C7<=%#qKrHVRu9Fkv~J4E-t6Q3T4~2##i4VBFUsy%tGCed;>WG#OvzWj8{dr@xnj!;RIc!% znup%1=$q|*f>H0XD><=6QiS&ZV*r(uPSFu(To}1}@zNifEZJ^JOC2)B?CY61)ql>4~ zRYvS)vajU)IjQQjLXV#x3Zt6iMO;xipHaQ?iji}w94F;FZv{psJJV~KOQal|DLGRVmv z)X)nbXb#*TaZD|Q@W#}*%PW=(FJ#y_P;GEWp%7K6_ zP;KZvOogB6lPc?w$?DyIRoN~1>DrcoK>VrJM6zaEJQFudEhcVG2W$btxCk3btKokY z?xCgizr$ONwy2sPy?+0wF8@pM7!fr^#dtN%LyHorul;l7!s}blUQ%~VRUX=@NsT$l zJY=1y9Nh8bQ1A=hvgtk@f_$Ur`8^h2UJPLmTfd=Zy<0f~JGc<5tL3^eP~lEYOaO`} zqq$=Jnj6OmOdIiOVbA4I`#vZJh7N6OD9vEpo6?PQ<5t0wGpw7^TRB$`d&##(Oaam1 ze9l|P^{QNT#Rldg0S<%-EX**Nus{-|qW+juZe-SG)glRKB5V|In6WbTeKTQjkF|0f z6UpJZiwh7OUNL4v*lx1Ht9qqJ_<{*vlCr=V&|NlWaU1Rmx)c60@7d+O}w-k z=RG>l^N--X$=$(L(o=z52}Dcw99Y|V2v^U`pfT$Qdnq4RMHEPo*pTdFtsEBF z`8iXKwdb#jbI?oO?f^`900|mdj#W=m0ImtZIMlpi{W&2ogIds@LPd)v!65OGj0}7q z(bBlq?^&-t0SXt)*Og}6tKS*mfrAYBRS@m9UKrXYg}C z*_jSJ!<8}PqV-8l)8vafOT8#DgPcs3e1VZY`qim-3c~vj^(QZqgVYCY=X8W$?p>(~ zpmik^8Dsq(Bc7e7>$lnVK{Il83+EALZzhoOJVxTB%bLxOzlB>SY@-cO?8hCr5AVU*}kY$a1%syq% zB?m?G6W@1mqvAxLmT{N|{8iV@a+)^kcPCVv5C@{2$!geqLxFsh=|w+apn*z&(ca(% z=0djYi68yp8g|M!-iOu^e9(8CX!{$7F3ohfhHdAwyOixC z#tm8&6r(`Aw7r3Qk`kh6OU-u;jr>6hQhX_C;eelp3 zg~()u%Cu;k*+1pPG(+b$ohHT5&k(32l#`figppo4^BTtX>uS8Lc(A9L9kDP)vkC&S zxcPCR(D^da=V&7HSI3i9XN7q8CXt}HCe5D`K?Nt_{RIrbjmH3S^>RjW@#XRu!ue<$ zMjBke!>@?IU0@J(znc>{AF-eH*^8tp z3UegwR(`+h)bS=vgLJ^rJTlT%TO+`|>G>4nonfV4S3k?CR9A)h@~uUCzmTno)>21_ zu<#PUhs_J4-WW+4Bmvha@7fDO-nX@!{{Celmqb{GXrVdgxV#V?n$81ZYh?CEIv<;v zursXv6`tmq;8Z6&|K;(KRr4~F>3moI=dr|<&9p0GsFolHltYD-C0L18?=p|vS-LVZ zdU%PP;62QH)oZ%I6pw1S`hs3ccWB#jRIg}*0$rA*ZMCmeq>r03!@zZM{V+6(f2ZDP zB!9td7!1W2PSHlzwZ-_xjZsUm(B5MF9IL!aJSZBo^t6I8a9q)6aE;_=u zr~_QU(4!}gAhcG;CDS0lYJ(c zKPFo{ODB3(mjRgZcL6Gltf{)Th@J|aOOK>n@3{Mh->yGZatFUAZ*z2iaMx2&EQg0(hESrc1!QMx6ZlR?2o{57}*b7y-);*AlmcPV;qTOicp%O() zsz{$TNyYJoROkmf2QR9iD&PSxhquiZjr6nQaw88!m$<7ki-u46#V0{HRa1t1;a%~1 zF{~m|e;u~bWQck{j&l%)64vKi-O)N+I*glSRRo>+urv_#h@!<*{jzRoB_I_?uK5`y za2dXQops~*jGXhHL@<}(1@fM(+uQ}NNwv;)n#z%9YkjTn-c>1g&{mH0I(Ii-XU zn$g{Oxt}+(esRT>nka)Qj+ukYX`G#Rm!G~UhsbdpF_A}6P;E9%p%2AMXR3Zv%8sT~ z1H=2VB46|a*1+0TyY$lDaQfxB&8kW;{^N4}LLETlO?oNR=^)ez=CcfHW5f0yS+$(_ zhz~EMa|2g7YN_Fwk&t2Tl5f(7&F`A%$X5J;&DdOBHB5&ix#rx&!iEE;$$hUjGyzCx zx4}8o_;mQ67PXE3{rbdX9H7R)les90m#i-wBq}e4M&{2Pz*NE~<@Ysuh303f(a&G+ zn0kzIbD!?sYcs9)samEUS1yUYpp0OUbRPZrwajCvuYl@ zgc;H`KFU%HHDfle3LjYp3y6{>0d4haEtIyD7UY$7A>ssr`LXyHp^Cu*cIaCje&xyt z#g^!4VP+-_7;GxXM>HLOAL*S3KR&s$ZK~-lQF}~Hj*(IoKUG(E)Lb&r^Zg(Oe`7BC5mh*4%#oxus^e*7knwdqwv#%~Dh=A#BdK(+t|&{F6> zw5$bSzrxX<_(3^(_H|gt7J!(WlmNtLa(8qh zl-hNwPqNt}S82H8Kb)(-U^Z=nNEMpnB$&|$Ta&mf&~*OF>?Gh0ZhNJlOj`BuX!qHD zCg;{0o?sv?ym;0B$O(=Pxp7%k@j9(0@O}Bp%Q-mq`lrni`^mLAn8aPX;^Fz%8pIeb zi&&sKFJZ0K2WlxqZy}T2Psjci(_Ux^+IXvbp)05zdPbV<`G~asL*v@5u^_3iunf^x z!~q@R$Li!1n%w*HC$uMrs$ZqhHnGV;1v~PX;m9erWZaVgmpw8412~~riT`jXwycL| RAtiaPT(rATVSW3_{{TmDq4WR% diff --git a/4-Deployment/ReadmeFiles/topology_dep.png b/4-Deployment/ReadmeFiles/topology_dep.png deleted file mode 100644 index c713fe3a5014180d5a4620bf27a78f2700d6559b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18850 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 diff --git a/1-Authentication/1-sign-in/App/authConfig.js b/App/authConfig.js similarity index 100% rename from 1-Authentication/1-sign-in/App/authConfig.js rename to App/authConfig.js diff --git a/1-Authentication/1-sign-in/App/authPopup.js b/App/authPopup.js similarity index 100% rename from 1-Authentication/1-sign-in/App/authPopup.js rename to App/authPopup.js diff --git a/1-Authentication/1-sign-in/App/authRedirect.js b/App/authRedirect.js similarity index 100% rename from 1-Authentication/1-sign-in/App/authRedirect.js rename to App/authRedirect.js diff --git a/1-Authentication/1-sign-in/App/favicon.svg b/App/favicon.svg similarity index 100% rename from 1-Authentication/1-sign-in/App/favicon.svg rename to App/favicon.svg diff --git a/1-Authentication/1-sign-in/App/index.html b/App/index.html similarity index 100% rename from 1-Authentication/1-sign-in/App/index.html rename to App/index.html diff --git a/1-Authentication/1-sign-in/App/redirect.html b/App/redirect.html similarity index 100% rename from 1-Authentication/1-sign-in/App/redirect.html rename to App/redirect.html diff --git a/1-Authentication/1-sign-in/App/signout.html b/App/signout.html similarity index 100% rename from 1-Authentication/1-sign-in/App/signout.html rename to App/signout.html diff --git a/1-Authentication/1-sign-in/App/styles.css b/App/styles.css similarity index 100% rename from 1-Authentication/1-sign-in/App/styles.css rename to App/styles.css diff --git a/1-Authentication/1-sign-in/App/ui.js b/App/ui.js similarity index 100% rename from 1-Authentication/1-sign-in/App/ui.js rename to App/ui.js diff --git a/1-Authentication/1-sign-in/AppCreationScripts/AppCreationScripts.md b/AppCreationScripts/AppCreationScripts.md similarity index 100% rename from 1-Authentication/1-sign-in/AppCreationScripts/AppCreationScripts.md rename to AppCreationScripts/AppCreationScripts.md diff --git a/1-Authentication/1-sign-in/AppCreationScripts/Cleanup.ps1 b/AppCreationScripts/Cleanup.ps1 similarity index 100% rename from 1-Authentication/1-sign-in/AppCreationScripts/Cleanup.ps1 rename to AppCreationScripts/Cleanup.ps1 diff --git a/1-Authentication/1-sign-in/AppCreationScripts/Configure.ps1 b/AppCreationScripts/Configure.ps1 similarity index 100% rename from 1-Authentication/1-sign-in/AppCreationScripts/Configure.ps1 rename to AppCreationScripts/Configure.ps1 diff --git a/1-Authentication/1-sign-in/AppCreationScripts/sample.json b/AppCreationScripts/sample.json similarity index 100% rename from 1-Authentication/1-sign-in/AppCreationScripts/sample.json rename to AppCreationScripts/sample.json diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 4543f9d..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,16 +0,0 @@ -# CHANGELOG - -## 01/04/2021 - -* New chapter (4-2) added. - -## 12/07/2020 - -* Updated MSAL.js to 2.7.0 -* B2C null access token issue resolved. -* UI update code removed from auth methods. -* Folder structure and naming revised. - -## 10/20/2020 - -* Initial sample. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index a9115cf..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,76 +0,0 @@ -# Contributing to [project-title] - -This project welcomes contributions and suggestions. Most contributions require you to agree to a -Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us -the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com. - -When you submit a pull request, a CLA bot will automatically determine whether you need to provide -a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions -provided by the bot. You will only need to do this once across all repos using our CLA. - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - - - [Code of Conduct](#coc) - - [Issues and Bugs](#issue) - - [Feature Requests](#feature) - - [Submission Guidelines](#submit) - -## Code of Conduct -Help us keep this project open and inclusive. Please read and follow our [Code of Conduct](https://opensource.microsoft.com/codeofconduct/). - -## Found an Issue? -If you find a bug in the source code or a mistake in the documentation, you can help us by -[submitting an issue](#submit-issue) to the GitHub Repository. Even better, you can -[submit a Pull Request](#submit-pr) with a fix. - -## Want a Feature? -You can *request* a new feature by [submitting an issue](#submit-issue) to the GitHub -Repository. If you would like to *implement* a new feature, please submit an issue with -a proposal for your work first, to be sure that we can use it. - -* **Small Features** can be crafted and directly [submitted as a Pull Request](#submit-pr). - -## Submission Guidelines - -### Submitting an Issue -Before you submit an issue, search the archive, maybe your question was already answered. - -If your issue appears to be a bug, and hasn't been reported, open a new issue. -Help us to maximize the effort we can spend fixing issues and adding new -features, by not reporting duplicate issues. Providing the following information will increase the -chances of your issue being dealt with quickly: - -* **Overview of the Issue** - if an error is being thrown a non-minified stack trace helps -* **Version** - what version is affected (e.g. 0.1.2) -* **Motivation for or Use Case** - explain what are you trying to do and why the current behavior is a bug for you -* **Browsers and Operating System** - is this a problem with all browsers? -* **Reproduce the Error** - provide a live example or a unambiguous set of steps -* **Related Issues** - has a similar issue been reported before? -* **Suggest a Fix** - if you can't fix the bug yourself, perhaps you can point to what might be - causing the problem (line of code or commit) - -You can file new issues by providing the above information at the corresponding repository's issues link: https://github.com/[organization-name]/[repository-name]/issues/new]. - -### Submitting a Pull Request (PR) -Before you submit your Pull Request (PR) consider the following guidelines: - -* Search the repository (https://github.com/[organization-name]/[repository-name]/pulls) for an open or closed PR - that relates to your submission. You don't want to duplicate effort. - -* Make your changes in a new git fork: - -* Commit your changes using a descriptive commit message -* Push your fork to GitHub: -* In GitHub, create a pull request -* If we suggest changes then: - * Make the required updates. - * Rebase your fork and force push to your GitHub repository (this will update your Pull Request): - - ```shell - git rebase master -i - git push -f - ``` - -That's it! Thank you for your contribution! diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 9e841e7..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. - - 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 all - 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 diff --git a/README.md b/README.md index a184ca1..c964548 100644 --- a/README.md +++ b/README.md @@ -1,120 +1,325 @@ --- page_type: sample +name: Vanilla JavaScript single-page application using MSAL.js to authenticate users with Microsoft Entra ID +description: Vanilla JavaScript single-page application using MSAL.js to authenticate users with Microsoft Entra ID languages: -- javascript + - javascript products: -- msal-js -- ms-graph -- azure-app-services -- azure-storage -- azure-key-vault -- azure-functions -- microsoft-entra-id -- azure-active-directory-b2c -- microsoft-identity-platform -description: "Tutorial: Enable your JavaScript single-page application (SPA) to sign-in users and call APIs with the Microsoft identity platform" -urlFragment: "ms-identity-javascript-tutorial" + - microsoft-entra-id + - msal-js + - msal-browser +urlFragment: ms-identity-javascript-tutorial +extensions: +- services: ms-identity +- platform: JavaScript +- endpoint: Microsoft identity platform +- level: 100 +- client: Vanilla JavaScript SPA --- -# Tutorial: Enable your JavaScript single-page application (SPA) to sign-in users and call APIs with the Microsoft identity platform +# Vanilla JavaScript single-page application using MSAL.js to authenticate users with Microsoft Entra ID -[![Build](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/actions/workflows/node.js.yml/badge.svg)](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/actions/workflows/node.js.yml) -[![Code Scan](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/actions/workflows/codeql.yml/badge.svg)](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/actions/workflows/codeql.yml) -![GitHub issues](https://img.shields.io/github/issues/Azure-Samples/ms-identity-javascript-tutorial) -![npm](https://img.shields.io/npm/v/@azure/msal-browser?label=msal-browser) -![GitHub](https://img.shields.io/github/license/Azure-Samples/ms-identity-javascript-tutorial) +* [Overview](#overview) +* [Scenario](#scenario) +* [Contents](#contents) +* [Prerequisites](#prerequisites) +* [Setup the sample](#setup-the-sample) +* [Explore the sample](#explore-the-sample) +* [Troubleshooting](#troubleshooting) +* [About the code](#about-the-code) +* [Next Steps](#next-steps) +* [Contributing](#contributing) +* [Learn More](#learn-more) -The [Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/v2-overview), along with [Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/fundamentals/active-directory-whatis) (Microsoft Entra ID) and [Azure Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/overview) (Azure Active Directory B2C) are central to the **Azure** cloud ecosystem. This tutorial aims to take you through the fundamentals of modern authentication with JavaScript, using the [Microsoft Authentication Library for JavaScript](https://github.com/AzureAD/microsoft-authentication-library-for-js) (MSAL.js). +## Overview -We recommend following the chapters in successive order. However, the code samples are self-contained, so feel free to pick samples by topics that you may need at the moment. +This sample demonstrates a Vanilla JavaScript single-page application (SPA) that lets users sign-in to [Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/fundamentals/active-directory-whatis) (Microsoft Entra ID) using the [Microsoft Authentication Library for JavaScript](https://github.com/AzureAD/microsoft-authentication-library-for-js) (MSAL.js). In doing so, it also illustrates various authentication concepts, such as [ID Tokens](https://docs.microsoft.com/azure/active-directory/develop/id-tokens), [OIDC scopes](https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes), [single-sign on](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso), **account selection**, **silent requests** and more. -> :warning: This is a *work in progress*. Come back frequently to discover more samples. +## Scenario + +1. The client application uses **MSAL.js** to sign-in a user and obtain an **ID Token** from **Microsoft Entra ID**. +2. The **ID Token** proves that the user has successfully signed-in with their organization's tenant. + +![Overview](./ReadmeFiles/topology_signin.png) + +## Contents + +| File/folder | Description | +|-----------------------|---------------------------------------------------------------------------| +| `AppCreationScripts/` | Contains Powershell scripts to automate app registration. | +| `App/authPopup.js` | Main authentication logic resides here (using popup flow). | +| `App/authRedirect.js` | Use this instead of `authPopup.js` for authentication with redirect flow. | +| `App/authConfig.js` | Contains configuration parameters for the sample. | +| `App/ui.js` | Contains UI logic. | +| `server.js` | Simple Node server for `index.html`. | ## Prerequisites -- [Node.js](https://nodejs.org/en/download/) -- [Visual Studio Code](https://code.visualstudio.com/download) -- [VS Code Azure Tools Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) -- A modern web browser +* [Node.js](https://nodejs.org/en/download/) must be installed to run this sample. +* [Visual Studio Code](https://code.visualstudio.com/download) is recommended for running and editing this sample. +* [VS Code Azure Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) extension is recommended for interacting with Azure through VS Code Interface. +* A modern web browser. +* An **Microsoft Entra ID** tenant. For more information, see: [How to get a Microsoft Entra tenant](https://docs.microsoft.com/azure/active-directory/develop/test-setup-environment#get-a-test-tenant) +* A user account in your **Microsoft Entra ID** tenant. -Please refer to each sample's README for sample-specific prerequisites. +>This sample will not work with a **personal Microsoft account**. If you're signed in to the [Microsoft Entra admin center](https://entra.microsoft.com) with a personal Microsoft account and have not created a user account in your directory before, you will need to create one before proceeding. -## Recommendations +## Setup the sample -- [jwt.ms](https://jwt.ms) for inspecting your tokens -- [Fiddler](https://www.telerik.com/fiddler) for monitoring your network activity and troubleshooting -- Follow the [Microsoft Entra ID Blog](https://techcommunity.microsoft.com/t5/azure-active-directory-identity/bg-p/Identity) to stay up-to-date with the latest developments +### Step 1: Clone or download this repository -Please refer to each sample's README for sample-specific recommendations. +From your shell or command line: -## Contents +```console +git clone https://github.com/Azure-Samples/ms-identity-javascript-tutorial.git +``` + +or download and extract the repository *.zip* file. + +> :warning: To avoid path length limitations on Windows, we recommend cloning into a directory near the root of your drive. + +### Step 2: Install project dependencies + +```console + cd 1-Authentication\1-sign-in + npm install +``` + +### Step 3: Register the sample application(s) in your tenant + +There is one project in this sample. To register it, you can: + +* follow the steps below for manually register your apps +* or use PowerShell scripts that: + * **automatically** creates the Microsoft Entra applications and related objects (passwords, permissions, dependencies) for you. + * modify the projects' configuration files. + +

+ Expand this section if you want to use this automation: + + > :warning: If you have never used **Microsoft Graph PowerShell** before, we recommend you go through the [App Creation Scripts Guide](./AppCreationScripts/AppCreationScripts.md) once to ensure that your environment is prepared correctly for this step. + + 1. On Windows, run PowerShell as **Administrator** and navigate to the root of the cloned directory + 1. In PowerShell run: + + ```PowerShell + Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force + ``` + + 1. Run the script to create your Microsoft Entra application and configure the code of the sample application accordingly. + 1. For interactive process -in PowerShell, run: + + ```PowerShell + cd .\AppCreationScripts\ + .\Configure.ps1 -TenantId "[Optional] - your tenant id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" + ``` + + > Other ways of running the scripts are described in [App Creation Scripts guide](./AppCreationScripts/AppCreationScripts.md). The scripts also provide a guide to automated application registration, configuration and removal which can help in your CI/CD scenarios. + +
+ +#### Choose the Microsoft Entra tenant where you want to create your applications + +To manually register the apps, as a first step you'll need to: + +1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com). +1. If your account is present in more than one Microsoft Entra tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired Microsoft Entra tenant. + +#### Register the client app (ms-identity-javascript-c1s1) + +1. Navigate to the [Microsoft Entra admin center](https://entra.microsoft.com) and select the **Microsoft Entra ID** service. +1. Select the **App Registrations** blade on the left, then select **New registration**. +1. In the **Register an application page** that appears, enter your application's registration information: + 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `ms-identity-javascript-c1s1`. + 1. Under **Supported account types**, select **Accounts in this organizational directory only** + 1. Select **Register** to create the application. +1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. +1. In the app's registration screen, select the **Authentication** blade to the left. +1. If you don't have a platform added, select **Add a platform** and select the **Single-page application** option. + 1. In the **Redirect URI** section enter the following redirect URIs: + 1. `http://localhost:3000` + 1. `http://localhost:3000/redirect` + 1. Click **Save** to save your changes. + +##### Configure Optional Claims + +1. Still on the same app registration, select the **Token configuration** blade to the left. +1. Select **Add optional claim**: + 1. Select **optional claim type**, then choose **ID**. + 1. Select the optional claim **acct**. + > Provides user's account status in tenant. If the user is a **member** of the tenant, the value is *0*. If they're a **guest**, the value is *1*. + 1. Select **Add** to save your changes. + +##### Configure the client app (ms-identity-javascript-c1s1) to use your app registration -### Chapter 1: Sign-in a user to your application +Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. -| | | -|---------------|---------------| -| | [**Sign-in with Microsoft Entra ID**](./1-Authentication/1-sign-in)
Sign-in your users with the **Microsoft Entra ID** and learn to work with **ID Tokens**. Learn how **single sign-on (SSO)** works. Learn to secure your apps to operate in **national clouds**. | -| | [**Sign-in with Azure Active Directory B2C**](./1-Authentication/2-sign-in-b2c)
Sign-in your customers with **Azure Active Directory B2C**. Learn to integrate with **external social identity providers**. Learn how to use **user-flows** and **custom policies**. | +> In the steps below, "ClientID" is the same as "Application ID" or "AppId". -### Chapter 2: Sign-in a user and get an Access Token for Microsoft Graph +1. Open the `App\authConfig.js` file. +1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of `ms-identity-javascript-c1s1` app copied from the Microsoft Entra admin center. +1. Find the key `Enter_the_Tenant_Info_Here` and replace the existing value with your Microsoft Entra tenant/directory ID. -| | | -|----------------|---------------| -| | [**Get an Access Token from Microsoft Entra ID and call Microsoft Graph**](./2-Authorization-I/1-call-graph)
Authenticate your users and acquire an **Access Token** for Microsoft Graph and then call the **Microsoft Graph API**. | +### Step 4: Running the sample -### Chapter 3: Protect an API and call the API from your client app +```console + cd 1-Authorization\1-sign-in + npm start +``` -| | | -|-----------------|---------------| -| | [**Protect and call a web API on Microsoft Entra ID**](./3-Authorization-II/1-call-api)
Protect your web API with the **Microsoft Entra ID**. Use a client application to sign-in a user, acquire an **Access Token** for your web API and call your protected Web API. | -| | [**Protect and call a web API on Azure Active Directory B2C**](./3-Authorization-II/2-call-api-b2c)
Protect your web API with **Azure Active Directory B2C**. Use a client application to sign-in a user, acquire an **Access Token** for your web API and call your protected web API. | +## Explore the sample -### Chapter 4: Deploy your applications to Azure +1. Open your browser and navigate to `http://localhost:3000`. +1. Click the **sign-in** button on the top right corner. -| | | -|-----------------|---------------| -| | [**Deploy to Azure Storage and App Service**](./4-Deployment)
Prepare your app for deployment to various **Azure** services. Learn how to package and upload files, configure authentication parameters and use **Azure** services for managing your operations. | +![Screenshot](./ReadmeFiles/screenshot.png) + +> :information_source: Did the sample not work for you as expected? Then please reach out to us using the [GitHub Issues](../../../../issues) page. ## We'd love your feedback! Were we successful in addressing your learning objective? Consider taking a moment to [share your experience with us](https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR73pcsbpbxNJuZCMKN0lURpUNDVHTkg2VVhWMTNYUTZEM05YS1hSN01EOSQlQCN0PWcu). -## More information +## Troubleshooting -Learn more about the **Microsoft identity platform**: +
+ Expand for troubleshooting info -- [Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/) -- [Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/) -- [Overview of Microsoft Authentication Library (MSAL)](https://docs.microsoft.com/azure/active-directory/develop/msal-overview) -- [Application types for Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/v2-app-types) -- [Understanding Microsoft Entra application consent experiences](https://docs.microsoft.com/azure/active-directory/develop/application-consent-experience) -- [Understand user and admin consent](https://docs.microsoft.com/azure/active-directory/develop/howto-convert-app-to-be-multi-tenant#understand-user-and-admin-consent) -- [Application and service principal objects in Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/develop/app-objects-and-service-principals) -- [Microsoft identity platform best practices and recommendations](https://docs.microsoft.com/azure/active-directory/develop/identity-platform-integration-checklist) +Use [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) to get support from the community. Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. +Make sure that your questions or comments are tagged with [`azure-active-directory` `ms-identity` `adal` `msal`]. -See more code samples: +
-- [MSAL code samples](https://docs.microsoft.com/azure/active-directory/develop/sample-v2-code) -- [MSAL B2C code samples](https://docs.microsoft.com/azure/active-directory-b2c/code-samples) +## About the code -## Community Help and Support +## Sign-in -Use [Stack Overflow](http://stackovergrant.com/questions/tagged/msal) to get support from the community. -Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. -Make sure that your questions or comments are tagged with [`ms-identity` `azure-ad` `azure-ad-b2c` `msal` `javascript`]. +MSAL.js provides 3 login APIs: `loginPopup()`, `loginRedirect()` and `ssoSilent()`: -If you find a bug in the sample, please raise the issue on [GitHub Issues](../../issues). +```javascript + myMSALObj.loginPopup(loginRequest) + .then((response) => { + // your logic + }) + .catch(error => { + console.error(error); + }); +``` -To provide a recommendation, visit the following [User Voice page](https://feedback.azure.com/forums/169401-azure-active-directory). +To use the redirect flow, you must register a handler for redirect promise. **MSAL.js** provides`handleRedirectPromise()` API: -## Contributing +```javascript + myMSALObj.handleRedirectPromise() + .then((response) => { + // your logic + }) + .catch(err => { + console.error(err); + }); + + myMSALObj.loginRedirect(loginRequest); +``` + +The recommended pattern is that you fallback to an **interactive method** should the silent SSO fails. + +```javascript + + const silentRequest = { + scopes: ["openid", "profile"], + loginHint: "example@domain.net" + }; + + myMSALObj.ssoSilent(silentRequest) + .then((response) => { + // your logic + }).catch(error => { + console.error("Silent Error: " + error); + if (error instanceof msal.InteractionRequiredAuthError) { + myMSALObj.loginRedirect(loginRequest); + } + }); +``` + +You can get all the active accounts of a user with the get `getAllAccounts()` API. If you know the **username** or **home ID** of an account, you can select it by: + +```javascript + myMSALObj.getAccountByUsername(username); + // or + myMSALObj.getAccountByHomeId(homeId); +``` + +### Sign-out + +The Application redirects the user to the **Microsoft identity platform** logout endpoint to sign out. This endpoint clears the user's session from the browser. If your app did not go to the logout endpoint, the user may re-authenticate to your app without entering their credentials again, because they would have a valid single sign-in session with the **Microsoft identity platform** endpoint. For more, see: [Send a sign-out request](https://docs.microsoft.com/azure/active-directory/develop/v2-protocols-oidc#send-a-sign-out-request) + +### ID Token Validation + +A single-page application does not benefit from validating ID tokens, since the application runs without a back-end and as such, attackers can intercept and edit the keys used for validation of the token. + +### Sign-in Audience and Account Types -This project welcomes contributions and suggestions. Most contributions require you to agree to a -Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us -the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com. +This sample is meant to work with accounts in your organization (aka *single-tenant*). If you would like to allow sign-ins with other type accounts, you have to configure your `authority` string in `authConfig.js` accordingly. For example: -## Code of Conduct +```javascript +const msalConfig = { + auth: { + clientId: "", + authority: "https://login.microsoftonline.com/consumers", // allows sign-ins with personal Microsoft accounts. + redirectUri: "", + }, +``` + +For more information about audiences and account types, please see: [Validation differences by supported account types (signInAudience)](https://docs.microsoft.com/azure/active-directory/develop/supported-accounts-validation) + +> :warning: Be aware that making an application multi-tenant entails more than just modifying the `authority` string. For more information, please see [How to: Sign in any Microsoft Entra ID user using the multi-tenant application pattern](https://docs.microsoft.com/azure/active-directory/develop/howto-convert-app-to-be-multi-tenant). + +### Authentication in National Clouds + +National clouds (aka Sovereign clouds) are physically isolated instances of Azure. These regions of Azure are designed to make sure that data residency, sovereignty, and compliance requirements are honored within geographical boundaries. Enabling your application for sovereign clouds requires you to: + +* register your application in a specific portal, depending on the cloud. +* use a specific authority, depending on the cloud in the configuration file for your application. +* in case you want to call the MS Graph, this requires a specific Graph endpoint URL, depending on the cloud. + +For instance, to configure this sample for **Microsoft Entra ID Germany** national cloud: + +1. Open the `App\authConfig.js` file. +1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of the `ms-identity-javascript-tutorial-c1s1` application copied from the Microsoft Entra admin center. +1. Find the key `Enter_the_Cloud_Instance_Id_Here/Enter_the_Tenant_Info_Here` and replace the existing value with `https://portal.microsoftazure.de/`. +1. Find the key `Enter_the_Redirect_Uri_Here` and replace the existing value with the base address of the `ms-identity-javascript-tutorial-c1s1` application (by default `http://localhost:3000`). + +See [National Clouds](https://docs.microsoft.com/azure/active-directory/develop/authentication-national-cloud#app-registration-endpoints) for more information. + +## Next Steps + +Learn how to: + +* [Vanilla JavaScript single-page application using MSAL.js to authorize users for calling Microsoft Graph](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/tree/main/2-Authorization-I/1-call-graph) +* [Vanilla JavaScript single-page application (SPA) using MSAL.js to authorize users for calling a protected web API on Microsoft Entra ID](https://github.com/Azure-Samples/ms-identity-javascript-tutorial/tree/main/3-Authorization-II/1-call-api) + +## Contributing -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. +If you'd like to contribute to this sample, see [CONTRIBUTING.MD](/CONTRIBUTING.md). + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +## Learn More + +* [Microsoft identity platform (Microsoft Entra ID for developers)](https://docs.microsoft.com/azure/active-directory/develop/) +* [Microsoft Entra ID code samples](https://docs.microsoft.com/azure/active-directory/develop/sample-v2-code) +* [Overview of Microsoft Authentication Library (MSAL)](https://docs.microsoft.com/azure/active-directory/develop/msal-overview) +* [Register an application with the Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/quickstart-register-app) +* [Configure a client application to access web APIs](https://docs.microsoft.com/azure/active-directory/develop/quickstart-configure-app-access-web-apis) +* [Understanding Microsoft Entra application consent experiences](https://docs.microsoft.com/azure/active-directory/develop/application-consent-experience) +* [Understand user and admin consent](https://docs.microsoft.com/azure/active-directory/develop/howto-convert-app-to-be-multi-tenant#understand-user-and-admin-consent) +* [Application and service principal objects in Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/develop/app-objects-and-service-principals) +* [Authentication Scenarios for Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/develop/authentication-flows-app-scenarios) +* [Building Zero Trust ready apps](https://aka.ms/ztdevsession) +* [National Clouds](https://docs.microsoft.com/azure/active-directory/develop/authentication-national-cloud#app-registration-endpoints) +* [Initialize client applications using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-initializing-client-applications) +* [Single sign-on with MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso) +* [Handle MSAL.js exceptions and errors](https://docs.microsoft.com/azure/active-directory/develop/msal-handling-exceptions?tabs=javascript) +* [Logging in MSAL.js applications](https://docs.microsoft.com/azure/active-directory/develop/msal-logging?tabs=javascript) +* [Pass custom state in authentication requests using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-pass-custom-state-authentication-request) +* [Prompt behavior in MSAL.js interactive requests](https://docs.microsoft.com/azure/active-directory/develop/msal-js-prompt-behavior) +* [Use MSAL.js to work with Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory/develop/msal-b2c-overview) diff --git a/1-Authentication/1-sign-in/ReadmeFiles/screenshot.png b/ReadmeFiles/screenshot.png similarity index 100% rename from 1-Authentication/1-sign-in/ReadmeFiles/screenshot.png rename to ReadmeFiles/screenshot.png diff --git a/1-Authentication/1-sign-in/ReadmeFiles/topology_signin.png b/ReadmeFiles/topology_signin.png similarity index 100% rename from 1-Authentication/1-sign-in/ReadmeFiles/topology_signin.png rename to ReadmeFiles/topology_signin.png diff --git a/1-Authentication/1-sign-in/cypress.config.ts b/cypress.config.ts similarity index 100% rename from 1-Authentication/1-sign-in/cypress.config.ts rename to cypress.config.ts diff --git a/1-Authentication/1-sign-in/cypress/e2e/auth.cy.ts b/cypress/e2e/auth.cy.ts similarity index 100% rename from 1-Authentication/1-sign-in/cypress/e2e/auth.cy.ts rename to cypress/e2e/auth.cy.ts diff --git a/1-Authentication/1-sign-in/cypress/global.d.ts b/cypress/global.d.ts similarity index 100% rename from 1-Authentication/1-sign-in/cypress/global.d.ts rename to cypress/global.d.ts diff --git a/1-Authentication/1-sign-in/cypress/support/commands.ts b/cypress/support/commands.ts similarity index 100% rename from 1-Authentication/1-sign-in/cypress/support/commands.ts rename to cypress/support/commands.ts diff --git a/1-Authentication/1-sign-in/cypress/support/e2e.ts b/cypress/support/e2e.ts similarity index 100% rename from 1-Authentication/1-sign-in/cypress/support/e2e.ts rename to cypress/support/e2e.ts diff --git a/1-Authentication/1-sign-in/package-lock.json b/package-lock.json similarity index 100% rename from 1-Authentication/1-sign-in/package-lock.json rename to package-lock.json diff --git a/1-Authentication/1-sign-in/package.json b/package.json similarity index 100% rename from 1-Authentication/1-sign-in/package.json rename to package.json diff --git a/1-Authentication/1-sign-in/sample.test.js b/sample.test.js similarity index 100% rename from 1-Authentication/1-sign-in/sample.test.js rename to sample.test.js diff --git a/1-Authentication/1-sign-in/server.js b/server.js similarity index 100% rename from 1-Authentication/1-sign-in/server.js rename to server.js diff --git a/1-Authentication/1-sign-in/tsconfig.json b/tsconfig.json similarity index 100% rename from 1-Authentication/1-sign-in/tsconfig.json rename to tsconfig.json