From bc1c92a329fc566b17bdbc43f3f6ec6d13686857 Mon Sep 17 00:00:00 2001 From: Arthur Barre Date: Fri, 13 Dec 2024 18:38:00 +0100 Subject: [PATCH] init project --- .gitignore | 3 + backend/Dockerfile | 10 + backend/data.json | 515 ++++ backend/data/db.sqlite | 0 backend/package-lock.json | 2314 +++++++++++++++ backend/package.json | 26 + backend/src/data/db.sqlite | Bin 0 -> 528384 bytes backend/src/index.js | 122 + .../20241213134627_init/migration.sql | 12 + .../migration.sql | 177 ++ .../20241213163715_add_clients/migration.sql | 58 + .../migration.sql | 2 + .../src/prisma/migrations/migration_lock.toml | 3 + backend/src/prisma/schema.prisma | 176 ++ backend/src/routes/artists.js | 16 + backend/src/routes/clients.js | 47 + backend/src/routes/customers.js | 21 + backend/src/routes/products.js | 25 + backend/src/routes/purchases.js | 62 + backend/src/routes/users.js | 46 + backend/src/utils/seed.js | 227 ++ backend/yarn.lock | 1499 ++++++++++ docker-compose.yml | 42 + frontend/.gitignore | 24 + frontend/README.md | 50 + frontend/components.json | 21 + frontend/eslint.config.js | 28 + frontend/index.html | 13 + frontend/package.json | 47 + frontend/postcss.config.js | 6 + frontend/public/vite.svg | 1 + frontend/src/App.css | 0 frontend/src/App.tsx | 68 + frontend/src/assets/react.svg | 1 + frontend/src/components/Header.tsx | 34 + frontend/src/components/Table.tsx | 128 + frontend/src/components/theme-provider.tsx | 64 + frontend/src/components/ui/button.tsx | 57 + frontend/src/components/ui/card.tsx | 76 + frontend/src/components/ui/dropdown-menu.tsx | 199 ++ frontend/src/components/ui/input.tsx | 22 + frontend/src/components/ui/label.tsx | 24 + frontend/src/components/ui/select.tsx | 157 ++ frontend/src/components/ui/table.tsx | 120 + frontend/src/index.css | 72 + frontend/src/lib/utils.ts | 6 + frontend/src/main.tsx | 13 + frontend/src/pages/Dashboard.tsx | 150 + frontend/src/pages/Login.tsx | 73 + frontend/src/services/auth.service.ts | 79 + frontend/src/services/client.service.ts | 36 + frontend/src/services/purchase.service.ts | 37 + frontend/src/vite-env.d.ts | 1 + frontend/tailwind.config.js | 57 + frontend/tsconfig.app.json | 35 + frontend/tsconfig.json | 19 + frontend/tsconfig.node.json | 24 + frontend/vite.config.ts | 12 + frontend/yarn.lock | 2500 +++++++++++++++++ nginx/nginx.conf | 15 + 60 files changed, 9672 insertions(+) create mode 100644 .gitignore create mode 100644 backend/Dockerfile create mode 100644 backend/data.json create mode 100644 backend/data/db.sqlite create mode 100644 backend/package-lock.json create mode 100644 backend/package.json create mode 100644 backend/src/data/db.sqlite create mode 100644 backend/src/index.js create mode 100644 backend/src/prisma/migrations/20241213134627_init/migration.sql create mode 100644 backend/src/prisma/migrations/20241213150706_add_artists_customers_products_purchases_and_modify_users/migration.sql create mode 100644 backend/src/prisma/migrations/20241213163715_add_clients/migration.sql create mode 100644 backend/src/prisma/migrations/20241213163916_add_url_on_clients/migration.sql create mode 100644 backend/src/prisma/migrations/migration_lock.toml create mode 100644 backend/src/prisma/schema.prisma create mode 100644 backend/src/routes/artists.js create mode 100644 backend/src/routes/clients.js create mode 100644 backend/src/routes/customers.js create mode 100644 backend/src/routes/products.js create mode 100644 backend/src/routes/purchases.js create mode 100644 backend/src/routes/users.js create mode 100644 backend/src/utils/seed.js create mode 100644 backend/yarn.lock create mode 100644 docker-compose.yml create mode 100644 frontend/.gitignore create mode 100644 frontend/README.md create mode 100644 frontend/components.json create mode 100644 frontend/eslint.config.js create mode 100644 frontend/index.html create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.js create mode 100644 frontend/public/vite.svg create mode 100644 frontend/src/App.css create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/assets/react.svg create mode 100644 frontend/src/components/Header.tsx create mode 100644 frontend/src/components/Table.tsx create mode 100644 frontend/src/components/theme-provider.tsx create mode 100644 frontend/src/components/ui/button.tsx create mode 100644 frontend/src/components/ui/card.tsx create mode 100644 frontend/src/components/ui/dropdown-menu.tsx create mode 100644 frontend/src/components/ui/input.tsx create mode 100644 frontend/src/components/ui/label.tsx create mode 100644 frontend/src/components/ui/select.tsx create mode 100644 frontend/src/components/ui/table.tsx create mode 100644 frontend/src/index.css create mode 100644 frontend/src/lib/utils.ts create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/pages/Dashboard.tsx create mode 100644 frontend/src/pages/Login.tsx create mode 100644 frontend/src/services/auth.service.ts create mode 100644 frontend/src/services/client.service.ts create mode 100644 frontend/src/services/purchase.service.ts create mode 100644 frontend/src/vite-env.d.ts create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts create mode 100644 frontend/yarn.lock create mode 100644 nginx/nginx.conf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..954399f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +frontend/node_modules/ +backend/node_modules/ +frontend/.env diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..9998227 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,10 @@ +FROM node:18-alpine + +WORKDIR /app + +COPY package*.json ./ +RUN npm install + +COPY . . + +CMD ["npm", "start"] \ No newline at end of file diff --git a/backend/data.json b/backend/data.json new file mode 100644 index 0000000..a15fdfe --- /dev/null +++ b/backend/data.json @@ -0,0 +1,515 @@ +{ + "id": 2, + "customer": { + "id": 2, + "civility": null, + "name": "Artcurial", + "phone": null, + "phone_secondary": null, + "email": "aoliveux@artcurial.com", + "email_secondary": null, + "language": "fr", + "is_npai": false, + "origin": null, + "comments": null, + "additional_interests": null, + "categories": [ + { + "id": 10, + "name": "Postgraffiti", + "image_name": null, + "is_for_purchase": false, + "position": null + } + ], + "street": null, + "additional_street": null, + "zip_code": null, + "city": null, + "country": "FR", + "identity_type": null, + "identity_number": null, + "identity_authority": null, + "date_identity_number": null, + "tva_intra": null, + "code_comptable": null, + "code_comptable_achat": null, + "contact_first_name": "Arnaud", + "contact_last_name": "Oliveux", + "discr": "professionalCustomer" + }, + "products": [ + { + "id": 2, + "product": { + "id": 2, + "code": "2018-12-0001", + "artist": { + "id": 26, + "first_name": null, + "last_name": "HENRY CHALFANT", + "date_birth": "1940-01-01T00:00:00+01:00", + "date_death": null, + "image_name": null, + "authenticity_certificate": null, + "product_phare": null, + "is_phare": false, + "category": null, + "is_circa": false + }, + "state": { + "name": "En vente", + "color": "#5799b5" + }, + "acquisition_mode": { + "id": 1, + "name": "Achat", + "type": "ACQUISITION" + }, + "capital_gain_case": "NONE", + "acquisition_price": 1690, + "sale_deposit_price": null, + "category": { + "id": 12, + "name": "Autre", + "image_name": null, + "is_for_purchase": true, + "position": null + }, + "type": { + "id": 6, + "name": "Photographie" + }, + "title": "Dondi", + "date_first_meeting": "2018-12-20T00:00:00+01:00", + "width": 64, + "height": 11, + "depth": 0, + "diametre": null, + "width_inch": null, + "height_inch": null, + "depth_inch": null, + "diametre_inch": null, + "encadrement": false, + "collection_perso": false, + "vente_debout": false, + "storage_area": null, + "on_wall": false, + "authenticity_certificate": null, + "state_description": null, + "book_police_number": null, + "barcode": null, + "wanted_price": 5500, + "wanted_price_minimum": null, + "comments": null, + "comment_history": null, + "date_acquisition": "2018-11-19T00:00:00+01:00", + "image_name": "89545966d5bb1698feb7d173f044bd19-henry-chalfat-do.png", + "artist_phares": [], + "contracts": [], + "is_multiple": false, + "product_parent": null, + "year": "2018-12-20T00:00:00+01:00", + "is_circa": false + }, + "acquisition_price": 1690, + "quantity": null + }, + { + "id": 3, + "product": { + "id": 3, + "code": "2018-12-0002", + "artist": { + "id": 26, + "first_name": null, + "last_name": "HENRY CHALFANT", + "date_birth": "1940-01-01T00:00:00+01:00", + "date_death": null, + "image_name": null, + "authenticity_certificate": null, + "product_phare": null, + "is_phare": false, + "category": null, + "is_circa": false + }, + "state": { + "name": "En vente", + "color": "#5799b5" + }, + "acquisition_mode": { + "id": 1, + "name": "Achat", + "type": "ACQUISITION" + }, + "capital_gain_case": "NONE", + "acquisition_price": 1040, + "sale_deposit_price": null, + "category": { + "id": 12, + "name": "Autre", + "image_name": null, + "is_for_purchase": true, + "position": null + }, + "type": { + "id": 6, + "name": "Photographie" + }, + "title": "Futura 2000 and Kel Mare", + "date_first_meeting": "2018-11-19T00:00:00+01:00", + "width": 64.5, + "height": 11, + "depth": 0, + "diametre": null, + "width_inch": null, + "height_inch": null, + "depth_inch": null, + " diametre_inch": null, + "encadrement": false, + "collection_perso": false, + "vente_debout": false, + "storage_area": null, + "on_wall": false, + "authenticity_certificate": null, + "state_description": null, + "book_police_number": null, + "barcode": null, + "wanted_price": 3500, + "wanted_price_minimum": null, + "comments": "Art Train Museum 1986", + "comment_history": "Art Train Museum 1986", + "date_acquisition": "2018-12-20T00:00:00+01:00", + "image_name": "b35e16aee25e4633712f0bd2ddc0d7fe-henry-chalfant-futura-kel-m.png", + "artist_phares": [], + "contracts": [], + "is_multiple": false, + "product_parent": null, + "year": "1986-01-01T00:00:00+01:00", + "is_circa": false + }, + "acquisition_price": 1040, + "quantity": null + }, + { + "id": 4, + "product": { + "id": 4, + "code": "2018-12-0003", + "artist": { + "id": 26, + "first_name": null, + "last_name": "HENRY CHALFANT", + "date_birth": "1940-01-01T00:00:00+01:00", + "date_death": null, + "image_name": null, + "authenticity_certificate": null, + "product_phare": null, + "is_phare": false, + "category": null, + "is_circa": false + }, + "state": { + "name": "En vente", + "color": "#5799b5" + }, + "acquisition_mode": { + "id": 1, + "name": "Achat", + "type": "ACQUISITION" + }, + "capital_gain_case": "NONE", + "acquisition_price": 1300, + "sale_deposit_price": null, + "category": { + "id": 12, + "name": "Autre", + "image_name": null, + "is_for_purchase": true, + "position": null + }, + "type": { + "id": 6, + "name": "Photographie" + }, + "title": "Lee", + "date_first_meeting": "2018-12-20T00:00:00+01:00", + "width": 70, + "height": 11, + "depth": 0, + "diametre": null, + "width_inch": null, + "height_inch": null, + "depth_inch": null, + "diametre_inch": null, + "encadrement": false, + "collection_perso": false, + "vente_debout": false, + "storage_area": null, + "on_wall": false, + "authenticity_certificate": null, + "state_description": null, + "book_police_number": null, + "barcode": null, + "wanted_price": 3500, + "wanted_price_minimum": null, + "comments": "Art Train Museum 1986 Lee Quinones", + "comment_history": "Art Train Museum 1986 Lee Quinones", + "date_acquisition": "2018-12-20T00:00:00+01:00", + "image_name": "75df0baee1fed8f83927371a05a87c0a-henry-chalfant-l.png", + "artist_phares": [], + "contracts": [], + "is_multiple": false, + "product_parent": null, + "year": "1986-01-01T00:00:00+01:00", + "is_circa": false + }, + "acquisition_price": 1300, + "quantity": null + }, + { + "id": 5, + "product": { + "id": 5, + "code": "2018-12-0004", + "artist": { + "id": 26, + "first_name": null, + "last_name": "HENRY CHALFANT", + "date_birth": "1940-01-01T00:00:00+01:00", + "date_death": null, + "image_name": null, + "authenticity_certificate": null, + "product_phare": null, + "is_phare": false, + "category": null, + "is_circa": false + }, + "state": { + "name": "En vente", + "color": "#5799b5" + }, + "acquisition_mode": { + "id": 1, + "name": "Achat", + "type": "ACQUISITION" + }, + "capital_gain_case": "NONE", + "acquisition_price": 1040, + "sale_deposit_price": null, + "category": { + "id": 12, + "name": "Autre", + "image_name": null, + "is_for_purchase": true, + "position": null + }, + "type": { + "id": 6, + "name": "Photographie" + }, + "title": "Phase 2 et Delta 2", + "date_first_meeting": "2018-12-20T00:00:00+01:00", + "width": 49, + "height": 9.5, + "depth": 0, + "diametre": null, + "width_inch": null, + "height_inch": null, + "depth_inch": null, + "diametre_inch": null, + "encadrement": false, + "collection_perso": false, + "vente_debout": false, + "storage_area": null, + "on_wall": false, + "authenticity_certificate": null, + "state_description": null, + "book_police_number": null, + "barcode": null, + "wanted_price": 3000, + "wanted_price_minimum": null, + "comments": "Art Train Museum 1986", + "comment_history": "Art Train Museum 1986", + "date_acquisition": "2018-12-20T00:00:00+01:00", + "image_name": "0e6b6033f37c9e53571c1149e4585e13-henry-chafant-deltat-ph.png", + "artist_phares": [], + "contracts": [], + "is_multiple": false, + "product_parent": null, + "year": "1986-01-01T00:00:00+01:00", + "is_circa": false + }, + "acquisition_price": 1040, + "quantity": null + }, + { + "id": 6, + "product": { + "id": 6, + "code": "2018-12-0005", + "artist": { + "id": 27, + "first_name": "William Cordero", + "last_name": "BILL BLAST", + "date_birth": "1964-01-01T00:00:00+01:00", + "date_death": null, + "image_name": null, + "authenticity_certificate": null, + "product_phare": null, + "is_phare": false, + "category": null, + "is_circa": false + }, + "state": { + "name": "En vente", + "color": "#5799b5" + }, + "acquisition_mode": { + "id": 1, + "name": "Achat", + "type": "ACQUISITION" + }, + "capital_gain_case": "NONE", + "acquisition_price": 10400, + "sale_deposit_price": null, + "category": { + "id": 12, + "name": "Autre", + "image_name": null, + "is_for_purchase": true, + "position": null + }, + "type": { + "id": 1, + "name": "Tableau" + }, + "title": "Self portrait", + "date_first_meeting": "2018-12-20T00:00:00+01:00", + "width": 205.5, + "height": 125, + "depth": 0, + "diametre": null, + "width_inch": null, + "height_inch": null, + "depth_inch": null, + "diametre_inch": null, + "encadrement": false, + "collection_perso": false, + "vente_debout": false, + "storage_area": null, + "on_wall": false, + "authenticity_certificate": null, + "state_description": null, + "book_police_number": null, + "barcode": null, + "wanted_price": 25000, + "wanted_price_minimum": null, + "comments": null, + "comment_history": null, + "date_acquisition": "2018-12-20T00:00:00+01:00", + "image_name": "cc8e20e2da8f1304b20761cc57fd6034-bill-bl.png", + "artist_phares": [], + "contracts": [], + "is_multiple": false, + "product_parent": null, + "year": "2018-01-01T00:00:00+01:00", + "is_circa": false + }, + "acquisition_price": 10400, + "quantity": null + }, + { + "id": 7, + "product": { + "id": 7, + "code": "2018-12-0006", + "artist": { + "id": 7, + "first_name": "Anthony Clark", + "last_name": "A-ONE", + "date_birth": "1964-01-01T00:00:00+01:00", + "date_death": "2001-11-11T00:00:00+01:00", + "image_name": null, + "authenticity_certificate": null, + "product_phare": null, + "is_phare": false, + "category": null, + "is_circa": false + }, + "state": { + "name": "En vente", + "color": "#5799b5" + }, + "acquisition_mode": { + "id": 1, + "name": "Achat", + "type": "ACQUISITION" + }, + "capital_gain_case": "NONE", + "acquisition_price": 27300, + "sale_deposit_price": null, + "category": { + "id": 12, + "name": "Autre", + "image_name": null, + "is_for_purchase": true, + "position": null + }, + "type": { + "id": 1, + "name": "Tableau" + }, + "title": "Knockem out the box", + "date_first_meeting": "2013-11-19T00:00:00+01:00", + "width": 250, + "height": 141, + "depth": 0, + "diametre": null, + "width_inch": null, + "height_inch": null, + "depth_inch": null, + "diametre_inch": null, + "encadrement": false, + "collection_perso": false, + "vente_debout": false, + "storage_area": null, + "on_wall": false, + "authenticity_certificate": null, + "state_description": null, + "book_police_number": null, + "barcode": null, + "wanted_price": 38000, + "wanted_price_minimum": null, + "comments": null, + "comment_history": null, + "date_acquisition": "2018-12-20T00:00:00+01:00", + "image_name": "5c1b62faa600e_A-one Knockem out the box .png", + "artist_phares": [], + "contracts": [], + "is_multiple": false, + "product_parent": null, + "year": "2018-01-01T00:00:00+01:00", + "is_circa": false + }, + "acquisition_price": 27300, + "quantity": null + } + ], + "acquisition_mode": {}, + "is_grouped_purchase": false, + "customer_name": "Artcurial", + "customer_street": null, + "customer_additional_street": null, + "customer_zip_code": null, + "customer_city": null, + "customer_country": "FR", + "customer_identity_type": null, + "customer_identity_number": null, + "customer_identity_authority": null, + "customer_date_identity_number": null, + "location": "Marseille - France", + "amount_total": 42984.5, + "amount_decremented": 42984.5, + "from_depot_vente": false +} \ No newline at end of file diff --git a/backend/data/db.sqlite b/backend/data/db.sqlite new file mode 100644 index 0000000..e69de29 diff --git a/backend/package-lock.json b/backend/package-lock.json new file mode 100644 index 0000000..03a8926 --- /dev/null +++ b/backend/package-lock.json @@ -0,0 +1,2314 @@ +{ + "name": "backend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "backend", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@fastify/cors": "^10.0.1", + "@prisma/client": "^6.0.1", + "bcrypt": "^5.1.1", + "fastify": "^5.1.0", + "jsonwebtoken": "^9.0.2", + "prisma": "^6.0.1", + "sqlite3": "^5.1.7" + }, + "devDependencies": { + "@types/node": "^22.10.2", + "typescript": "^5.7.2" + } + }, + "node_modules/@fastify/ajv-compiler": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.1.tgz", + "integrity": "sha512-DxrBdgsjNLP0YM6W5Hd6/Fmj43S8zMKiFJYgi+Ri3htTGAowPVG/tG1wpnWLMjufEnehRivUCKZ1pLDIoZdTuw==", + "license": "MIT", + "dependencies": { + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "fast-uri": "^3.0.0" + } + }, + "node_modules/@fastify/cors": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@fastify/cors/-/cors-10.0.1.tgz", + "integrity": "sha512-O8JIf6448uQbOgzSkCqhClw6gFTAqrdfeA6R3fc/3gwTJGUp7gl8/3tbNB+6INuu4RmgVOq99BmvdGbtu5pgOA==", + "license": "MIT", + "dependencies": { + "fastify-plugin": "^5.0.0", + "mnemonist": "0.39.8" + } + }, + "node_modules/@fastify/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.0.0.tgz", + "integrity": "sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA==", + "license": "MIT" + }, + "node_modules/@fastify/fast-json-stringify-compiler": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.1.tgz", + "integrity": "sha512-f2d3JExJgFE3UbdFcpPwqNUEoHWmt8pAKf8f+9YuLESdefA0WgqxeT6DrGL4Yrf/9ihXNSKOqpjEmurV405meA==", + "license": "MIT", + "dependencies": { + "fast-json-stringify": "^6.0.0" + } + }, + "node_modules/@fastify/merge-json-schemas": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", + "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "license": "MIT", + "optional": true + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "license": "BSD-3-Clause", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "license": "MIT", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@prisma/client": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.0.1.tgz", + "integrity": "sha512-60w7kL6bUxz7M6Gs/V+OWMhwy94FshpngVmOY05TmGD0Lhk+Ac0ZgtjlL6Wll9TD4G03t4Sq1wZekNVy+Xdlbg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.0.1.tgz", + "integrity": "sha512-jQylgSOf7ibTVxqBacnAlVGvek6fQxJIYCQOeX2KexsfypNzXjJQSS2o5s+Mjj2Np93iSOQUaw6TvPj8syhG4w==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.0.1.tgz", + "integrity": "sha512-4hxzI+YQIR2uuDyVsDooFZGu5AtixbvM2psp+iayDZ4hRrAHo/YwgA17N23UWq7G6gRu18NvuNMb48qjP3DPQw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.0.1", + "@prisma/engines-version": "5.23.0-27.5dbef10bdbfb579e07d35cc85fb1518d357cb99e", + "@prisma/fetch-engine": "6.0.1", + "@prisma/get-platform": "6.0.1" + } + }, + "node_modules/@prisma/engines-version": { + "version": "5.23.0-27.5dbef10bdbfb579e07d35cc85fb1518d357cb99e", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.23.0-27.5dbef10bdbfb579e07d35cc85fb1518d357cb99e.tgz", + "integrity": "sha512-JmIds0Q2/vsOmnuTJYxY4LE+sajqjYKhLtdOT6y4imojqv5d/aeVEfbBGC74t8Be1uSp0OP8lxIj2OqoKbLsfQ==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.0.1.tgz", + "integrity": "sha512-T36bWFVGeGYYSyYOj9d+O9G3sBC+pAyMC+jc45iSL63/Haq1GrYjQPgPMxrEj9m739taXrupoysRedQ+VyvM/Q==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.0.1", + "@prisma/engines-version": "5.23.0-27.5dbef10bdbfb579e07d35cc85fb1518d357cb99e", + "@prisma/get-platform": "6.0.1" + } + }, + "node_modules/@prisma/get-platform": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.0.1.tgz", + "integrity": "sha512-zspC9vlxAqx4E6epMPMLLBMED2VD8axDe8sPnquZ8GOsn6tiacWK0oxrGK4UAHYzYUVuMVUApJbdXB2dFpLhvg==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.0.1" + } + }, + "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==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/node": { + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/abstract-logging": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "license": "MIT", + "optional": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "optional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/avvio": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.1.0.tgz", + "integrity": "sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==", + "license": "MIT", + "dependencies": { + "@fastify/error": "^4.0.0", + "fastq": "^1.17.1" + } + }, + "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==", + "license": "MIT" + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bcrypt/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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-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==", + "license": "BSD-3-Clause" + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "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==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.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==", + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT", + "optional": true + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-json-stringify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.0.0.tgz", + "integrity": "sha512-FGMKZwniMTgZh7zQp9b6XnBVxUmKVahQLQeRQHqwYmPDqDhcEKZ3BaQsxelFFI5PY7nN71OEeiL47/zUWcYe1A==", + "license": "MIT", + "dependencies": { + "@fastify/merge-json-schemas": "^0.1.1", + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^2.3.0", + "json-schema-ref-resolver": "^1.0.1", + "rfdc": "^1.2.0" + } + }, + "node_modules/fast-json-stringify/node_modules/fast-uri": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "license": "MIT" + }, + "node_modules/fast-querystring": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "license": "MIT", + "dependencies": { + "fast-decode-uri-component": "^1.0.1" + } + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" + }, + "node_modules/fastify": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.1.0.tgz", + "integrity": "sha512-0SdUC5AoiSgMSc2Vxwv3WyKzyGMDJRAW/PgNsK1kZrnkO6MeqUIW9ovVg9F2UGIqtIcclYMyeJa4rK6OZc7Jxg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@fastify/ajv-compiler": "^4.0.0", + "@fastify/error": "^4.0.0", + "@fastify/fast-json-stringify-compiler": "^5.0.0", + "abstract-logging": "^2.0.1", + "avvio": "^9.0.0", + "fast-json-stringify": "^6.0.0", + "find-my-way": "^9.0.0", + "light-my-request": "^6.0.0", + "pino": "^9.0.0", + "process-warning": "^4.0.0", + "proxy-addr": "^2.0.7", + "rfdc": "^1.3.1", + "secure-json-parse": "^2.7.0", + "semver": "^7.6.0", + "toad-cache": "^3.7.0" + } + }, + "node_modules/fastify-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.0.1.tgz", + "integrity": "sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/find-my-way": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.1.0.tgz", + "integrity": "sha512-Y5jIsuYR4BwWDYYQ2A/RWWE6gD8a0FMgtU+HOq1WKku+Cwdz8M1v8wcAmRXXM1/iqtoqg06v+LjAxMYbCjViMw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-querystring": "^1.0.0", + "safe-regex2": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "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/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==", + "license": "ISC", + "optional": true + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause", + "optional": true + }, + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "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" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "license": "ISC", + "optional": true + }, + "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==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "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==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "optional": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "license": "MIT", + "optional": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC", + "optional": true + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT", + "optional": true + }, + "node_modules/json-schema-ref-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", + "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/light-my-request": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.3.0.tgz", + "integrity": "sha512-bWTAPJmeWQH5suJNYwG0f5cs0p6ho9e6f1Ppoxv5qMosY+s9Ir2+ZLvvHcgA7VTDop4zl/NCHhOVVqU+kd++Ow==", + "license": "BSD-3-Clause", + "dependencies": { + "cookie": "^1.0.1", + "process-warning": "^4.0.0", + "set-cookie-parser": "^2.6.0" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "license": "ISC", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "license": "MIT", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/mnemonist": { + "version": "0.39.8", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.8.tgz", + "integrity": "sha512-vyWo2K3fjrUw8YeeZ1zF0fy6Mu59RHokURlld8ymdUPjMlD9EC9ov1/YPqTgqRvUN9nTr3Gqfz29LYAmu0PHPQ==", + "license": "MIT", + "dependencies": { + "obliterator": "^2.0.1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "3.71.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz", + "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "license": "MIT", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "license": "MIT" + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "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==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pino": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.5.0.tgz", + "integrity": "sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^4.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT" + }, + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prisma": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.0.1.tgz", + "integrity": "sha512-CaMNFHkf+DDq8zq3X/JJsQ4Koy7dyWwwtOKibkT/Am9j/tDxcfbg7+lB1Dzhx18G/+RQCMgjPYB61bhRqteNBQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/engines": "6.0.1" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=18.18" + }, + "optionalDependencies": { + "fsevents": "2.3.3" + } + }, + "node_modules/process-warning": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", + "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==", + "license": "MIT" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "license": "ISC", + "optional": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "license": "MIT", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ret": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz", + "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "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" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex2": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-4.0.0.tgz", + "integrity": "sha512-Hvjfv25jPDVr3U+4LDzBuZPPOymELG3PYcSk5hcevooo1yxxamQL/bHs/GrEPGmMoMEwRrHVGiCA1pXi97B8Ew==", + "license": "MIT", + "dependencies": { + "ret": "~0.5.0" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT", + "optional": true + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "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==", + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "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": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "license": "MIT", + "optional": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 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==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/toad-cache": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "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/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "license": "ISC", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + } + } +} diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..e8beddf --- /dev/null +++ b/backend/package.json @@ -0,0 +1,26 @@ +{ + "name": "backend", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "start": "ts-node src/index.ts" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@fastify/cors": "^10.0.1", + "@prisma/client": "^6.0.1", + "axios": "^1.7.9", + "bcrypt": "^5.1.1", + "fastify": "^5.1.0", + "jsonwebtoken": "^9.0.2", + "prisma": "^6.0.1", + "sqlite3": "^5.1.7" + }, + "devDependencies": { + "@types/node": "^22.10.2", + "typescript": "^5.7.2" + }, + "description": "" +} diff --git a/backend/src/data/db.sqlite b/backend/src/data/db.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..fcf7c8ee67b387c7b9ab79770a612c91eb5fb362 GIT binary patch literal 528384 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�VSd18N?I7oor50T_ z*fu_r8J5HwfKzLvstyb&AG#^OLX>|~-e`OFF_NVOWpISdBClWKvwL)Wc8?CwPT&aM z9`kmdz2bHraXajiX(r`5#qOH&%n4FB=}WXQ=T<#BuoZ9R)(q5jk_Je|Pj_aL8}YE` zbs6RU^Ol~k;%XJMAH-_l5rs99p*Y4!(}9Q{C-m>M{ad6j>+|#8XTDWCc`n^+`<&o| zQ^ovaVb}8%Ceck#MDj^J3El2~U7C!S0vyiiQ3^-2~{X9}WwMjh1;2I)FNFa?9Kjx~OD5 zEbO9Uq;@RqAc5Gv5#c%}sJU-wR0Oe)jaELKU+3Eop(w*N1e3AYm-}y&-~pV+0CpYXhM>NN83o1yNUEzWO3Xi+z#6V_j zqF;prX~@H#L*B*1UD%us;_f3}T-?PY@4~zk_Jl#hNrp)T$4etyQffUuS5GxcAKIC< zVzeW}K}FxFJV|j}p0D1a;}^f8S5k~=lCzV7_5+@a_S13hH@c3^xy;^EI3vp5Gw&wL zO+;Q9Rp=dG;&nfRtgJ7+!zu#+Gee*B)$XX$fE5a&1dXJO9N!?u62twQ|&^S`Oaldq@6HV9k*TY)D?JZN0Dn4S>EN|4J;#|?}qGTw;*4DnWOVi zTX%a;2c#AI_O*4pJ9Jh3_5=CKn#cLeS>WM1$Mc8%=0uvrb$n|iN($0xI6p}YF_i7= zXI0#fn{mv;Vc7|dQ?fz)QxMpUcy#}RZT=k^Pu{k;YK{EftM$s00tjZmXz4So*6^8B z>mRgIZ&_TWMt|>>+IaGWl}fd8*0dTvf#17ISDq9|E(_XOSIKht1pmm|`O1?5-etiX z7+5711|aDBBYT6!lgF&Oh5iOs-6H&Z?-q?Gk1k53fbS2WlE`^l#M~471E@5%IF(|5 z0F^{i)0x*&!25ew>B^HLpJ@>TG!XqG8=zO7lo?KEJ{bnRe{^pkvYi&w2C+Y~H;A7U zSx<{u=LOE>4gR3(yem(NB&fx-LgY-|;Sac|y7Ht*f?CWQg#O6h;H;Aa!az#jz!_~} z`~?QGu)qBO+Qj%ziUg;2>wT3GiBzz$@~3%AgyVA?)Y08;xFx&0+FOn7OMaKg zDM@5+6kwhR@e2e25-8;rfPjFb1n?B63Et8-FGQsRw+(G4K8xh&m^$JiClilRs(9<= zKY7z4wGRAIXf4v47E#we-~YVU^|pTHLfctN)dh_^8-CSrs$pkkNBtpZTjhu9D_tLJ ze7{R`o$Y+M?w9rNuX}UdrrM`!hbsQ1cD3V6j$y~SHD9SYQL`F^z+3I#tUkZ$iK?-R zx7p6B2;1+lZ?=8G*57cbp+Wh z$5WZk#CyemZ6SqeWb3t4jr>gjUR>RP!#QDRni=7c2*^oKk;ALZ}@Zs<5gW{G%BZD@aw)oW@~ zoC7EzwzOH^xF^$_0T*OwOdEt+fGl!%i{RPiwMY3)GVd3ttXC)MTU2My)N-B!tNNye z&slL^=<2@XeK!YvLlf~MgJl1j8t+qwCe&-S1dR40R(HLAY8iKh$o-0icU6?oZVe}m zpuZ;lNHDukfR!2VHw%yGWyPJ~`l(v(*=DIJEqe_~?E~&ZnUN!jz68Ls8vljMxMhIe zkm#fG0v)=a>sVuw6g5H<7m0LDjcE0mgh1%&IBWXb#-7=8a(r5lu z*roT3rv%0O*32ku^;S)J<6)jbOSV|HBr;xm#3FL1KVk; zT*VA0d4SLIC7PN-J!2!92p-@q=qsX<^DBJ5SBl{|FFXHVR)OzctyXogf6A%f+tP6Pwo=h!?w*N(qvF^{|4N9m_=HMKMXo&;bje*) z4(>~TInS!U__k%nhaj~Tr(z@GAV(XD50$>z-l-aHwy8v=`Z@&F^ZFjRqMC3?9aXqVeeD!twixaWuYaE??GAY_Z9ZHg*IgGR3&$(7kDh+{>V6NzC-R# zW)_^iL;8ocxBVh){%uYIhy_W^Krni`x_TA1+ znX@eiln>A;5XwjBNP=@D!%^DEg7#--UC=-G-o{-^_9*TuKt+HoP?@U-iteZlu_Re= z#~UW}D&1lE^4ry3ZNhztd-s4wytgrDq(x!BC@C1J)>hzkM|F*@r&396K9Dm5!tSaA zrU965x>C!G8^*Z#Wul&~7HQkn1P7IF=sR25uj%3&D(<%J2L}PM935lA$`tlpi$+Y1 z>i4%^1e#WM7sG->)V(Z>7|3J#kHf}K@nbY~3Y%k$5R0dD5AzhJ5bGh*p^eM6Mkg&g zN*->ez*3|cKAn3OHfvu(zvpEOYi89df=5Qj-GU|_KJOhPeJ3(wH_0Eikm1A+^A#_w zkS?c-S=r*lgFK3*o@FKZsFi_HT7ig<%vkRPDO-aYrgQMdn{K3v#IIQDj?J&mTJ|q| znX3nQ0!tg~vBbPOIx4qqz;q0aa#CEdT+)WxEtX3i{oJzT{Mo^vq+&AT!wYU^-OD>Q zZnsX%99A81{}7P-smzg4b&$Pho*DLQL#*X2y2QSeuAYUVTds)dT`W7@oX|xRnPdFt ze2a;pLJv<`-L*sIuIH69pT5ztR9|A0QLc_9mH7#531^s%u&6aa;tpNZ#!;8y)`9_ zgKvPO(4)ja@O@P6XN>v_t-%6AdGH3k^4cw%xNVfM>pp$!rs@C9yY`9cEk%z9F?UPf zSbBu6Xw}-+b88kImi;@_NlyTOl!=n-nNSF~3bNj|2pc!zpJz~ecE^Zq? z`u2aC)UOdw6Os0k>4~s5KwF632I`0C2+}VB&=K$`3o{)=S_~f@){ewovKfttI~k54 z!ttxJm*An3=_ck2%!h@%em){a#AQkDfxy1r@xjCpji$Ws$$S-U=f4sRfhkW8psI!m z!hq5#7)V2uBltRqPbO-5%=}wm9a9sy2!{HlpR2BJYHfB4^>vAG6&5NYLSv?y(8P#9 z)L)AF3gQFV11b{v23RBa){bj8QCl|;PZ`(n!(^+c!=yl^0$^Dr3C>$depS8^Kd?#3QwK?CCu@t)cQP=6U5Jr60N(&1!y-6W&(hN~ zY#bsXYm=x;J&kO^=*W);6cKog4g%T0fCa;AOmnv%h<`Tej zki8gHn}oaA0$m{{hlouAGn=aBg~r;(zII;*1;tglM|tapB_LCv5s5Q|wD_W6*!W3m zCqkCk$_UjeFfxF^0!-L1I0opv$!@oR>qgp7MhsK+)=yBz3BFj4x)(D#mlZgrBpZo#TE>)y_iyv@r( z3C4E(z)IBn*^bA2%CJE&mmEU%vd-nBbL4c!|gc`9lqd$i4$%BTBS59Euvy z`Iv%W5br#J!Q_dhw1F`dHavn?$;^r9hSJtsefw7?ooKiry8#U&3y&qGebVFB3cCT8 zQgf#yxbIj-=1<`28OYZ%-Wiw8wEL|4R6@stK#7rgrzTYh9s@8s5?@XTb5bS0St^Ud zMCF2HuPY1o?{P4_2X)veJ$g;3x;cBH=m>guqbMvTguKFCZrb#6d!e)%nak_ zlY|N5BIB{9&i?xB1x!Ik&O))eD%zUB=a^=Z^x)6SS*ZVDzP8KPExmg|x}TUYfd62C z1OFKn@Zbh8rOojM*KLC0#?BZ&->k7h(=HoVAcW8Bpqrz79llts14tE-Pz0DyZ<1&` zKtC8N44705Jk_8U21YGK8YZMC0!$UASNJ91KLdoCv|_I}gmo8~4iR!R^;4jEMVqrS zrB528h2tc$uxb4=ry^fL<<;Zc_X4TLaTKf`Vy-4pH5>%I4D9P@N(0&lnCk>dMG)wE z0dWAFhSpa7X)i1$?R%dRJB?`K?=MGez@G z*(}tIc6IH}30j^oAny;*a3L5dIOepn3)~{dgMcX7e?RZ~vB@ z9`vFIydi*{nP4G)F@&OW5HBu4$fUXl83w0|~ zk98P2IMot{g0Vx7343JTxb5oSwEk@J0{KoNS8y@!6h8BJf@C%kCNY?4A1GMhU!mdw ze=o{x1PdFv)&ZY4p{XL=HXLAD2(UT;n1w`-82Jqe&3D>&VlgT}OJ&?`?wz(|MQUMl ziD}@fh2zj4+BQPAncx%{AI@)|$etC$tnui)LNVs5L^1?gT##v%UJke*?SrWTgcr(? zG?TD^X#g&rIhaX}b!?23k-YV)1ndX7K{s78592anIW}cQ=Ak6-valRh8V7r%>&NZO zS9ecj#c+}|HLo`r#TbOi6aiC10|W#BrgSn%-U#{1u^7R+DO!aL29Xx+O@{@|8QAq& z8aSk4bzvtgQumHE*)^yelCxOB;!q5PJ2Dm(9BAQKrEMg`D%!ohZ(xwr3$1VxYk5qJ zYQ=;K+5Zc$g90o9SaBs8r=(|-)ewm$z>y-YUj>>`C6yR`F(tSUl9(8h@&E(%r&+)S zqAF?g(tYTGqr6ugV?kq|v~`iN*jM2+pTGM>7LSWRp?`VG;6+*b&^rqn_Rg z_NX{F$)h0?StkAJU(E8@EHO9fD-fH+GFn?#WuNk7MWUphStII%e|d|j!qu~!3H*LB z&5sX{_Msp6&u-WSSd?g^WFwA!zUg%={=`*zL7DAzC%kHctotHhSni9ANh9?&Utx<~iLS7(2Lc^2&ChH1 zy7&!;^}oIQ5g>et+*f_6G_V#B>qP;IBnaE*4@Y7cD+@vak*yG&PpAh#*;v^razX$# zVpH~9l$7~x7Hep$TJ^S*E;=X@PsMq{=y2bO6Z}x9wenSEx_^N6XE+c_!ygAID?}T> z4Mm8xU_>+i!8Ys48 z;#D00mg}hP&j6H@*Hr4P`@&vwR#`ZuNNZ=x0DlVv2k@}GffR7|8hCIp+$RJ@HB}Ie zi5(ED@(4Jo@J#}pQL0N}eQ^s&JamDHCe5%M1&5rhhIaA_8^!vuu(hmqkn$CR9cprf zHExE)BK{-!F5CETZw;{z7gy!G%Kap7vP%fi-;Y}>C^C*(?C zND=TJHs&zf!}7uM2pT<~N8}=;p?1Sgvr7jGF$}E$n3!ZW#@J%cqxR_QHXXAEPQne@ z?PU}#f)|oCnwQsap(q*sK7cR4IUrLx5rt+QbkP(p7HSr&#_9}Pngs2IU*K560DB<- zM&&dd)*z-*qb9tNVF7chHfP&V)$m*COUxnzDEtS4hsa!x2aMT4&~s{Ij*r;J|8xJh zXnS#8v$~=20Tz~!&H~qw2G0n-5}Yt<61WBu-hg(GStZjOi*~vGkzNjRdPRm#=7vjt zJ&B7jSgVxUR+zpuc(Vcak^36CIH;(b3T3yU;$4~@ljm0S71i)tF=UQpO@|3zURhMEB=PBj%{fdDTt@B<;- z3k)t2rXgwre2SGED>&W>tZ?>l5vEZ%a!B?GhWcgQ2H$@0JChqgn5xNcWkaTWkP0># zqHb@Ki{*kI;EQY%oAAT7@rN$|8aj%r^1u*dp2Hy!I7i^HJEn@fBDUg8y`q$bdXhi# z;5_g^P2~qB9t3H5cLhP6c{JbvhFBfwoe)=^KJ_v#^=U#f{W<7_ z=Vt|Ts~jt5W+;83c3hPlTDqzEk%^H+fs*f6KA}AH1p8_DT9YJ8r$Tf_Y-ZF4>>*G# zDFDv^G&!xJ;P2{5chXKSshhH8uPVL69xZgO3hR?^CPAFYYu5UP4NDR!a%q7;$E(Lk z#_9pegiWCgo|piJ+yDwniO{nlIVJ>;Y;E>R;c1q!pas23SZ)DLV78=bt9{!+>?epo z9TdLs`L4BU*_Ia*UU-qnFpsiFPT@1fi56rv2^?ISltcI_3>|P7dgLwip(*j8gffoo z6(}RKAs224k6F}+e{Y5eAVRKI4Cm_-4^PT|*|_CJ*m061)%jVvgAoR_1f433&p9lJ zC4D#+4V8wC8|5lyL-uldQ7OVwm%G;0I-fw`Z8OcyIW8+xXjVtHL${YPly5%AW*Mi07L7$%0094jS2HEXWE$2H(z8ns zNily3v@cej0X;uj_VnsHjx#Pb+jXIWVtZ4x`0~cKvwsxpb$F`sG-So{Prw)eQwidf zAfXexdyUDJJw6;<@O221Y|y82b!WJ0q!9%P%ax6xh(3)LEKP*r5@|-oibQqlfze@3 z>@vsH2W{hT_I6NT;yQskfAI=N0i0#AxdIZO?O%*NA6wfnjvQ4aN9HNx^(01R|FTJd zKJ;nIMrk>VZGup)_&7?~0B?k)T>r|bZTwBOzeEplb;mE)vu#%aR|(OWHwZDT56(0Y z<5MXnA`V$tKXEvau%0kkGSGDR;RLQGSAA5<Dh((9k%uQY<+kK#l;?40{;l!a#Yj(E;)-Py%?F z=a@6RJUzn+BjwQfIP96);tLiP6c|KaF9s_uVxxwlNBVUB~`Pi zO+PD+u?e?0mMd0`)h;t;I?de4C`bUI1F~u;2G?97A^=N0(F6`*vfn*`O@VHOyWbPz z7=s-KfNUC!ZP3)|T~e;$u4ejNkqwqpaG@3U220l+vBEJ<8sY9t;1mJq8wv?Ls7Y{I zLZO6k?5C+Ah?hOMH4~nok8LXMEDk8VfI$Ft0jhzH#--PtAQ)Xt-33ak2LA&`XTmSW zz=g;%lmb7Ua}<0#9G`%w%;uWx>qOKO18PIi40@p%q?H-wJ_yXHzoQd98<{#2NR5O9ZurF1f)zr zl7gp}PQvhG$*wtho>h3gsDdt9Tg zZr5g4jr04?&pO}XJm%c*^gA2t{<-eax>I#ybywGIuB)#7ZtbJB_t%crcGYgGt#W+d z@oC4q9Je?QIbx2LHUC-j&62ID} zV+h$TgxD_eu?;uPtrk)MSy)MVpY=X#TirBwUKyFlZIRn-S2fL@TSjJL<-|(cEgR-m zNtqhUXRUrV{*fBlC6q5U&#e@ayr7jfm66#M-4#{tYMxsvWJ+kQ+&3&fcWs_K zTS$TYV%2!@mp=6@mGBkwJKZ#QR+$HHd2!2&wp*I#mXv$&y+2j%{i%4(#xi$W*0-$B zcFVfC21BN{u+y-aN@~}=a@{NI=IYBx)T{OCx;a-Fi5`28echb1jD&uVx-t^F9&BG_ z$FC-`Xa(RFjxWhBxw>6xavDnr7myM`YQKde02 zG*@{BG8JWHR{m(^kCZ3Z&DqOnbK>k1XE)DrgkAEz0caH%trN|2N*O8T{XZ3-C)dut zUP$3QvfCC~8r!h_{Mp;h+gJ!xo_vuHVokHR39%ApM!Q$LS9#Jsd#fR1H86xsZ2jyl z#?!1sY~Mf3C)PZB!c?iS4@>I^h!-E)V|Jp9Mxxz?%<(cZo*#OCs65#`d#udUl$XyJ zAMSLt%$@oN`UjLJH_eU<84QC}kB-0P%|C%DvD^G!H#=tB(Mr1hoceQ`W=G3Bv-P^x z>x5n-Wn?bB|I+(~%*|zFME@7HFf3$Bj5T}D$M}felo3)TdXw^;eeLYf=>!H(Coph2 zf&Ov=)97&1=>+;tC(wI3fg@!EY-5b7v=9*0X)&tojR*MHZbVhB+w5xI2#{md_Z|i(`=%QjF@Sa=hn}v#?!1ur*i)RKK)Izhs)f^_muA` z(VK2GZe(RotGZY75o+I1=1#gw&9m2+xs&qa!+dPJ*3VvNNLea==hMoaPsiM|uQMKJ zCA4A5h9&*(*+XSScDC+p?O#88u*{?Ecizp1`y429pX(pH{;__~?6pD!V_{WA@wcv* zq+sT^t-?KfO_^I>K708rPu*Weq+zUKtbg6?K10OH=r|v7KH{G3DRUFoYS(J2pj(L0 zxveU);%%?+LFno-LiU>#J_p>hd&@jbsKb4_3=yl5wDj(!cPnpUm~@&Cvl?!)Q4TQL zI)qed>*blo*wugaed@Nv&xR_0;O zuQ|WAX8r7?#%-+h(FY^uBUa``j~XIYMr+)Q`}Vq~*+>}~`#0?0u&GV6;W9Gn zgX)9IU1I;QD&JQcpKttl<69dC8rvIJHT-A86AgdTa8tu&4bJ+P>OWWiuKJ_(SJ!W@ zcesAwdd&4M*SKr1Ym=+e`OnUWoNsn&&aKYXb-%9rM%{<&?y0+}ZhKu*?eA*;q4s07 z+1ioXj@pZB9ggogKI?dg*1J#JrZd&Tyw z?aysvwpQCRUZLba&y3uymFmn>pU@`(i0$je=0DS3keI!6VKyxc#Qk~e6V<0k!bg=bpsBumK~ zWXCzuW8~$=vXs2RIGkf1MqchPOUWC2zj2fI7kRncEG2KS?dDi_k(XP~Qt}4XZI1F5 zdASQMDX-Ja#!b3eHu3*A@*&=`5<7t(#SzcTbz!RIA$@`ud@-bDMJeRM+>Rx3syZ&3&rX zZG<+XP1EJJsbUvnQ<|pbHg%zKkQz%j#A{8{a+6v@Ml8OSSDU8gKDC6*s?@5Kkda%} z5;Bf^9QUxRnwGoO5;D~9bTT6)8AGJTa+%tVdSk8sLNIuA9-7>$Gw|b`KMz)l^L2+eLT?u))qb((G za88*dQ_5T2({h7bLS?z=SU)Xyw+pu$Qf0xm6rH?v{j}WPmJrf?W>lfv-qWz{9?2C{IqG>+{#*6Ch4tza{aX2%a(X2 zQG0KCfMzhavsO0>pU=7RPnxFXeip5*WW=gg`M7&pZf8rpnOLzlHcgwGS*zP@xpm8} z%Dqj~x!r7`KS#cO%|Ok7@?-b3+{~7E)L8G)>-w9gSqez<;G z?pwt@Ejq0nXwTcvpO%|dp`L}1@}@6{&-3)|+#c0J?BH_;pOZqlO{#@Z^F_@UA$0z< z+@+R!pmZc5)-+vWqbi%R_6vAju@Z8lYF}^!CS`7a8Ga1qKKHb_JGHU^V^5AfnQoev zo6{1NuTL@Sr{#vUL}kk9>=V?Ixhb`(%oW2chLumyA5?Bb@|#03ZLig?rFI<;XIkz|OZBa1Y+u{)p=Gzkjc?_9o2TVA z6?v;$#_#G`v zr|W~RYNyIM{*u~z9nZl4aIE@?>a|t3RDQG4Q}Jf|x9!JmzqL*A2Y-zJro7ozL}18B zv>GD>1NRaCgtkSA^)f-k7uzawE+FhAa+0LjCv9UN`OpsXSj08nAGev72u~#<+3yG463X)g0WB~Y6K+Kk6T#?EY*~fZ@;rbAh~*U;FkS)flFqnXkNxO{KaD@pIC>w;<|Zl;{z5_W##c zc}IC|iXV7U_5$5H!-Y!PuP>zq6EScX(trY_h(RS=7^Y6b!bRDh2gL>EUEnC7m;<2Z8_U=-2<0L@_%dpn^0?#u*n@ zWiFP!xPRrv855YEujJ)k<;RCZfnY*Q`U7b{tky(f69k?P0RDikDPk;3qb=l=B&kQI zSCa9RqP^E;1yPg?yt9eX&OhB+$+$L)Ofg?xCN}%@vAy3Qpj}=^ls{W~w?7e3Lj;IH zQ%c$kDTqlQ=n5%sfW%wE@rb=EVVArzJqr45kupA?dva~<)P>n4LPddHp%jcCsbX_M z*rK!%-aKAAbE%N8XnapxzUa6Ygcmj9rv_mQCn-=Pggfkyr9}F5nmkqO7(DR|JxDbu zpe+1R8D@D+Z53&EjcDqVn#w0Es7w(hm}kwr(ca7eK%f(Dpx=@jB!vShbFq@Iam~{t zc#;|Aj}li7dIj14WU>RbkxmJA8HW66>Q%sOkYO=juOjHulWjm<3j*(4+ZU@F*;%0O zXx{(?Tjp}9P+@NZq?{0dB_!Ub6QtM@`w5;2F|?43Yw0q^Np=LOFnnCOBqX8m=4?F* z2NqGk;X;KaRi>rB4&Xn?mrEzTUW#k@}Y;H@SSrMPET*R;X_<>q6gc zi_kZ8EjhK4W^KYf3Zf;5n8Oh3i0q`0xp2&{=cRXpVxy9ds6ogZf-o`x9E9pikY^31 z4Ys$8QIPcvJ0fT-`XpcmyWW-+)Kx32)mHPC0|qvTH_$aml8w0zwT=5ZQ)-m>fZ`efq_guS||NR83W6>%_z?g1l=M7^OZ2{CupffR`Yxc%B>)n>70U zhkm5!*LdP-eIP!&E)FFbS(_R;&>C5rB5pnwCbJ-!3<;7;ZX{;#sNWzdbk$95&(_j> zn@S{AtZ(Q13)?9?M(X=s!=t8EwQhdz6d<(c`5 z>zIlhyos#P!sz9^si^Qx@}?q=`bHmnPm*^KSLG>o9q)>xG}-wg?iZdqa)QW&O<>}Q zwWb0>(NYs8wG_^+KVjSxS->(Kfn1XH*&3mwP6nyBnm!ekQqmjkP;b&et4_N2DxbS9 zUrQDS57}xTAVVpsg$V=?LmEmVW<-OZE=ih@m#kQty+l=-S^`-^#*3c+EoaO|ftyv0 zma7(_C9B3%YCt20FkeIEH*8>jd^nnlk?!IrZ-^{Gg5*i52DZdYat`Sy^orAKNQ!-4 zJ)T`Rbs$@Xh8I|Cct@>8xAksSM?v*a$K3l`dy4e5UBW@!?_MI2SPcYJ0ExhAFn%DA zU!+9K-w-st0u6QD#v zcJC);Ax)wMuq~|Xg5iKCGtzei#JqugTrKK)eYRqeeKyZjvH!J=e%RZ^$P!oOW6B-& z_FwqbsHR2KBx%}dR#GAIk3uSx>!50Zv=uIqk0{<&4u7V3FbncXG@I(CR%h*KDHF_% zWl8=buV@7&sqOq7pt7FmQ{7jOtE1|OD`6YW?%IH&;=1&1QcnT^Dv%85Bhdn~1&|~X zBIP&%5S<1-fu+?)wWxs#M9MTY=OVS|a#uwiO1-D@KBe*JWB`1b9Dw(c1#m~>aN`YR z0$kd7QR6v{mGA<**zgn?0e{(Wf5V%Ia7r}nZMd>wbHlj}j{5(o|9<_~>mRHC5K#g% z^~dYe_513#)_d#M*1KH4alPdFrt1r?kGLLi-Q&8|b(8CWYr8AxTJKuoeAW3==kv}d zoPX{7b7$5$=^S!i=iKFtIxloCbK2{EQTOe-C+j|0_h8-I>+Y-@sXJWPS$BEe#dRym zEO?pRf~RXgQ~SZ%chufpd$cxH+g%&4-2yAYCmjzu-tM^5G2%GvxZH8Eqtmg{QC;&g z7zR(*e5U4uHSegoyXI(ZT}`T{yCz<vnzjIrBuF9`Q^$- zD(|a&pW`QvZ<{Urzu*5`1OHnC|J@omtKtGXUMG?!1t+RE;@VeK5_RxY~S`-0iMd*fO2V#fMI|BE)}oT2tEH&K?}`_d1YB3mmxzQlpU-t=VTm{9 zx}vBg>bktBB<#AZu*BzeU0PV;4Z31QB>`8osKoDzDhaznMI|9uu&5;H z3KW$DT>hdGzspxt;&XZDOT?DL8*p7xRN{ASDJt=~Jo6=De&}XDi%J5nHAN+U*Xp7YpX(t zoWCh5@jHKARN`~KQdHt~{-m(P7j^zeQAx!4??okH=gUPUA?Lppl?0u?Dk=#$e_2%G zcmATN#OwTdVF~s8v!ary^QT26VdsyFN|K~ag<`TfEYEWr1QN}|s17L`Pt-zh2yJ6|j+2|53{s3hq8c2P;d`A@#B|hih=SuXM-|zf#QHjs_ck?B3 ze)c(^m@koYZ@~GtMJ0ac<3%Mt=a=S7Bo2Jc`Ng7=sPhX&C1L01i%LSy&lQyfosSij z1e~8OD)Bo%GhZU-y0G(8MI|BUCyPpg&c7)t2{<1qD)Bo%QB>k{{v%J}=UDaItA1A1TKSHO|EOrU-*1~xzWLu>+y7zy zj-xf3wQoo~-#DnuIbB81@a3IbDIfo?ZS=N>KY`0dT$MYOJMjqv{3Or^LH@?w#`#Yq zng-O*?+@cyD|G~f*G0m*fx^JSmF^glE?0Zq9p_~gRE!9BTA`y|xLohJxzJT8RSZEV z2bLB9KJLCD_qKsPc%1OzzV~3hw(+jV#5*d=qqeh#!(hUOBIz_3ia_J(KO}+G27p=r zAqGM?sL1*c;cya2Wa9^*rXV-af6#zhQ_~^i2XMQA$Txln1CF9W&)@?hKj6jR>yL84 z6a?iz7)Zq+MMyzRPy*eEg;uV5z&p&t`UJ$s^VZj!)pL5cxu_n$?^?~>qaJe$jMCOV z5Kv(2NrIH_%C8>fQ_81s^hG%x1LzmOX&Q7d4w?M|(H9R|6o+4e^_BIBQ-Q)D&gNX` zD7^8lx1;bS*6z`QF2`zs-awz*C+K8E@W~h|?}Qdld8N8Q*e?Q)He+umU z|Hs~&z{gcycmFe5=W4WA7%*VKBOBWod(7+$U>Mn!7m#Hm*~V;vS?<`vl17XqyZ}LC zqd{)cM3csjljco;CJiK^C21DgkcNbmkTyw^W+Mr060$Z+%bTRxnl$hCJok=tM{`HU z@8|#i|L_0vsW4Z%ckbNh+-E({IluEeLXiS-HJ*}SEEdX!p_B5}viDnrRi082R$0;! z)>FD)#)l#(tM=>8%Rr&lS&LI*=|1P!?)$&W@Q`C~VtYb$xYdi`;)=l_l_4z#-kk`v z>G<$ckiUSH2;-EjS*!3{0gUm(w2VtkYPAk(_f@6)kTI@gtOgs{SWbOWgGDfv&*csd z9U1Xt86J9mtWw_0mdKMah^^uQe+sH?VU&V@CKid}Qo*PW!z6wnTN^44a)VhNw^=|u zx?)4EYawky>E3c}+Hg5_HEPOhX8NAhP`031n%-fp%|vigRpv$7Cj;=8;a(1734x$9 z3wdNLNZ*8!h>oC>9HCYpwbZ8RK>5w*j(>U*#KFqa(XyaUn`XC}b1D%BmS(>=0o$qk zEK8(ugTwlcSsHp!7@HyHjK`pMhLkpvf=d02f&!l~{NoPACrQqXWu+qv30mofR5fa$ z^@okvBIu=M-nyG#fT}L&Pi3Mh_;xU!3B_?$()D` zAp^tVm}~SyXDMiG&ZS$kcS2rAwhKQP4j+>fgq*Qh))$3y3MZ2lyq?s8(5 zy26Um1T|B`qg63wqu#0_BRk;t)Q15wrN`N4Pj>gagC<4?#Jq?YAOJPd(2 zOLY>6MS!82MClSL@nFWw+?@vF6!fNiWDg2uQW0+)pQqOcEGGh~EiCIMC%npy(A9FZ zl&6C&wqH;NDNz3@;`m`yBx;x@L_ruoYcZi7b7_X&cRd&O5`AXa3qlN zgJKCA2`!@NGqOH7FMa)%+b2OZtSH@01u1N5b@!gfN~qFL1!0=bc;x@h`Q&i2^Nm(P zqU%>&4)_RKI?`4M)gKJ=QJ6~UXL!7MbJ9iFuVT!#%x3TsMx?6&KT#xqZ@HoKh$JW} zTvi%I%(eEFq{OrUKvXTM+%KDT28IVuHnjIoTLtxB*5}D&V7mHW2G=l{w<&g6{d!USMbq01P59*1B))I{SiPt;xfBlCJ8dZ*s zFQy>qr}LAUgcKn3wUhwUNKymSH19(`3R``E3M|(ow*<`gE+cu6aO5l{^eYJ;RN=oH ztP(an2_g=33`jKAR)7GJXcXv2faDqxIFHHvbY=;`Di|3Z3}R^^C9E$EGa!~qTUQg- zS+U201zn>e9tqQl0+s?tir83N{9*WnQqGkX8 z9p`r(9Y5>%ZpT+Tp6~dZj`w!Ftz!lZz*vXgvA1JmN2FtQ#|0fN?Z0dPH*f&|)c(o# z54Atm{+9OFw!gZ46fD5*_ATwP_AA;iZf|dQwEd**g|@$Mdm22z+uLT^3TPxY^!ViIkBo=Zv7N?hR0jq()t>30VAzLvaKcFvbN=tmW~#u_H*rfFcExO`-t|0_I9nL9n;3OthP_PUb_awfJZwQ zZo=Q-xqs31IoC6U3%&#Vz(cOXuDe`&T^r#l@VL%#H8lUS`G?J4Z~hDzf+w3Fg}1QS ze7O0p=G&V4KoJC*F9k*L%chr_KG*a&O@H3>hNf3H-PN?WX=Bs+ri+@I8h_UK-Nvsp zJ`Z}};l|fC9&XGu?rq%IxW4hC#-@g!HT(JQZKu20kl>Q~fv)ct4O59+>H_p!S7)V-Pdwv(NK!@AX^m^OH|n40e5k?r!WG(| zB<_Dsf{gC%e5l^IwnlqHV(d%i3)LCdF4szlL$4<~@5Y~WKIAm6t=47|M<&dMaTwQD zX|GS*yMx<)Jk?ozz__+jdtKt*nz@DTWyI7k_jDF5&lH!DMZK?KPVt?MKrQ*18 z?IP{?Y>gDhjB6Ka#}cDO#hcMt%p2D(&D)dY5r+k#;0;;QMML=PnL%jn?UKCHp*`#RJA2?b_jl$uiPe+;3cK z(+-uHL^_LE<65hBPnj*Gv#1-_+}cE$5u~%2F|M^}<7L(lcQMU1O4PJ5$BXV_$~bdr zdB^kaV$wKk*6wz^*jc>O_;!;vTIS{GEZ$*UYt(XO?v2jktBh+6+DMsSqqBIsajjk( zE^}yf7H>1I)oDXzo{Y}ot;RK{cCgHa(OJC3xaQFAD)U`*7H?M98vdXSmN_jti~Edg z|D_!$^Hy{gZ!)g^UfW;hrsyp0HLm?m%a-{kI*WUZYyYX~WsZr?;%?*GZ?#OBN20Sh zU|jo+mM(KebQb%KYrob~Wj=_`;*G|&UunrQ=YzYri)(dS!!NZv7f-v3JB_pd(7IY) z>n`>gXTQ+yxaFVR#T~}k&$U;ze%D>>HO_vf-A1%{@rLr*?aiNe7q2(Y{-<_p$HVU8 zcH``2?G}B;UEF4z{kyhr^&)q1Yx(Tv$dm5k7US&Sw3{x>xQji;*-y1S4S((~ZZ4ng zt^c9BxXC#CiMG4x7w+OlBJ>6Nn zma}H9;Ro8zGJ8R1af5N~`&wU_p`f#PjdAUJ+Kw^{fxCFM@ucr+y;q%XEndZ0z1Hv@ z?FQoSTZ?hy^d;?jXawBFm~rp7we3{3k+VyTv(ITh z5%l8nnZGOKE-o#f1%kh5EndVKVt-b3Sd$62laQCRusK~ zzdxz5oQb}m{=QTzik_hUUgj=}e!$>=R=fDB)9#{Z2Aq9DyGRC(p%`$sRL(>(;Iofw z7miasq7rcSjCMiOFSMd413d9#+7hiON&tWVt#-avl*OOFKdPOlP06Cq-%q2YPRU}= z-yhM=(WYdnSAQ>dPstL`Q~yTm?0C3y%2?bR{#sj94!!D}G8XrSr?if8a8u`$vA8#U zSZgoG<8)3Li+jU|w6?ix#^T=aL9MkM|KgsK#hnsA;0j)Kx^v1{)*JpxbC)Af+*7iw zbI1F&mX3#8r({8=m%I;e+w@cJDOt<;@JY=z;cK0eRh$q1QfmMo-Z~`gdo>5{vDPVBq2<)| zUwBwrr(|(fpE_~%wNAf=SpH1&@PZ1P zth$^&?)n9@LF<$(xST%b`Z;DY_mr%)eDz(fpNRmn%5wJSu9rhkyQgG*RcHUR^NpQT z=F0j`*T0u-9-UL>%K8r1za>m7gL_I=R=)LTt{*YKP05<7&VDFovYM*1@5`C2qv}j% z!YNrn)!9$wOx8|y_OEg#tEM{pv7DLf<)68JB4_4$`Kar=a%QfVkGj4sXXbkOsOu#; zGuO*UUEh;4bG>}j^&L4g*ULv-FUpy@UOwXbXE`(1%ST+_k~4F?e8lxlIWyPGM_m6R zXXbkOu3!PK4 zUa}^>)%DfH#|A}Nen;z+teV{Zr>-xPTE#sj%O(}_r>?Is;ZMne$%k)oeW`xy3+^dd zEBWxvF8z{T_msIxo^E=cbz@3aNj`g1^Y>Ou*ee(Rnx z*T^>#>&}_EM*d0Dl=c(%l(|N}!4N zq4Mffn_MJ4?R=9<>=yD~rw>#bI@T<2c{zPRvT8wR&rumYj;b5UXHA|hGC1O%AVmWH z6lJKMGdCTee3eb2+6Q(co~8NahxUx5$s3T;M^=wj3b8J6?WB5t)95lGH+s3zJ0?N* zV)2>_yT{n_>e7CSR%xNCT}G9bE|tg4AKRH8&t18>%FvbA_KYfbm1%FvahsT#f}}T; zLM5-a)zGA}Js`kDDLeb_6`llfvFxy^`|z#f-#-a=yIEBG;CqmCceZMl~v%v~y$tm+CeX<*1aJ6n~(UruZ7p^~%gXhFR6( zTdx#gW#Z~d)zAjTfuzDTEQe(Zhr^}RY*AGeTiK&jQC65sWl_HC%)V6ll3_0aSiE9v zwvrWog||FhN}gTORwKdn^-IxWGo>?^+qYcwc;n?$gA#?uB~KHT?=rBIhH=w^u+rnk>Y{Us}RD-Em!5kzsW`jum*>d zjMDiccoO{{)w#?{7%Sfp2O^)lWU#es=W`+(MGz10Je*eBKm#ZX%IT zLTGoYE|ALW$%CXsPK)JU<}*VIfEVR@D9Cv)kntWwM5q% z_ftmiGe0&8#$&*g_;50V`OVoj!t5ZSCno+!X?UM zT+v7DJjNoSFW#R_>v>cgXa1e~+i~p3(edF#(umNRQ2?#wWXV+ zSBXQjQZJGQv~#@rEFhw?;_1v6ZeB`pa`bj3K5^B*3-xd~3_1gf6;i8_@Er=6FbFLY zCI-j_7S7TxHQbw$dvIL9YJ_5ktqJTdZz-%V?JW<2YTu!q|J7#!C6H({f2cK$pmI#~ zDWhpNvE^&Z%6ds}Ae6%Q8cnCNVcie3BozyhE8Z8!X-ooG7?x@YOjpC-rees$rt@Fv zeN9xbR@y@wDi}qj_9bnoS5KT|V4KD3pu|^5-2DvSaX8k}+0H0R6p{t6wf3a7uPE)N z`f8yCSEwE}3s6-(DzGJ=8}=N^)hI{D?;U^C==0Fq@dw9J zq~av$WY(Vn@Dz=Of+>(sIslzB)Lodlgh|EXpag-^T^c}IW8tgl{-QUkMBf&rSwPD{ zUvE#3XO(AQTX+Ai3p39AzExKvrW|kWU6zQ&;~8ie(&WaChJsl#BWL}|R1nG!02I-9 z+8foAfoxO)3?z^44-%6f&FZAiC8*tI1Pj6z$rVz|C(+KRWdcw!C!4y$@=`x9 zQ44?}bUX82A`suD=STJYI7xkT`LQM6bmrrU#k__bd*e&bM@FAN32p$0t&fDG@pv>9 zjf8`MYRJ48u7wJwip?nzX^nj31`)%#bc|)C8M(#qog2beXNNgtdP^>V%WHB*Pcm{ zb7^TOaw>R3jjFUjS)|tnBD?bw!=w7R_F8K_UbVL614zLf8l_P|HIhpa?g)5aV1bH) zB?RGW(;?AWsJwDh(>JZKE_VxBRG-X8_DCCnBhBxQmiegp7H9sv;Ops&augD@01!dw z9pL#%g9wSU)RE*+2YHr;MJE%D7^tLB#6+o-8Pa6`zr-=^=(xH4{q4*`SAVtEVH^`zo1}eVBYms($uJp1nMBecr65Ggrh?gYFa>Q2_7pBYYLIm2LL6nn#0~@}xDh^=fd#-e>jvDv{44(nsh zAFin5YGE@mP_mJW1wjwO)&`SDu!9}nIEt!9Y8oN8Yo3)>K5E$0$687 zj+~ZErNOfhIk+*O90V17h{VyrA?X=al2=uBP$26*(lfJBWI87qu^#nBrQQQ+NQ`VD zrgI(IRObwCm$Kx?&OPm4=~!9VBcdCF+pKL(tvlAuZF&3!cI@oi-QVNs>GO1N+TPRe z8Q9bB+1TH`si(JRw{dBmXUERXobu7e9o_xg`{b_fz5&nX?%h3}{+=x!f5;c{dHN=X zpM5-^6RNE-{utD+@(ct((E1}wMxCWE{yFeVbzHhHpBvH-dxvwRl-Io&+LGx(owVl@ zd2fp3){qR2o0o=j8P515HJr=?GUX=8_nk?O>)yPc1;k3hs0$Iy45Z-(`xnY22?Q|| zpU3|27VqR;?e%@9eaz8nz*N+VOKQbonWM{<;@>(kNYdFAms`aKkp9|FENz^0fw@ba zzLJVo+g4-GGuNvNiz`Euc%~6%UbaqohMc8B;s;cQ9GQkcvHZ?~!Tlr8KJH=5Jmwin zD$=st7%W)1k@amYyYe|AhGaK=m8Y#`Q;y7^P&Va8JY?Pm!aOlF`0QhOJ)KGcc=W*( z8B3<3kVqw=;7P_JF$p_h2-g@1F*ACHogFKk!5g^p`@cFdc`iG<)9cG)*Ra6Nz2&_4 ztMW?*wvWFw`DRpGNZ8i3PXhd}a0wg!H%rnZ4fT-u4_9Cj9%AKlJD@1i#H1V>i{>}Qt_*nV?9qXXy^36Ne ztiR7HZpLvc@+1l)M(cy#q@um^j^_>!roEZD?|C!B()s*!zBG1@YzAF7YACGcm@KS6 zy$-?RvWc&(Lt_)~s1yA_F&ZM6f_;a2lb*30Evw5&8d{y4Na^|gdc&$o=ge1kx*f*x zp2VI%3Cd67O)`nFw+crk4>D?YFcl55EffGO>DQs}s!^Xbxzb?aw1mmjv^}&U@meI_ zp(Iw@gmP6Xi90HXi;_4n+qEz6)xkQ`iLaj+(LMg?IuG`r&>Bg?IWxNR8^|ulksI)l z9n=Q_RvwUHz27@ALO{ikp7Ao+*%OU<@8bJp;ub3o3?cxesp1$tB?4+3W~sR~<_e8X z_vtH;*slyF6^*YXwr<0yW7&rJqsTXy%X_-h2L|ocF!xoVjrjIIKE4e(rb> zvEvb6gdn*vly{0fj+r@{hT}BIE;it&{;D^QstgmIjr#!Dtht9(VKIR0TTicHIWyY=F_W?M=AO9r+bIP8su5-U%`z-6T~lK1|9Bu&^e>+dJoMdN5}UZAGqIf zSMIfj2paadr?;C;yhRxArJ&<=wrJTj*2`EV5J-WO2bj+0gV;2*Z7;S=AG=}9 zZTyuA!I%x~Ur1k}+yhl#i%YFMwP4<47q9x8b4g(2%fy(lIX-Z z-7}S6!C#(W2m-Xo?{<72ie%XS*kJM+B&|>SiL~>@iMt}BdNh(Ix}?VBr{X4($}GmF zQ7tCUsk;WhHtF~ycxZ#CSICS~tpciAp0|%tW7OBnbe7wn$41Y@J@Sbs1HsL=IcFNK z*h$OFF>!-o7fTHMT+Q3*V3f%v0~;~c5^}-on2F=CCi_xEwPE+EEw^6`#%S6sf-21N z55InF$@eC2)*4u_mzTvh_R8hXVb<*2Zq%$2Jp zoo}}hv+cclIF%8@HuV{cgd&*~%Zc!ovh~t2_Ssp*(0h>0s7*UDW&eMX;|}5fe{0)U z+g7$7bAQ8qTgz!!_FmiHZ({WN8>1^Psz?hVPsp+Idei$xkwSzbLqSbyUS1p%6 zIzUWG%WJK|%*McWzEKbg$$Z8;JV@e^OwKzd0VwL=Cv?-0B*UCZPcx$sl{ro9(hVmi z`a^}KRobOx=ndOQ65G9Fqw^P5K@y?AQZqwavup6ESJv=D{PttyLpP^d$A?qY2o_RR zBaBI+h@xiXmx=^guH+D4hGCDg)`;5c+)*t@z~a!Y6z77(N~3EuzIZS>rh5a%-b+Qk zO3RpX=rQy$U&O2rCC6s`nX!xQfbF!t(eDY|f2j20a@m z#@gO%73I98r2qnh#Fh3+}XKA6+YV8!35i7}}j5;v&ofo3$~BjQ;_-pzWdR-V+6 zDXNyZYMHcZnSudnBF}z(d>obCLm@{z>({TZtg159;XLEAcncCN>H124ElG$$S^ciL$HpAZ3P=u-w|m7rZlN|IDjjoQkwfu z3MyoY)LOMQ+G_4K8#3tIlpM_G>VIf$#N|tyKVPMbrsX~vix z#fntSGpZ}u)JDJpOPNt*S3n|i4jXW+5S%JGqKAZ6NlW+4sBPTonMHmm?ulOKke>T%}VGBM)Wn#81%KjKL< z)i~E#TdJcx2Rhd+FzT`sBi{YSGtlRmt{8k~D`v8hAQoU_-KvLWqVc4lPijnz_g0TO zf4DE1&Q(r~OV1_WM(s&pgfAchhHq6@nOHL53n$HHQwo^)E;~;O0>xOF&Whj_zjogHQ4is_>bT4Cw|ic;wU@|3HpJJwSky!;S<%Ha z9AQtvZeDHW%k0$WoD@t-4WS;e5h_qARN#MCD4Bu~Dkh#x!mcfY9^=wECk3Q(7E-BT z>ba`&|L;mA3!F%$!x%#1hf1kDCk4QwHp!K^3#IG}LT!Ev`ga`h97WHPdEmpp!P23Q zu#>-g>AqANr5>7bSgG+g27^9-7)BsHqNC;eV27|VbkH%B)li)EFlH+#i_y`Yp;I@1 zdot)QBu)y1#n?Do=WeBqsNL#(87)*Ls~0)%eXIzK#W+57_^Q)*K;x2R1ZMBJ9)*~J zj3`iQBx5*JWIu{!IFRv&BhhTqAHZjh0W=fS!Mm`hCtE?r&I&3nXO)(TtqPt#tc%9( zUzrwrTkbn~GmWp-ZbKcis+iW`Vso7M;+v8~NxaSXB)uQ7zQ9$dNiq?YR3q@}gvpKq zJ8l+hOfnRS1T&0K_H$y0Q>|>&;6YM3tT?%kD%>tBPIdVO8{NSd+j)dMSb3uO^W#Se zus-75jJ@2mGw;ESIg;*fu}anFF^us!%Xg^7BZiGVheck#!?;BO#WdoN=zfUlVM;JM zqq1q;g_z4uD&UL#!dL-(Dc6$)_yRqHrKPVw(D5*yV=ziI9NyZbir*(J3fZ77r=^a$N2_bf1c^y(pQh38E8 zocI3OoxqmV(Q$0={SJ^*aj3k=Bb0)U1N{QVpRf;OoDL5`kaSXd3@S9S`NXp%8Gscg zLfR=N1W5E#B!I};zXTRq2-27ZXaZ&d^Cgt_3&Vfnq<~~<<$JJuiO{aGBk2Pveu?%lIC@r?(Z_r5KTyGI?@Z|L*j z{RjnODfaz=Y}y}S7nc?ra|nb-ic}l6Okg~gxk+F#j6>k)LBnEY+SFwKe~II5j*cY! z{ui}Pw0@zr-~Arq>kkk!A9nqv>xSm{HScKp*QRviKQ|s}_)WuD{ZH%n6U>yaYj;jV zviG*~)bfAgHyDW>OrbS)VpgSDVJ)y8Sa)LcFcOQWAyi7^;7zky;pM{T1%3zTKq?EH zhL1gQ86#ng{?D#`|6i^YvtzQSb7)wT3ie%~f+Ctd8X~h;{ zUUhdoY?fgz?By~F9i{E%si}G+R1k+-c}rVvRLjaf|5X=H59uS=f`-%kC-Ql3b^?0D zq!>MXR+~dqnLbE6lO+otCNq-=r7Y4NrER=+jWKHT+WuKf-F$J3myShEBagLtx7My% zo94ybB+f8pGN~>E;v;4JO=q%c?C!~6lI4yWD-chiR#I4rMyjQV z`k+4IKS?PQ0h9s>B)nyCzJ>jIC>os|PNrT`u5G${&sj;~w-}nLrAU&9%@^{crolp{ z>pm)BMtky2G6Z$Q?VXR#i^wqNS8eg<=J1ZtHHgn42 zt{9+YzcSkv$7I9moay|H#7cD-(a>2t|wloXdKtj=K+ zP(4g|RRH*u&o9elHU;3ZT+{PL7gBVel@wNDx9au|LT{CU)Qu_IhxIHdtW8X6q>y8$ z10_;fih0vcvXrPTgiU?>7U*<~r;SNGW|&xJ>pNMx?ySnN=I^Y2QKJmg05Drd;r!CI z3rwF@CwsZ)TG)cBOJPO8T^NQ?%^#EHffHcE5MqVR6MU>f-)Vdj2lpS0n!Rn_xK5Tf zoYmX=7MSA7H5@fqzvkY)u5?Z9LhO3X_L5u+rbQN*eb7`YxnrNm5)&@-}iy zrO}xLT8hSy4W(>UdDYd#%QP-vAlcBHYVeD9o&M-#2S%gCrFdCbXNA#7AuXCM8xphI zTH*IY$E?C0ag<2WnhFU$aSXpFI8IWAf)$6AIRjKYlnevr^Nt><_B{~TWb8hb;g6JZ zmzQE9)*Jw&Y|Bz&d2Ph9j3&po-s-&j+kf>dhjDa#lK*~mXGC%aV*Sul;S}56Pz*P1 zoResrZBZl}2dQ#qjb;CV-1v|=z1;a1pM69q7FU#_$g1cnZK}`;R-p><`}uFx>sAUx1TU$Bg3`!3*Ie^vu~bMi1FP`1Jt1t*A(tYB7<5(zkDFmC-1C*Il^rfbGJ{%i%*}VI?wUHutZ> z`BO`tl0b7+WJP&PVohaevE-Ho2=oi6&@-SXJ)6b+ujd^l>guV&5(H7l&QZK*SkmyZ zW_%Ef!W#?bl6V?2?1fTnf58*_ao%L&NiW7CVWVW_PeI)3O=GZ0MaeP=R&kTe%r@yKsGr#KJPdsnJwAI0B>RyW)`8R(UP!1B2Y>v zsthPa&5Be&F3?7xg$;C%GI}V6MZw?J*n6>atzb2l?q=P5wZ7jf_-2Mz4n*K;OO`syXBuPgrITVH8GvoJ@)YTSWsJfAXha;majKyBfr;MkUJr{{qK*934B_-`Muew#!=YaevIcxMf27q1Nkq(sfbutxcb9TGsgS z#)}({)PJcyP&ed!-nou1{J;P6>QhIVST0d9cxup;aUUXzEdAveyfVLfjEE`FfrK?4 zPc6b2td5R%JHC&F8jTT?pg-v&;VY;|p_$dw**G3W0N`rD4Phv>g1VRr7?VoBLQ!x$7~0y zdZH1L0M>+j#|Da30hRAVHqR-cqqe~nS0Ne8vdwN{2M;@sU)!)00p;j;!trIOTG-L~ zqii#iz_6kF4`T;s4$FYuLGKQLHK{hE8V@$oOk$CQaMbj&DUM*ws2fimD%YP4qSdhH zRn}kl7B8Ss=kfI=qTJMRLt>y62oD&Z&QUC+p)`5!LEdFUQDBv*C&G^ooYjXy1s^c5 zyts~eKN%HL+zi^4KSCrNQBW|GGf$uKC9nmX7)%ufemOOL>8X3{-$MFfh1ylF>5%yr z7yjx^yoDTR-{Sv>gk7hE*LvBUQd1r&sxMgQ#j=E~!8uZ2PYmTG1o+s0{CKg$I1*3$ zob!n%V+;~@_+&!$Wz#W0!-N@;Is#JqFbN4r)M~T57|&K4V0;rS5DF*k+;sg*Cq#&cDxj9N~A-Sb9>}bg5kPgF%TqB!rrHIPzFMIT| zh+U_~5K#dgq-|MUDq@mQCCXDb4>F+oJ9h5exg9s>=-`-V2he+V<%4>|tDVPw{I*-E zQaLuehz=xvBZGGdd}KNf^}G)?(I1V2oz&ws$A3&nMbLUE38$GF|JStMdP+#Gm209} zMu$b)DT^4`1zbP@#IwnXaeZQN$kRKR9E38r;U%k>jW1r)QeRkgN?5BekydK1m~`#B zlB$AP#ARK_KIgH$J^#*Y%Q10>#}M$Py1N~iBmvE$Kly#36mh8}vdH4N$z~$hwURmk zpja>gi2_j1LNlMr#!~FjBB`{GjP_{>XDhqAjL1p)Q~Rk=Dq^+30xOZWBB>yMEo~*( z^H6m2V1C@QBS~~8aI(Y~-|)9Ww&^_9{oV&0&ih_-Y0d$X`_1?b#&a1kGfBdrycxa% z{MPsizKbZ%`hXrthLAoO#GERT1z$er2c^j|cj4+&LQ&mOqla7F7qpEMi6rF&v|A;3 z88-AE-I*fmOe{|5vuq240emkpn9s>tjU5C}SJaCFfKHIX28W|2zuAqg#7(L`5QkRU= zI0D%6f~92Iz!eu4P;E3$*rY84SUndz6C;rsgG3<8>3gGFWD~IC*~k`LKsL6Kcz1k} zAo-|$DD%mA&VNkJxZg5XaQ)UQG%chcqS}A=B$KFM!?xLcU zFm{b-Gg$o_lc^&f4*C#)P(zygcYBkQSV&T04kw5&6pEq&gjw7J>}W%zbIGJ^HFira zvGHLbs1|hI^O5GlWT(4u`KdvqyZS7;n6I3o+;bOjmE?%W?GuWW z!DxuJDjfq)AM)#j$YY%w_R69T-d} z_vaFiyz@ns`@yX3NB{1L$uLVRlWCazPieyXQ+g;36@d@OzdxH{wmGBVte{4cB@z6} zQ)v-ga3Xf|TBSB7D}K;do-jz6!*954~>PhDnUGfv7MLVChMM z2l7G0gOvh@ObC7l-vS~-=OWr8b#25{AhLn~A9i%y*8aYB5Bz^Gv~G2O*uAFZWJ|Ml z)b;PK+nfKXd1KR?o7|1*hOadAz)62$-JtX1&hs3@#w(u15#|UV^eh+wrH+?BGTav1g{B`fx&%SsYzs{)QH-RV-KU7ZF(x8%qisCzEo zq7yNE!^HUDn#&)q5V$v%_ND!iR7@u*8j=LGOvn?+7!+n7?E`3SH!LdT1dHM`R#gQw z+2by(D@mN~l?p@k%IY-MH%P7#YIT@e?PH-ja#hwU=7GfCZ>f46zLU_mWH<=bKqM(f z3f9%69#6%i;h%*1S25BgHaq!F?`l>GG<`{iU(gob_E>eIkvZ;B(gwT%W)y`!liIUwUwNv4zQ&3i$+6e@18YG73(3odu*3*p{ zVLa*Cb>PU@U>ef1N&ypBzpNC@wNx5hr)2s}NmeXk0wee~838&uJs~U~J^{$9E-%hCRJ{vQnrOmusI)p@pN66IbpB(8wlUlycZMnCk>z z>z^l00Q-lM#z3!%G%HK17=Jb3?uB@D5BEp5>H1KmDA8W`Qvn)D!rL(+WW`#J&npJ? z5z|5-O$trjE7>5!P{pzjCR-{q2L1`$V9-y%K#4vB^ihb?)Iy8pVPsylwU$;=Z8iKP zcGVW$m=tn=B)-Z@X}#CDp9;}#$tZ9ZHUkmJYX!>6ZlByw>5vZP(7cKZ#mZRK*=B4m zU4}e02zEuDvLQrG*w_ui{S5CRU1XVf9a@GuMteIR_Q`C@{F#jcuKV692 z3Sq;6AP7-9itOfK6e1K_0pUsZK2H>abIb&06R)4>W{zrLj_N{`S3XDi16xtSa}(p0 z^&$-gSr*eI8Q_5BvfqjN2xX3?@MeT@?4r`n69#*^DU8`rGWI@^;> zo>;4fC@Em6xE{#_ipMm9iPM*bn?tNC!tRFCxU$=XLS)iaGm(OXODioZEo1E0kftDD zfqAQ&-)D-WCh$3NHqvRL0dg6WQxp3tkqHn8qSv7EBNqxZX5;zdpqhEpxzQu@WNIm0 zdR8?AV9cnYU}bx4m3}PqAW87x+Q8lwNrKJHM4_gNFwQaARkasW&^&2cOP3(cE1z_% z(2q)ar2jCku+YGIL}IfH8#r>{g+ioT1oRQ55eXoz&;UZD`JE?ETj^rtdF2{_FM2&} zG)GVXss_3U6xD-}N#P`8uTGNQ800(>DVk=|gvx_pizTVSOg*ld1#K7Bo^=vjvN%Sh9kL=(Ij+& zV#SAFSgvDw8Jky;t)+|3u3;_kiE6RIg)&2iBUxr9J>}0tnC`JAkc*ME5KY-4wt$RC zU}-GFMj~DrifyF}&#qx3n;>F3C~=+>qtyaIwZ-lyMCkz{1|ahRk&o3n8wk_=psuSD zs0`Sdof}q{E}&s+EN^ytfiJKv=h>J$QY{Qq0wFc*7;!dap^E_vhWR{(59C!Ok;A;cLeh0{+=)KC-<8A8HpFp!XL_;mKXc0O74 zV6hxxi@R>&br^#ovype`4#5@zWo2`54@h|Q_JBwqe}$} z1WUhlu~4<_+fw#?L6g)^jd$aFsM}{$v~jF|FcOD-HU!85?FVI_g#v!ca1hQ?CZTxD z#-$=OSV3i`rLxI%$rjj{m9A;6KUg}iJgm#LWuTHo6S}T)HWC>F)=<}R=iS=dKTAiD zW0|d5xQ>j7dfY-LtD|yUE_M^Ka4x0Q&~p4XrG>{1P7Dn-3^+&s;fwcA8pn%QwoYco z(%vwh^|=Mn>Am)`4+;o?n2Q^1lV03SDQ_T4pN9v4-ICFpTirrd z-OiZXP-Dyq!oZ@Sss0?eq5Gx*#RuHu*|c-VuI|3=JNrBvw`{4~WtF4;hq&F+X>@Bp z>E!9y_#CprCj^!bJH9_z%bW)$Q9%vx41)?(vB74dTX$o!)J8ScVAz<4{T5;UvA&&~ z98*@g65Y?J8os#kMTN#K+dzzY^qiKubg8x6(AArKn=%6a&BDHLrcz8qznZO8Deki? z#n+P*n)EZgiviZPyi3bjmEw6{ouhPLv=4(d%~iNn_WiM^WDY^#?V7u?t-(_ zQ2X759%p{Rv+4 z;4mw)nTx=A<8L?rl%_5;m7G%L_HS#`-F$KBZbRdG#;zE7SKEr0FJNJVVNmSPFg3CI zq%$f?%ItLPJ{(A*oCc06r-2}7<}EY6*rwd@XcC6T5zpng|I!E7IA^RQpvU$} z1czSvZf}m>>eVxfIn{g5;K-37iC<5fa!fvk9XUzB9<@M+M>UURyud-xRZ_%)22x1@eW_mQFzHY`re=Jp;$SVm$F3SwW?o&<OY2?1bZ0gw_u8e|eU8Dqf!t{=RXS%Ge2E`{!p{X{Sp^AaJAo*0Conjm%z z8Kya21um?17rJKdM{=d6*zirv3tW)lW3^UnK|grcbH71&IXeEx@kh5mgQ+hSOhF!% z61qNYOKiZPa={Rx#+1W7W~-enfnk@HLZ=1Lf25PUUQQ5 zg>J#w17WSMygnPQc8;DN_#SeqW2fWE#5nP3C@+~Hu^*Wjb{>)!kVORt3iB)OALJky zJqff2R`PT_4P|=>V>PzIbQa($kykc;Hq;vn>4f;%41b`q|1N7OY?!&1_fV80)m^ke z&W)-u6WEr_55Y~oIeE`uW-K@2{I2y)8lFsJPNc~tx{{E}WF`bG4@(TLD<4@!03rdB zkJ3MQQOs+SA4X`jqbdB<{&Xrt*GN}Qb@CPl{7iYIL0c$1W4yJokeE4I?k&|Tbp=l) z4WSqmE%V%M&pAiOwzB2jG=mH6uuI)#IymoB2C` znh=$9F5Y)dgY_NCPRp0s-)hHmJE=Pq}ngTgSu1 z2>iPJjjcDeud91o^U3B!)7P3-*Yz}hp&`(CtTE8=)rMmIx9VS4-|hIiW2Wh7+f>_% z)^D_)ZtZOqBf~5F*;+_l>~I9-?oKips-I5tx5E+M*fX$cn`cvU1dib3gyOQ!=C|}? za?8RQ$gH0n+9Z6j!+O5Ea63<0E8n$wl7A~CzWcFXZ_)F4n1uC_?YqmQ*vWkP88;Sg zTS3rL4IUj#db)>TsP}Bn4G)eC z-aWx;wLc-0Rr1+-)=wV3x3JN8rKs(bHs;30bPvSnZ2u>Q^^}~h-#;;!$|d#><5f1F z(qCQww-utsdv@DCxR>+~kV?%ynP(bBtcOO2PZE0OfS#`X_@<+d%?osqn|s)*Zrju6 z>FwFsx7DMM?6|pF#On*ah#0TY6k!O$1Oe{pO-|rP8uw%-Qn|sgT77nB;RYUdi3|Xn zCJFB*P7QQnE=^cVGCdA3**IUH&DVb7cAmJ5p=0+%|1NCRo__k7^ffxoP=dI_a+|0g zT-En(ENte9Yoy-nWZX=$%0sz4bbs4N((5-4!Zv1YW&1JFSJ=igSJ!x^e`}t0#rL%t z|F@n}k5tFnExWIw!DKuF|Im4D70h-M%CTgeY62oqe=E!pu_j{yPd=j2g8a zHss5ImD$4{E-ioXJCV$(9(O7J4MB z0@;~qq8kgHJiBIx>dudk(DvqRKd%mIRjQuP6t3f`I~)$bT{rb_W{;o`c?Q^w55msW zH<-==v`8P+helEp`Td@eVNz0#4JSdUlRRSfJ*s*`f8iR6q37C;SbsPDhe(i(I(WWu z62o##s!NIC1s*z4i1W~H`Byc>E?gSkl^exkJ&xF$SicZY&c-~wy_-gJ(qGfLEEoA> zta9XS)ARQ{`*?3|B2Q`zyQOJQVJ+p-%GXtwOVe-GJ$omJCGN)|o*Z94mK;4YlE~=Z zd*q@~MH_qUp1Z4X1~c6Rw0+<}GM{9MgMAm3NOdKYT^qSj zVy<^M2m!TKnZp}%BL|YhG@ZS|ohI7sTWSnB9JdyNMkCqGU~~_jgr<(poY#j?y+t>Y z-|JKAdSWO!nuCY1W~bj~E?FABaq#fq z-68+Tk-4rU67Noq97*1!r-Y)>uK8{+oXb{2qTdA_a+M4idW$$IpLY~H@B_ZNJW!BS`6g_N_ZZ|hz$5{~S@C&B;gnU~kI zJgrYo)EWW13SJ&sbDbl;mUuTR=z8{e?1L(`P5X7}_QE6VnEVl*&H5M` z*jR5eb3`sC%766TylJ5xFI)3L$B!Ky|J?D>j?*0z9XmVLbu_nsr~R4snf8P2TiY*e z`*GXzZGYA_*|xXM-`3Xp!`A0oA8x(B^_JFf>pAY1-Jf?q>HcH)uzS0ErMtf6TP^Qv z`Qw(mS~j|!ZLCa~^Ypb+6*FV7~_!`%K*JhWe`FG7PG=HFZsyW%bq4~n5 z|7iMr)4Q9BP06Nfnl5VmW#g9`pKN?>k%s+gx{^^JmU~biUL1fb(W&$l1;-&HwS7@M;d1zpl>Z z)L47QblFsRydG8z)`-?rYwA@iPOOt#>g!!~Hn-G&YDfJGpLTp>`H8jWU3L$0ykimn z7OgmO#X^sIe3C>)jxVk_v1Wn0oW+Ov=XhcDiObbpqztqX%X#OX#4n$VZ~cpN?@f44 ztd=`#ydx%@hnqboRxNPLmR(zREm?PBrQFhNUtZ#&wJK<-{JVeMiOUwc{lN{Rf@VpW zzx%sRtS|+ztK{gz(T5$M>^iZ0fqRyJaye8xT_?KEc+avE9`hc}rsi&Y?zZQ;PApsC zDQ)Mso$vV4iW8U0JvF)o;qm;Fw!Fl=%jvA{U-h@%$-i^!yeBS}yQo{cw=d^$F8_9v zmY-N!eyYtIIKJ`%|Hf9FxM%?Z$rH>!#}}5JxKQq*bJ$hJCB2vQE<16-0(UGKT{61t z#F7Q>SaJD^%a@%ve}Oxk2b~9(oj7lSI~>1t{C3%ibI*9k;sx%|exm(k*@<%&xZ{$S zE_tczM5lR&T~l0`xiI7SaMy`N3*58hn@hgwD0Q9aSm2(v@3ehK?rC4(9__W-YvrD{ z1@77Y;PwX{|JZe+b%A@Xed^k$9RIlNgj?O?a@lpnt4?2B*L9+0fu{@|8#?AFEjvN{ zNX_0-_jKLU%TKuE4u*x@v;;X8{|+uc(Y(-2&+dYkYEjpTrUm2)JRf-8@tGAT8qEjU zwHAy`^6wv(pJ-U1IOiu`<{z(Lzd&*4eB_*uI6mEVqHckET0YS70lCMyz&);JSF_xM znL|~ho!E=o7qvS+y>9vexu@2AYoYK`sM}SytG{dd$O4b4dvo2J9iQr&KD^L9 zFW0^7_-oJfp#_Rsy=e8K^Ssmd$St)d*nf!k;`RJ&!u;)cu4{T?fnxC<&p7_BYkGWv zdwSRPu5&!Qe0ogosWlo3FX4tg=$X!&53;K&S$r3HrtebXI`=5i$qDm!&@+8tfl?0+@!zuP{pKxp z%i^K~iw<;6XBUvmb=q~>@pRX;zQ8?w5B5Fi`0GoiGjb2WPrHfv;yTZC+I)sx?@+>C zGM!rB5%<+yGM!xD^NZ`2P2Xu2VfV6)J&iq{={pt>qCs!ayOvMCN^Ysu)s;??@=V{p zz;oQY-MiO&rf*x|mfN4X{h7py>08aB?79RDhVt)&%cgHJA7uAd+MU{+%cpNPpJP|G zu&(frakbBUj9p>%AFBV5<9*AgZ#v_HQmd!;%1zC6_DbG+zO6cG+j|{PdZzc7McTD>#Js8&#Fdtia*O!y{z@wL?$9p}~JIsRZ z>M!zSD~oo%io#5)A63=(>E+2o6$Wk_Do;DKv}Z*+`VFYyZIbD@lkagUw_8& zZqM|#1s)W7I`njE`SjL>1bX62j>mt}bjkDzhB^^!H6yHomK|v0=LY@w$Jl+vNNx zU--Z4r;wkygS6U<1+rF_Y!+W%s4wi9gNg}uLl76fAoiVvITW2EFI@k~q;Xum=$g@M z`}N@zj*_ue#2Uhqb+u&7_Fyg`JIlxz#y^O&@}4x;K%{0SR*j^_Mz6l+%F$~jzJ;i% zEYK061&kA+AcN3@04Ab0pr|D^7ePdlD2FtT&@@HUA(*x8K{6t$qR4>!l8^!;%XaQn zSN;YxT0^03MlvxOS*xm&LQ6aH{8#^&%9kT?{$c2u>FPD5AS>>3RxLOgGEq#+-JtQtI36e{B+R8&cDcTtk4z+0DwX%PS(IbW)ANQO*;Y#kS-JfN+l zOI0zSiqD{~<><^U0y(wsL$}(zTnHar@-Tn^=bq14-z~JxdB;qc=xG=L;XZ>V-aMhH z0@CDa4tpTm97)PpaEU_s*xN#yy%(QdkW^3VzO$k-6 ztDL>A0GV2XaOFq+P?5la6=YT*pAVEISt!~d3J#~q_zrC_(U$NB6T|~Kr3@~iT_9A; zDxtg3Ftd;P>5}=a8l5?|z#uAV*Snv8%Qp>-0VaL1xM!s=^4R zPyq-n?!uB8N!Fx7DJsXh#4%afMrM1VfBRT6@}zTQ@^7aoTaFXSei!VV1pZ~oz5+RC zDyr)-0_ng2!?PeigwohS1_d3hh@YvS*=$>ig`%ycFgPPgnk<=@t#M$-w908n)se4z zKVHqTaeO-Y{KV)uuH85zd}!r)NGiv2Ue$z|@Nmz|VYn%TX&f>pNb%K)KLaijc4y-R zRu@R*KbS9Vb~h-7Ur0kq|=;fvmMAUVEz%(G|I($DxNKPC^9~s4eksBE!hGgWn_dDsaa=i4?OX;MdcfgyOL=W+qC;m_X+BxHd+;>6Z z;LQ{IWSopOM1PT~Jq@Kokoi2CC03rL7brG?S9nircT&ZmLyD;oNM2d7B4k0=W^R<} zN~ZJbzFyUG&q*r#-bN|po=aiN5=<8l8>o%H5@l)DRV|XG$YBojJ2ZTU1dVB zS+jipUa}_4Sf8D7e8BPD2hX?`piWql#CNsaHzOIlYOoQAHepdnK}f@)dOfIN@PJ1= zeYw_s&fz~i|ECV)xZ;8fVLk!S9tn~f1T8KdQ1E=H4hV%g}WrQ;!_gdv6;XccQ($$`fEhd{BbSm=8g+Yl=v1p75`i|aQLSm%n8t_ypN))#@G@$&myS z#$|<|&W%*ck_b=AB;aVj{TW6qs&q7#h1EYDO!~8a!gAn=&m>`rhVvh`UMP@B0VwN@ zFC<)l(3nULyA;tFdc=+qmXRx|K-8{6&C#$^2}iMFp+S)__W$2^bQIcu*nVr_nNP68fyGlb1;2KT9UJ*_ zlI-wE7eYFdnj>*G+du$%Xw_@fvQg(IpsNRgZB#v(>}&-#*Z2J3cwXOpn{)V6%io2R za%3m+{ytAAlZLp+&pHZU5qTMtuxyaoE<~0U0(V%)f{nb^FjR8fgIBHEjPGp~+H zK;{OWybV@9v(6T_Oq`Ivq2_;NN z`%gsaOmZ9y^m#D55NnqrrG_6q+8AuKB%)PYFmf0OCAGbTRFK;B65zKoLX9M50e=ZPniad`2v(Re5tB7bNM#v4h7MpBYci2Oogu!zO7P^~7j7zk`@ zQ5GqTa99Y%#zST(x|y@%>mPl5ay9(uH_S-tI=}raY|ZIi9+JM;^%KLR!X-3tfOvvK zV1`HPKR;uY-0@+@LtIJ)bzex*J(CfToC3aNAWa$pc7!oW@C&=WpRCGcuE=6sAz^Wx zv>`F_7bi)XDTyL7H4F~C58F%L2YOIUGloS@sd?wM6jse_;B{&QCtIoLXJ04UyZS(G znD`6e&j6pHf2#k2bNI1q;9pnAvi+#xNxA@LstBA-m=}Uk*i3y`5n=g-aht3$HN=(0 zK`r$nt7$XX$#(3bnQM@Au~dBJ6r{H17P^jENh2F4#*||B;FbT0aB{r(GI}f-$o-@o z&aw$&0zwIeCO-m8KP>emcZz1IF3EltOflW)7?6k(^)jQ!yad)qh%SzjO3CCho3+fw zX0Ap$!-`#DnN_RF8k;^GR_d{*AJlN#GxCWi0}cOf$Y>lFCA?~cIT*C+$Mw5FIt+_q zHbROJSZpyR!x|rrgnT+d!>H3(64GdW*gsWrOCLM{+y*M%t`D%v28>kMkP%Q)Y&oHR8(f~vWRD_Lu$Whh$q?jUV(TL*D4te zgMNGQt~$-OClw`Ik)I7xnjG{J7>?;RlEnZ=+Z_LlpMM)pmN8KtGdgKTZbmueW z<@ZY&>T(Puv`^xriu(wYX1rplB_x`82;&R1z(m~(1#~oo)(cZAsaOshi;_x41uYRO zkL2JpRGy0cuY~j}m1n*{7QT$wxz6G44LcD?t`=^dOwsgwQ7m zn~xzw4ULBvh3lND8-0U+2D!7EbIyZ&^ZuC-5-QR#bIP&UVU9`O$9WR^;@$XxdVsb= zM!jVa-rIiIW--1EUvvJ?kyVbf%nIGls4CsE3;tV(*+^m&j0^oNG)kC)u@Pn?@RrJ^ zfN)OY(7eEr39axFF(?KbituJB!kecEugbRSy(c%6=H9frhnvR<0^qj&L&>o*?|~zk zJQh%4j==^RhF;M872qU2EY1Z(DK*$!n7Hno36_=P$`wJHOX!NqWC!AqkRB84B^b7+ ze{WCs9@2pfM_wkCl{#iJ!*`1H2Z~SA<@VW+MD$54oZ5_}=c~a&rV@S68H820^hIwN z9QQ<)j5>!eXvy(>Ii7pY`ftHVqr)!{NWl{lO`?)uNEco{w(yZS-4ZIrdy*2F z%mGFnSuLg0PgzB~Cb8A%cP!jWG&CSsv*VFF^7>H^vDYdBSy2n^cc`sgLyPSHSJl7l zXmxbFtK+tgi`qZaUTojc_A~dvwm)yXzV-L5?`qxE@s#jbggTCskyJYq3Nln9Ju|zuYbAm0jva9slNZ;hySjD|E_`m>uO-@af#0)40Wkp z3>R6JK(-7Kuzc6EAIgs;6DGrhT^#0?;}X!iy4I7rB?3&xxi_$PuV?l_c0rdLk4p$E z(UA5c4fOPP@7lJ#Z{de*J$5$_Sy|&D;eqY}&))9dodW}V`mMs)#OB>~yqPE6SR*pb zKhWLZizN_GsJ{P*;_smM(zo$AbcE@pviw)O$RBz9Y?*1G1Z13s!Y~8cHx3_!G zj=AUAHB0|-iG{tc*7LS@_xAK}@A35ZZ0Xsvx4*~Jv)j|Z^Ol~4n`z7O3wdbGPSc+| zs(Y@7#bum0x!Je1lWzO*B|M02o_)n_Ne-n^2L?SoaH+rsHv6m{o2qMW>v4(ttT`sO z45pF?JvZg0nf%G2M=J^89(aTstXs* zND>EB`rtZ@959A>w>|s#(6f&b+`sdv(A{`%NoEK0xlvMduJi1D_Hn|3g^k6tEqP$! zn%a8Yq*t()h;Fq7oRjD$bnMx;>$T}&Hy&R^J=J=*@a9}T2N~AHuxIOVYMV!~6Wp+M z_KDrLA;;T}cks-b17J&XtN zdwcJK&$|A&(|DGBKsC+*8S|bU64sg_6qrs?n}cQlaTgEksX?pY-@M1OW9Oc|+j@F? zdj>q+dp7MBX4Gvv_Y5$Y$R{I228qnXa88mK60$gEOeZj@R81$_k2@Bsg0i>-04wA`0o7c>I4EJKpP(WF3VJX^ZE39HG(n)|MkPdyngj?sHKyKthNVtT)CX-BN!dwUm0WwLCfYU>U)np=~ zA|MN^D2gk%sGxX95nb=gDk|$D>dGp*=(_rTpHo$n>P%07_p|%?|3B}$F%~)9)m2ZO zI_Eskc`m;np^4-7(5n5rxffUSw^Gfw6 z;)-@aC3=Ah>6RSR;&I>2lKnl$6KVyZO2=Hv8l7YMX~q6axl&}D^(tX1xAtcqB9Li9 zR5<0TqdnK{Z|8dG;kqyviAxu(7)31Ewo{Q0c69=uu{*aFw3zXy(Axc5xGc)3?psJO zuzT7iBXpp&Dg#;+g$zduF z$77Fq<4gBn%eBy)^{<5mm}f==A!xdR)kbMfc`xc3Df0 zd$mjUU(VG4!>Hd+eW>4#E~PNXn_ElwujUGjh%@Ti+6x5vqz9mq(iTSS@gMDq{j0dt zf^j-1v8r4SZrBQvgBYP`%LTcf-u5jWqBEV(SZ4~z{(q9|7FTPi^&lT?HTz}>#{|$d`8a{t~FO&mRc+~mf zh>U`g*zw1+mblF0YOs@ul;DXW)djfnLLBVWDDbLeER%dvgq=AW+Ic7ZrGLKz@$iALo6Eq;SYQwh(t0APzi$4l!K6$>z-H9{zhWU~(`? z;%*M-30Noa??U!QE+#QKqc8*=upZ;6P7nakKy5!xh)sFqR3sN7 z5qxeE$yMP%z&{&@Lv&~zGC+Bv+8i0vn-q=i=xPu4uykTr1W~KKJ)V8eCkme0@NxlW zYZ6nEgr5jR5FI2YK@CHWQU(GjzQo;5t1o}F6XA$?5D+Z4pS0OxD9*I7y zh=b_{C4@J1_`Kt|C?mD*H$`ur5f^3Zq;I%8eq6i>;p8~sq!|-(LX8+r7Rag~MgzBs zP=Zk3Q6O_Qk}k)Ui;}h9>8dP-;7bOz13xZ=(_2h6BbdZydWaP_C4W)a^~OP_bs%8N zC{;411#(69riuV{WzZ?B>#*x^?xE$1etSh>OJ8?)Xz}`W>(|V~NgNJCpIaNr zGJ7Slws$ubJR9(}-}0Kf;~W3J1sUXc@|jd@qzSwe7J_{~0ecnX14Wqg(!lXT4;~Je z;9rExmW3o2BEAJbLONXt5o|7nNT$sQFK@C~bY|5_l6G)-1~Mvy``QeYQ5hW$aMfG! z`Q0Tpn~;31X80c!(e>{nLLww_kQCYD@L7>=42@0!>g8l93c($a%=vLr8ze+yC+W&_ zs1?J`jy`kvocjH!*1+1b7_%Q8YcSZ%9q&JK9{niC4cl`Mr6Vak&ID;-86scF*Za?XJr}1tNf98L zP0tVJpD$`$NUx0`?w^% z#fW4v+6e0dT@KJT4B+GBcZ82V57}H+7MCi+ljY{LVIdSuiPH6r8FuZpx=cM!Qo;7C zf{+pzqf#4!rJa56DXNUk-Qk;5;8n^oyE$l1n0LbpnJ3XWMgl^<5FB4ksfbL% z97dCnrI!h@GR})>f?t*>(4kAMnI($eZwyaCl=DRt^QoLGO1+K(`jU-h5X+ivQtQ3>M3e;2BEft}4=D{O5d1AiOW^94FhU9UilIc;Six9}gR3ws%z~5Z_lzSJ zEBal%x9I%tuI(Tt){)^B*HG)dDjZAbzV@k`h81Ptn}6!qx^5hdWsrt@>fH+3K+GHn zd7*7%Ua~4d5Sqx7d6m!S3K{rT?d~@denz|BJuF;->UrN>_lK8tmUBCH*B1h2K-L3j zN#OyFB!z-LLIngwy^^IwWvvn-noJ!t1{#Ma+r#lq2@y#jcQ`T@S$okXBo;+T=7S9s zCWl;{g4J-505J;KeD}wW#Rqy)|rWtfY@Y1ACmoTX@t za?N-y$%exok2OY5{yGZ>fNi;%1p72}P9aB3| z`&SL0g32)KO2({V`*ms%90r|C)ktzhS66X&aDE4VOW7*Af9GRKm1EKM<>aGOij^Qe zp>Oh(tC|feAWKP#v(z{7B=%j{Y>>f}&y)0!!uo(Yq(BiVXObeFqO80~eoUM~L^7Lp zksSg!?@k^9$B?Qlm4!pnxgoz``zVE-YHes!@&8G#`L5QS@9?+3o3_Z4qf)5}fU8$Z|ZmxfiIr#xr5Z+AVx7|Ijd7r!g6ZbyrA}76=O2>F|)Orj?UzNmFX5^Ohq@EV7A}=by z%u5LkBc{0Qf>kkbzrQ~|GRv06w7F}faU@iXO5@mhQr~S#b6~?W|LStjaeWihHH=~= zD=?LdlYm|%(Vt@8c$vbBa1rJf5>v>K3R5dbHXJ$Ol$2!Pyrlvs#lC?08?!DAktv;l zGllL?3Ik{jZSzTi{!>R}Kco1SYI|{XuV76&kz3&xkci24{5tpB*34|$XCA@hff17V zo{HrV6oVSK2gP#ma8Q##EjMOsVN7AIc|}Hr%5x=~CTeCspY>#E**;;OIb~!9({PrU zho+@u_o>L{*np0TmY4?x1G;-<7cQwym%07m7^b&okW!A>jY0K@*){j7|GL|7sE`%g z(XppgVvNd9*@*U*LVLC|SVqAPbZ(V z-D{58K6Wn-spedC&C@KDlxk4JUZTIKJVm3G$Z;*i^Zbu=P_-;ja|73A8k?ug%QOd` z%BGo#4R+p$Y*rjhUA8>(r2Pwy8eyY-6_fS6mr_$UrEi-vxt~swV|!;jUncdGQWT6D z#g!U`z7+y&h$yiV%LTH*J3DuWc9@&^vMLxeH}O4`FIwD?aLI%yTA;9kgm`ExEuu*6 zfN?Vkq5atr*{MvHH(O`6I832Yaic4VS$6d9c0JhW6xX%SwXYbF!Y)$TQ{>XZu}rZ^ ztVnGpS$k~nNwH?rQlgLvPzNcJE=O~a!^eO}h!r6Y!lN{H<%%jgEEX?Wxwrt8D12ht zHHuw`XE=LAHZKlelhx&Z83Il_e)Jh4YjV-AbEF0aZfU`Eari{v`zsPl{#u{A@~_LuSy!Fg)l@ZwIQpY zy^1+Dtn|^QJtNcXp=!EL?4coYZmb;{D&@{mW&upcz>6=OvCllZK6C5bBOvW>4>{g6 z69pDE*-(TbagO4RQWHfbtK%7L7?I6^nY$`CbUAw|SLf~#Rl#sYd!AGW9Lcp3xEoww zwM3BG1PHUN(`3Ff;;8$>B#V;=Zq@|5EHQ2zkxjrU8sm)&%cD{#suwc;P@rzV%Us`8 z*?MXzG$DQNfzST__dL8D4ZTUUH2#-NE?>s!0@O+>StwJ=hu49(l1_w*_|&^XTji(f z9b9NMd3KG6(LdF^wW9;ntqW+WV{h$XcLxEnmo6Th_!F_v`ToiN1F&xucwm>wz5Na-ZYRU>?wb| zX&?*IXcmmN9Na_HW?^+uEJD3=2JWQ1)!}d@0OBp0SUS8vIC8qIg<}_&QI%#{OENLl zh!5LqVMBA)J@Bb-yo+}(M=(M6Q{)k+fE`jax;aj&eiH9QV+0|8NTEsS$c5Ypxxd$G(dI0IvagFPpxrf%` z$dza~94|SuNS_@4p1HxF?z=}^Q5(Cuw+9!r_wH^E$Q5>X2dTP`{dC`Zi1l`tc7=8U z&kh6K9`&924^s)9j3t4UN_{uO+bljX=Mr^Ot`XTfI0)hFS1kRz@n}J;-Mt_lZN%&&mBCI z98W*V2M`RXI5}bhW$KJG?2L2ybcr4<0UUwnstC{z#9km>;9jJ3pBiZ#l9Y{t6hxmV z@r~9o*${+ahC+sdJB?~9<=b-Ka>5gjs8Xv{BeGL@E02_pEgbtu2mfNaf{uA4F+V7L z#GlLXfEF7B3|yfM4oa0H5wzof`y&OKcuOb0#Yaljd!#!b1B`m-1LpfV`j)`MphApl zL9mUAVr^1Yio-f5Wd=nG#sB*siP_^H5mxYsIq;n7PzGMfF@x=Km%I!>`ru;FyGUM{ z$voXYD|^?^$GoE{(^`DbD}qaPzDIV%l_68Aq^jE zA*fm4fToZwjG6?A^_?sdJ*8Z5AyJDRxY!3~>>mB>swQ@g{_36Ls<44i!eh` zBWwNy3>khR(xgS2aI%COhdqiJo>QjXiGiC&gkpRgl`S@lt+H*29LBwS;DmqvG_uI? zv=i(Ft;Sx$tW3r-nDz-wr)1e&)Xbu6mNrj+ZsY_8oHCBxDm-kjZL+@ZpK)}zKiVU) zP2@Y_u$0QVfrf1lbALHrlwE76q5%r%;)Dc6jkA%*kq>=knJVHGWl9u=MAKOHEcJ1` zCG7hdegro0DB`}M1O_h7i~yZvs7V8A3*01ZJg$@jH%bgG3L=tu5OeBS(Q4~SPn%XW zbzxzX-*%?j|DQ}^LF@jOzqItg0T?m{^&jhV19$pA?Vq46@r`(2YWhs$9~+Ymhdh7q zbh}=WEQFdr{nL+3p`RRdv35VH<vG2cPWeX+po#Iyv2DOSo+@LpguO37?k+%ol4(;K{pe%BG@hZd8;97oo0QTsL7 za@xw)ehZF(qyB_*q~L+Z$x6gFg;@L*22#KR0jI+ajh+QYO`NV7_MzsM(c1P>2YE!9 zrekCWx%96p=_)>0UTDQvCB&T36mTR<^3j&3G3+#Hu2ISm1GDqvW%k5i`o@SOlop22L)OEK>nmPExun#psI3c?Rahydz?{Zk9)= z8HSpA1PQx1#-VxyQe`@UuOP>&x3oRDdTV<}`_7%E;F@P1E;B=!jHMvE!EkWVrS7Q{ z+y{4``EH&-9nX55)Y#H?e1Ya~kXNo0I_A^vQkkMYt`m~$gi71wA=ph*fGnXwutL+O zXHFp}Y;S4WKkbNEuF5l4yM1YJ?Z3$7^xuHah0_s_^y*ya9;y@;axd=WzW*Zk!SyGc zf~0bE?RR|$IFr@gZ0c26!`$Y;f-ce@RWv%dj_UPX&z#^2vfm0@n**11b$8~mgY6W_ zIl*~5Bq<7x!RA17V17Ga3Q>=&TwH0P;K`YZYO}c(nN%txV+Gl2NVKFx^+c{?PH<6? ztoCkzRcBNC8jj4S!^v-qK!uItm2L>9Fp^=+E`mxBFGWkyT&V;KQX-c&r#tG^^t>pi zLqnkd{3BuvUnJA%*j}Ddz_K391y}Yl#pYe#$2P08SNp-e?mMg3 zyZ4#L?BzdDI(Jp;d>BM`gm%H4t0nwi;hf0UbPpkb#5tnr3Cp{dDE-s0Td8!eC|f~o!uWzAeZ$+skP*xox{gZ(Oq~ z{B8H0bM<-jzZ^m1`SRQ&1nbJ|fUr6VO%byz!ZM9hjzB^pj0&MT8O#TANz|5)8r+)cYQ;O(Yd$4#36lFX1Q zg`+S|r9D1=Y#DamIA~LeA~fLXVx5?oOi=I>Y(!z)&O}9yW)a|bo_eGWSlhIhmX<>G$Eh}b^X;r8-4_VJV(u%Cg z>Zx5r)IOr#%a6|M+X8T3duPiw_t1ZwdT5_{bR8~ExI3948zY&|kxqkIM$!f7FOoN! zqZ%J1={g|N<|`LB5y1w6bZJ71<|{Y%5ISaK3lci;67AtRu7r`5U1U<$5swfq$pN_Q z3$du+yRZ?=#X&44H!GGdG2O>RagP;`Y!EA6Zi_elNHgM{FKbsFJvXs-M9LOE61yU} z1=YKyi$cwveQ4`~`|g?Up$9(p9lBDEt^wDFJkwqT2{zYJ3~fUyvdlwHVAvZ%Tp@(J zofTGHfxe64Vn`GUz%yWW5{sx+$G#&5+j^auaZ&9?`|a zP=6nA%w9x^5?({3(#$KI8n-05?Pu?w;);G*7WM*Id_ZL9aU+!gd&frx+6dU3nL;9> zj1v$Gtlm(`f{iUrHysHef*Mmby-{yFBq9J3NWN*9WCF7v?zrQX5$>Kz5H%+WCI>!R zoCKJB4D=3?qe1Mz^=O$!f|p>v3w3wm1d{)MD!HYtYg-;{(VIKL|6i{^r>_b;7r5O2 z9_`~Qd7=NOL>7zbt%#iXKQFS_L~ljp$p2xHZys*5S5;FF z*@Ia&1GQlO?B7vC4)h;VaJK*XYaeu(N5G$-V1u^_hKjClz z3_Q~F;Z4b8$`MlHfC-I+$~mHDIktf@zRwdMEEMpa7tzC%brcD+g`+Sq5LXQ0bZ5U^ zMkAB^2drVf0EiS$!)V!b6S^MVaM?x$m$q_P463*CM2>Qo)_ZH7XoZT>lC{P0%WQXN~Q_bhtp+XUyG)?x1XqQSWK^}GBIk^jLb|&a@^<}O2|Ajq0j}4 zdi&3eAM=Xjcwrc9S?BN`e?~H9y~AQ?Id-bfF`GMTnU3B#zCviadxNXWILnKj_$XEe zows*A=DKbDtK@LTaw)uJNfJsiH_7`>pqep)l3}3U%8ZJ3V$w>D&*N8 zrxJ{*LWYfI2@`Z&vj8MJwZX?~j+(_e$~-+Q&>tT5BkKa?2bRgrpJS{7Yxg!PYjjZ$ zY3f8E3R|D~MCa@vj<@dMp1vS#$DJ}DkBWYoYiLR~n#ObiiL5Azx#YxRuab+3V=b1# z(^hy>GFvElO6DmLxoEs-GeuVIifxfacu96SR^rG4NfLyA86|_ zdNY;)^%h@W1V>xC47Uy`R{4}NsVPmg@(}{J4EyYxk6nR?FF6+=w#oqO%`Xw7SyKXC zt+(N2_x8bk6sDEx=PA?Tz z!YM(=nA<>Z-`_CYGeKjPpnCq|dL>qzr zNy8rGa(JTc*&*w%W9vIAS8}lk)KlnY|3Z!^Rq#7@6SM2tE_Tw<(dzm-j_8kkxj-Ee z$s`OMs$pbU%D*ErjHnX?sM_i;u8u1e{t{C-RXhw{-zmdxgd0cOiEs|}tvb!2?0nBV z#j*KvvKN>`sqLNUX`HjLk>uc$!W)~O_@ArAC+ws7&JC7MD;tV68N#C*Sd;1*Pq9 z{cY<@t>10^a_c8sKiK-7)`PA6tv#)!)(x%8S}$k~wN7bmYi(%xeapYL{GjF8mQS~Q zq~-lB?`Rol+11kCa#hQUmP=Y9Ez?^jws@OgZ+@luh34m)pKktW^8?Kz&2MkMxw)%3 z*Sw-R(|mSw8;F9xFur4a)_BBtmoaGUHFg-+8mo=@M%*~ZIMoQ~f6!mnf2e;^e?tE| z{T_Wtzg53pFX-#_C3;LhTR%nj2mUkg>%fl!&j&smcr5Th;Besfz@9)y;M%~dKsFE! zoE4ZD@cLi(|I+`@{%`m{>wnDufd8=ncK;rKhyPmtYX61)kpE0F8~&`lto;xa!%u4u zYwy;Ev|F{ET3%bHE!I-nEN!x8`2OO1)%TL``@XOGKI8kC??K-Y-`jnAeVx8dzU97) zedqgvz7xPc{Db#p?+?AtdOz*`i1+>8cX$W9*L$z=F7saC4SA<{+q?};zi;~2rXMst z+w|$Ck2Jl%=^af2O}m=fo7OiiY05O6*K|fxYm>Y2ca8tj_`SxjG(Oq*NaOn&?;=^D zuW?J`#>UGUFKRr$acbjz(eR6ge`@%8!&429Hr&_nj)qFZ4GmixHZ?47xVRzQ zFs9)IJo z_N`NX+%^!UnqYa*KU1PTC?od7o|1RZapil8FuSAX`N%YzAmk^%~n-= zQd(!(txrp9y4`wOTGQ;-XQf48NBW_vJ>z~&9|+p5&r55H-TI82d8Xa^l(f#UTTe;r zbi4IAX-zg;gW5mLJ)#esX13n0eX?V}J}}8_-QoMb=TpYOsk9pWjkjx0K$&g~oMJX_ z(;jE+9ec(j9_2HTK>H{a(t;dXy z=>u(c>!Sa4YkKaOPkl1T}_vnes z^#KBr(mJ3$=y^mR2-vL;NXu`x{!Ut&-TGT;`RvvQrRB9-4@*m&*Xo)NNvqLp?bqHf ztp>YwpR_!7>wamu?bZX*a+$4u?Os}yTkY2Sq;-qkdatx@He36&BhuPyx9*nKO?K3tH6X2=-Flm}t}|PG+CKNN zUfFE6dbL}Z&o(O8(qbC*Xt%(%u2-%xzwFj-UQ7pEZMLr0_Fi;>Ub)I_?bL2^zob_- znXN8u&(&YlD;v#Lr?z`mqfxn%78l*2-AHwnQQ2TNJG5O8o9mS;%yYMEH=MUrudFv) z+qAysrnbsDT69Re)@##|>y@?U8C$iU?Hzh$joI4befxy1dgXGnRo1$-BYI`E*(zz* zudMhht7vKd#-i5gudKBH-Q};Wu>ZYNuPirzQP6g5@9s6yOmoRY^z*Ii|)Ka+ibJ;>Xi%3GuCU@PAVFexwH^}opz0qDPw-QR=c_{ z+*V1OKVRd!!lt-xtE9}&F88HuB5S>pG=H^PyJ}_7s3d4{$yM4$s6LHK+-`1ycC@V` z+7pphYFFAEn|eibD9hIhZ9|grA=;DHa&3JktXC|(xm>$KTIZYJU8b#*hqd(PW!hS4 zS$gwQZOx1cMn&`{QY_OhR}W?>&ZXL_)2`Jkmf~Eht(KOhIG1QEO2c}^Qk+Y)l}i@} zDxx^u{>H`H$x*#x>CHvja)_WSqBpt2LhUl#JVr$nC(Q-grRs*3=A5qq!>U&-%{fn7 zDm^5clT)+W61<^CMN}uvOSHvm2wA%GVr}8VtM!VdJ1^E2Nz2lm7ikN;S-oQE&I`5q z=f192EZup5Ht$@-5#7l}=W1DXQA>Gdv`ZFVZB#7fnbs~Q%R;Y+@}$R8+C>fDG%BJy z`DIeOP(6q!PrgiO7c~AxuUNV>uBA3I+AZA~*V1ROcv!kKu4SZU>CU(|_l%#mRYZ64 z+GASM2G7?kt>%@ZS|WXtUa>T2M2pXupjRvn8rEVM0u@Vxp07nu*{N474LV1Ql!lFp zXi&rrX<-%{y<(}*+1mND8uf~$LT77pdH_O(?+g(A|q+U%@_o}^bSMLJ76 z@1$?&6-$xM)XtU3B#M;tXK1r*R35!zsnc_`nJD^-rB2V*W~}CcEOmO8b`ERl0ZW}u z*Un-*9I({sbnWaZS^a>ePN!+pI{s`N5OvA}O~onn;d_h&qEBfCt)?hcnp0F$KVWIp zGv%jk2SlSH;u+eRc2RlT0ZXr*p`CH`GtsN+yx`H#M7yfbrX2lDbgcSp>e0_c)AHHr z+N7hOiM~~zO+NaWXkGQ$sYgE(-K#!3{pe?1_GhQrpXmoIJv>=Eh1YgK^sw9Ac$#)X zv?*{v^e{8>H0`8l;DD%M)i{}kXkpcuNJEscYMdA~4u}q>(t6D7#yaSfXJ=uHP>3fU=qH?+DM9pCS>jx~I zdy=Nh3$}FbiJD(7W9i%zwSc^C(Yajo1Wm){IAE#VHmzY&Q9od*+&0bE@UniuQn_tf zqqHoQ+opM?WvSdYtqFtsfT&!qIYINtBZO4Dmi&ozAzf&TZ;|MtND_Q3!4!2ch5VERzm@6sX-4VuRf_&c#WGVaMh zSiEN5$_0zuUph(t-V+=uaaMu=pvOJGyYEJY16too z)p0I0@zjZ@y6>AhwCOnK%sn#qi0iiLLmTbe)jqm%M;K(3Quz(#jxV@9Tp@ z8?1Bcy)iQP9-I{%y5fyanL4!IlBeFQaJ_OJf2R$tv!$uiMWx}=u=_TK*;?yD_4?Yp zkPNdm$B`)TnZReZPanGcI2WQ2UH-mr+R$q2ta?x1@U04ew@)2fWt~*_;f8N_4c|U> zXr(1lJ-KhD;@|zA=|d}yBN7+kult_qL(AXztanWvy6iYIdA|56e}hApS~AspIFV__ zw4r6zW$K+`PP7?Qhn8|uLcB!&daHx+jPcC$p(WOZ>ODW03;cC`fBMkk2(M&Pp(Q>p!8CGF|=asYCPRTJ%G` zXY^@JFSu`-I+T4A=Uj5Ua~}78SFUsM@y@aCbJ5}&N3erwk~z+00y6_M<+0MoIcLt^IeX>BrsSM)R953T`}pgA$JC*u zbymGeX%4ulLy7u#Qwm~Iksy42`cV8hcQdc!zH9nW>^Nt+_r4&1ho=rj>)%hU%37P& zCOr^2&N;rkFE8hWk8_TFo%4@#&dSQliuZWWdM{0$pO+Ro&SfTFIr&QW!Kp*D zk8{q#tKs{-bIQI44QT=+p^l#HrRv^*WUGP5v_Wf|l6z z&MMqPl_E2A%5knlO`wzo?vwrhB-dwMt;<{ff&BlQji-!@^-t>;1Rf2{@!zifRGaU6 zkI&`Z*7T{SNsR*yuQx{xLVpew9hN+IDf}T#bF-dbN z$;m1>Gk>T-J#D0mRsm#2a1+>$pK@1I zt(POJ9J9Fz<{P+U@oMsXfMF`a)J=j`3JiMi%Aln$067cDTGGUw%>Zde1{YwhCDIKY zc}XV*`t^}cJN0L5nV3^LyAQ)qOl&2qrn9vB?9<)V$jiS+EIIDEYWA{lAj zEZWf}C}p`0?W;~{vI!H@D0_hfB)|4`|L0SJXF%O0AieN_gQ8W4lqtT7MWU3Ff+M74 zBb_D**e0yODN^jruCl7sJpJ=WIv8+Wl9c%dRaRDKh0_9#9R%TNYmg+Oo~N26NTvmXiwwi7F zarCkzC1t2{r6@?akExn1Sh>wA6O966|HyW_Sn;8n+!ywElxgFv9JL-I8eY^9T-Uy{ z>lo4Q%U%~Y$6*}-VXy7wCn5|;Rw4}W2+2%B{}++`E_@~%fFuI0p?yemQmve4#J8p(xF1T|y=$q|DSbeM0`hJ46a2+3SXt)GLF~ zdnAEI0)Iu2l?7)z0@8mf4Dc){U3n8~1JuV{BuYvs6~8qd%A`JFWDC;P!52FAB~$jN zRzTICyK=jO01WKP^_1W46wrOS>z{bdU~vM}R7?WWN#1u+Qu%;hjwOW@f#iDgHG>Zl z&X6z)3~{+eDz7XxWnQz&h#xx-`WtFrvxpUSz%qK)e%xI>b=E98O^&WlWH;Zdy36ye zhu#c2CxcRyMluzp;2r3YqE($|qti_tDajaAn1wa-LT*Aax@Zj>I#AIxMTL=F&>B=Bpb9a2SU$*8JPgtYzik)rhATM*Jw?&FkikL!NmW++C9wPnTQbz&s5pc@?gJe9@3TLIwrpi@fM)7O=toK67SluuGm8KH)TQ3&t@JP_3J z7E}2U6~_fqm#LG7G$16eba=&XopcFCCGSGDZL{eE&0x3OCbp+^9nF875A!ce0dZKiQLUYPT zfWab7l&(#~djbL#s8mU7O|;+jts^<6@Hns9L>s9YjuA(OuzT>23xJ?d$Lm~A<=_ON zS`t1Va1EKPz$V91nKDS85Q)dZRh9KQ%o3yCrdebp{p1_D4iRGYVLa=Jkd(5qV2?r? zffY}XM%FlGSsaa$kema;);hycOXC!P z&Y<>6(Cdqgel$a-6afPeE~_*!5s`E_6|*HUU&m-?+%j_Qs01}CO2$mRzHs8BIbO$1 zU{+F;?vqxZ1Rjnqpe6}GLX>7P3e2em6wli*jaql;;)niT=GHAE*Ss|W98gZqF1YHV zGC-!RIN*7vNWllyDFfgs7|ZDh3p?dKRu9BXiXFGYi;&?kcjRg$xJHIUtqN>FtC*HU z?TCynEcH+cj0x5Sj*yz&SP`K5K)Zywtt$I^fyOF1<+HV5HvhbIt;^GTC4ZUrK(fm$ zqbx;$+CgrMGIvrGU{il(qD68%5k(UCf^4ZsG25I&Et?H#*2(KSb) z+yqdehk7$S|ASw6rX4ZmSX|tGBVgKPPy$OJ0jH9J%>uSc5wIcZ-Eu(Xl|#T?L@~bv zAcuols+mUEkADA(EQovQ;eNN^=AeK{6F_ zaKbUHDJ0o@(ubgwQpfDIL3I=RzpeMezS3I*dkqf~cs>c%PhbL5(X#ncHtGE*9F|%r zb9~fPqKPGSD{si&MA}k}q7UOwbIM@hHEMtbX6evN=WOldO zcFC0Y9G2QB)i)-nq_dJmYNL;lD(-}#e$6S@WP9K?1jk^3$KoJxh!o%@!&DHnHV%p^ zXbMtz4@-U2SSi%paa8IGa<06gc;;vwDCJ^~-kCHi#mhSZi;<$6V_pvyuIdk{NAlQ2 zW`8IPcR7+Y9hQnHQ<5=n$%z|fOOjgK2UkEh2sNFxl3aXo!^=4f4<@u7Tt-N=d(^r7 zr;|6s8Ylw=G6b-f;_b})G=D!0g*=uZWgmU6rkG~bVu`Hm)#xaqGk^dxuU7k%_Z3Gj^xo7bBq)Vo>o%W z<$T*pWz4(ouAZ)rT8Xfu&2EWMYDQVO*)0kuuS>uF(5=X$JTdBO9FA6?Ix(j0No4Pi zx=Xchr|AW;sqH(1eaB3RSzSR%H#M&9*pW`@jKbV2cxX7<$w+I!1=?dEh<^ zb|(k|Afr;?$QYGjNR%S%QqAsH7S;|%<)OXyy~lP%olzNgbVcn8I6XV>X(fKc%g#4p z31K}t`@>uYSO8Oq1(*Kx&^~z~*+VypWpGrnIY&W%N$o>xhoxh3Ox)|<+dA+KR&+UD zy7jc#VGIFqZ{xVAGU)``48@vBmv9+E;|YgUC?}AwX=qduYBNv(|26~8N}jC(^sa!} zj0HzB#~+&-Fn@q1020r9eXjU;NJcRY0WNa9 zkk!R=K19KKCWdk>B#Tj)u+!$dV7xXQxC{QDCOyWvCmN?0p(e|hUIN92d zx|Gq3Q)|khUB{Uj)5nggm_whR`EmD6zubM9%RJ7!aPexYcL7%f$W{>QB6!bXUkfJ+ zRObUu9tW&q91(F5%D_iei}TE!y_Q*uh&Q}N5gj^Ztccj*ynDbXfJZNe>2jc^DB#7P zgf}71Zu!lKXsvQbMeKWvB0B7m6K}8S#Yxj=vH^>+1&gGLPzQjkO+SLA4`x66BM{!p zZ%RaKzS$y9J=A*~5gjajwibvvd>>y$43rN9KKF)Thg%*B<7F|gS-Hu3;aTPw#(3i zV=^W!-F)W3#n&kJ<_U)+{yA1RD^tGTH+Dx6aZGRUv~T*{;_XN($BC0C?mbSpv&L9L z$tD@Qc{-j-{)DxwR3IzDMcQ~s!ktPgGkRicTTxG&#|jm7%ogkxhfp>>NucS4?YSQG zV6FKi@O~nP5acAl*;Av<_0V7M4((fr948z)8rU539&f56hof_9<(QZaDf7wY)7tka zc&1(aHw6Dm$nV<5`o zD)=fp*rF^nL5T*>6=&iNB^7T0G`km^Z1*jXS0KSqN7u8ihhRsAUm{W9u`)kQ-oK-LhX3VuCYsvuzHf$B&BK%9Xd2P~d6q}>G(9pe;_B5tBv3l;mAi*mgXOkL*nLUKJ$H?Jq} zUfh2$MkaE25a5S12cGg-NB#YC4hziZ6lML?s3SEw&ad-0QPA;w+F4@exgLAeee=_6 ze!b5;x}LL>l}IjwxHgk!@`8d74J><{0y}2tVM@Tl!qgECjmaGW$6qcB@)$`pxIMtv zgAoF%Ny|ZJ=ZTzsSTH^niCe7$V$5`AK{7{-jh#;-xO?w!*A4A6j~laB1j?FgB{nxj zIyC`iQ549)Xc;#JUQA?36ie)O>cCu^*SE+s1fwf;lzHN8yeXF)7C_InV<(}+toqHZ z#Hge~+7L;sfKjj`IDJ0hxgM|);@yMir;(pT?ddi6%1a+*&_1-(L3VbE?-ot{{Z*sD^dj9JR8D*)jJ}mg=m(+Rh^kI#G!IjVfFfB-Y zZAY#XS_gcyiX&x3cW~+MV#&R8(`~3pb#y)A`U!74oJLSU$pB=>50%WN$hU)*2Jcfj zN{#{mm?U`+s7$jnE`#?8`6_e?kzyIR?pOf;%5k0vAC!Zp!o<)1+a0f*z3+Mk!s&;> z{4~3~&US7zLuJF#WkI3{E69y1?SN6D(Btk&jC{mp9UEOAZTj8LFlkX~;7Ca!is7$` zkTw_r&l_rYp{jx8vd&zir||ZL1wb(@`#9(vgdSM+`A+1Udsq-WFB+%MP5ogGRIATp z@$nGX+&i_Y-=WLpsPNWaxh_?JR2hIe*}}v1LGlO0LnIc8iI;#Ql(^gf8$h;GsT`zRFmXv>jWNRefzP)H%O4)U`Y%Iy z{dgHFU(MuxH5t`NnCM@0Sm$wOsQEc2#L_R(4V%!-ew-xOpMw7h!(47h&iNpzIrw?t z=4Ox2PMc?x5Q6Jzz9JI+bHm;Ky&VG=DO`A+j+};iE{T{DFjzXJEW@m!9 zGFeyngb|Wtr*xcz9e5PuWwM%J;Ho31d0}&vW(GKjk?~$!dRTBnW8;_^YirF6o|vh* ztaBSVM8WpX;IdBE<5Ew14kDl$S*zL7PPN*Dd;|A`Fkt8L8w&s=PL~YcjR@`la(6)5 zAD^7MUEK(R7XDf{VpTUykUaXW0N$h7-&SHmfBdk<((16(>)O^ut;yDzt*5mbEw8t{)bibyFSR_;@^H(cmOEN*YT44V7JPv7TFz)` zZE-dKw)tnx-)nxh`Kji|K>a)1e0%er=5q6u&C8lEXrA4CX7hw*kMWxEbL0EQSBxi( z4;k+<4jKoHE+c2GFfK77#&lz%;nsf*^Wd}k|kpF(=f6@PK|Cjxr@;?d!!4ZGe zf3v^KpYyNvFY-tH)BO|uKJAa%FSUQxp3|PvKC0cXjc9|~UTufAS-V_YK!xoLZIY(@ z{tM=VpZNaK_XXeMzK4D9_6_-N^dt;U5)LHS2eC^yrePGIK6RVqZjPImm7Z2@YRMV z8y;zRZ^Ljye?xaep<#W);)Ybi%!bn%bkAQsuX=v!`L^eap2s~8d*1CiNUA}Pr{vk- zS?ZbVne92l)52>$_Kz_nI5!P`@6U~O6d4;s0(3+3UyQX_6vog5v-y&0>O&^TjrV89 znryE=WP;pye`;JFbs0kfa>FlwVytFC(}zry8}Ez8%D}6@IP#^(@BOi{N?L+)L+eN8 zcP7Y<_n(awO)vO|1ms5ZdtWe?>q9>Cyniw-n|P`|BoH_J>W9XqbB`E9GN-uR4~%63 z>@#Gd+jzfkfJvke3AzoZe$QCa@}NFs;@Wt>YbD8)W*zo0-y$@2)SrzmezWkDL0VQxoRe)<~eos0wBc%`X@kN->S< zPP6%WBdwZ(RKvH=7%7S?jjDju(EOZnDrJ;;psE=stHu%{RiXxV255U zncscVm=oYT6R5`fgb|vv*Qg3m4Wd16%%-N$sG3MM-cRWN!9(j+6RF1g_xi^`0ILd8 z4d;H`I8XJ6K-JKE%s7|QKfP*V)p$Q<%+lKQs)<$O{ire1m)EN%R*m;jV}^WZV%2y* zVw|(GqE}6<8t;dVvq80~npid7M~t&3U#VA3tQzl!jOjpHRZXlK?+1-(Q?hMU!Kz`A z_&Z~YU7^-i6~r1od)Sz2SH-ne1-FLJ9x{SitMaX_D(E$Q_P5U83Wg1zJ!qV1Ur(=^ zNH*RN7-vweR$a{*^!NkDmSs)=Mn>-5HZjH)2n&>8m|r{OR#ssd$0^FCt|b!SFZ zuxx0)p8;_7ul1@4X5+orIHkZ(1f{vhUR;WlRWc- zdUXj+WVpvTG5l@4YU0^=-))?bx>>I-GQYdqm@xONdey|U@!oB;UA$7S3Z4zWdzaDD zvQ4j=a5l7BTecZhfwSQjM~r6piS(+8XX72wa?JLsiD%f^ZUsP9t6pGU^c{xgdgsoz>Rg)i?%x=`?8{GnTdIZhYR3G*U50ngi+VL} zwuTK)%LKievRe(>3cZ@NTaD66*sZ4S`Fb^OwhkID<8-|mvs-RCGitW()c<<*>v}a} zwubb-H0Shc*lbnx|61$OtLK}oLG!ygX6xWw-t)t?72_ zPtuxZw)X44+;f6aol1-M*smt9Q4N~Sefl3<5C6(vokEkf_*VV*{_2_Lzi-iB)2nCj zZ$`$=`tM4^di8X(wO9Wwh-uZyw7B9;`oFthy3VMcW;XZeucE*7>Ll~r-RAS1YPN3F zf2}e4PO)46b~bP2WV5wPD|cj`ZHp%diUQ@|o%%~)?3(}Hq5sTZ73In29r{nPY|MXe*MH)#T8eX<{-VDsij#BN^&k7I zqBi;WR{cl*swhqVy+!|Le^oRl|1Rq<_^S=(zf1Z*8CB7ih*Z>nNJ_6>6?KX91^owL ze^o_W(#q@K2l{W&(w8~?d#)o_>VuZPyiWfvb8S%cC8u7ee+R8QXsOH1`nTLKecl+f z)a7RVo30Oj*ccRb$vrpg-*(^JZ46raakQ)ZfdE^YxHlRzl}jr zm;Cf<{W(|Vd3{jyCFfqHe;u&3K}%h3(!aKJp)qKw%Z>W8p33d|pr}huy;A?`HBYw< zinipfZqUDyy=$6ch}Q>2Wpc(9`j;=P>Vu*&X|314)Y7XDio&F|PJf1VchJ(8YxOT0 zryGN!FOg}D{)L7^uN#A+Flk<{f8KMwOCPi}=4$z+f3Te|c@3-d&-n*MU-Ivj`e*%v zqAmIN3LV)*S0dYT{i*DoCp>ZaF9)Wy4T{F(v&;0)*rTv*Q1m9BUFsN_g9ScA&Sf$( z+Xh8>a>i2q$?U<$)Yxqs6b;H}OZ0!p4!!gDpF4Q|ZG)mqIU}n- z#u+E=`N@(G`v*m%@~oHWAJYddeR{F}(J5JDQ1mHXcai=m*p9}aC{&sk`akEouR|Xc zU5Z>6=pWI)X$*=M<;%JHhgCO=0_Dq${s_}`h$yC8-t=Uxqn1|!1Z9G zJ}5eqFC+Q~Zh5V3a2YKgJFMTI-Fd;)GwEi1Q1m8eoUgxojiwJ;YIBbMevFJkOKr~4 z@58Ja6t&5vL;5|KHU2@-oAlRg{XPCc(VFVt_xcCt+y8!_e^4~0`ux4dpr}iJexCZd zK4|I7bLGCqpy*4!oTc9_7UrO(FlXxT5}_=GIYU})gQ75bh;#HK+2QT#A=(Blt$DUS zl0Enr^~T!hq8D5+!`5{2A!tAa|%x-8Wf4A>hEY9 z6#dEBL4AL=dbQfL7=xlk5p;_FH(30}pr}!rXX=A$9S}WA^9=ni*H4G_K}(UIt`9f7 zyKPVuDVLk9AI#p>#t5JJhqggcr+jvrerNVB_n9)Q^g&ChPV%4XeN7*E8Ce`RBXLJuL1Un4@4*7{OspSQG(C|jtT-x9eC^h*l6#kX+hYmH$<*=OGaG{O zXodL54Y>V@1deI4?TP3W!{yBzB(HJa z&Yi(!JA_GFSX-o*BavXPH;6+h7M8!tEu?&IQvG}|XZx;dJlOrbq!N@>qassE#+;dUDvC#hXk#1QErx zKYz;V_4}6kJ^i7B*V!W0rpk{eV#JZq>%H44Vm7=_4aqD7)bd9=k}eer1+tqGL{kfp z{y;EI4N|cbhgpn5g7Juv7`m3g5{^*(XfBm>5Jli~4sNyuuJvP%Cve!|53CjVgzR}r zP$Y%9q?n{y4>}NB_*B4#i!f!Eib)|@3Fm8QK^*BLwxp>LWuM`UbnRb%@w&N0oeced)R8eV6+ClLxOsyvyrPUT2+^J$u5LWh>V%TY1I2;Iiex z1?yKXS`}QgYVF!p!Ig`a1?MjVWpC-Sro&Fji$&k_$tao75prBh1a}fJiQ^cin5JBS zXN=O!@pwM%o|SAqqEc$mwtVEg_I=CzP{Uk}MIFjcYzTp({q}HaBKv{s+3f4X$kSY*&qFO&qQ5vBN3_eG#Q};@CG1@Czv>B>l{XlWj*SNczgk_EJYr zP&80*MX9fYi16&-;=bO#?p*Mk;6jE*dvJpgGn3A_?d_gtS$O5R`oc4o%hHfb>;tuLSfsg>hWZWeHmL&;^m-3P+=0^ydbxe z4kn3+O3Y^-mX&i``rhxK%<+9GBvYBG`gd5YgC}fydAkc z5^2NkcFJ>k(e>oMe5_a`qLWO==pxwQsZ1|}TN1&-D3wSLH0_EAe1S@BKmOrA59}kq zNISS5A=HZ-s}rwcusPOksT4>!v^D@B+qR#6KfNNyY{@hsvm5VKos)YgQA`pFj=@F8 zo3!}v!tmdb9G=LqHc_O4Fjiy<6T*9N9kPt0M0Pj%odaLVl3JAS!ocaFJl7$}slkbR zxitw3c}nzQUEZ9`6)?66WG+RDIf`820n9U5LuFV&i*drgsiaslTU$tJ2T0HS~xifiF zVGNOUWb=}>>!5I#Xz3Pr{P4z~>|3O7J$N}c9>=bgXLYPLs?(#&u4O_TeZ(2bhL^cf zIvmT8X$Ag<^@#C^^ASB;53YV|w~E;&^wC?139W7g)&c4u9I=hDWNX{tPy%MhJl|2Vn zj3Qt~IT(u+yvdL*=^rRT!#h?&yfK z4ld{Jv+B*NP^k9qW@2V~eP?%RM`;HMmbrXK$$y>mrEI$Kgs0!AOJb1-dB>z-#o`fG z#BvntF+z$XC})^GiM%Oi+Nv$G<@6uC3^^5b;Ml2HE2k=+iX$h9k=;F{*e%a>Zs}vo z)chf*tggZC$yX-BWGPWE3!VY%4RuCRYYh+tWq|Ah!OoFRBQ000&n99Aoz`;jQiM4} z60^sy&)1BZo?s-{i3~PrjeA>YHCX}bm|gX>TAQ<1yr}-$aI)kg2^BrLIzZB(`BAf= z=mp!WZ#xW49Uy}sr5&95~tF`hH#5`#Z0@PPj{e~-4q_eo!? zx7hTt#?LpN(y+txFYcGz2~PjN@=tllPv=^-%9;}KXsxm%Rai8zWU9vEYglgQb+nf{ z{eN(8jep<2&pb{7n2yAv6jkEj;1o7*FKw3;pe^QB?qs9?ydlX*NvY-CbL^dt-GHcD zMeCIc%szdO^R`kgkbLyNy&S;kzj;U!QA}-gjJToDet+#sA%yJVyW1Wn4lg^b0^}mU*Ud7m(we zp(fjE^|_sL9P0rXr7?9_t^Qv*1<78#Tp=3HYX_GTRhR|JSD{RJlgr(u1U=D!aCN8=NtGSp87t|ETKihMESg?h>g;JAcFO2_ z@2)v7M$uozvaoR%uwgUFTr4N$-API|tBVRmui}1E}sO4DN+Dk zuRyk0fjnVyae?u4jwL6_EWOHL;`K-Y4hh3*`YC5(o6$dG$SuQOBzD(KKQ-*@N$hYW zWFI?ojI3qXk8%%@zM7|siY+_fKP7PwEDFwFwPOCF zHEW|^ac@2UqmQ8e&^gTdpc9(k2 zSnd=#HILePioLLV;6lzLx!FjP{tFVH*0}3%pMNOw*-E0y0LM&mS-AcZYB_H!XLm61&M%=5` zO67WV!(|)y8MjnN;Y7xEf|=7j8hTKD;7~?w?{q%(jk&o;7Iy7u?-crv(CV%29jbU~ z(VA7EwGPag46Cy;UsM&+Sw{ct>Rw*Mtg$P|=+JTO5|s$ybyPS}LKR%BP}#H3b!A11 zI)wqG_I~$&J`cnfZJ+|Y+q`aNi*k@bPPa=vU65C+|lOxA!u7u6L2lid^R&TxJ_ysuA#ut}nuozP!}gxjVF?u%)lNJ47kS z`Ze>UfHxene#DEj`pd2GPdrBd^r}FID8sUL#Z~=PN52T}VOMZ#`p*7*OLq{ z#0+Rpelq~CYXE`9VlW^uA56$mF{rf~vaI4E6!K_ZZ^7 zX%opXnHa9Xpm3N9m1!D#L?9+PY#FFLtz=-vZGJ2$HKL}`^8Y`s;r~C=d_&W-O_w)5 z*68;3G<>^ZOZ{i+m)DKfReO4CU#Z+W5lBOyT9w+;rhI5mG-#o0Wm(r{Auk8lJziVVAW;UnlTqk(A}O(@f9Y$X-_&qR7l6T3ZpKNO0y6B`QJ`oP`zgx{46_XJLiBwlYMs zAfsz4LKFzk{5ZP0GDNd5*RHAvkv}x^GFnp^qFI>z@p6dj6^l(7Uy^^OeM#*7v2utg zH-`gv8G`?TvnTwC~+|4~0V?bJaeYw?Pfgx?hyiN&)j z+&YCUn37e{v-e|A-l?m0W+PbzrA|}pSD~%L%M8;D#+f{sqH;648*(d7DKcP5anlpYu0`(OeFc9U5yW#gZ5yOZitVbTNevFHy8LUrWP^uz;<5 zDwL4shLY6<}+?s%8tG)(NPR{rvZi43)VV7f6PrU~6O z5ruG`LBxxr2p%$sy32SdtS=!Afu090lvtK8PB~PrYRD}=)eqV$#Gzu(3McYJq0Ku~ z#?c1W_YU^;6JoT}?CePCfyAQ+R5F~aXUCdhSk}a@5jzjft+A-2tcl}FtoLq$+8p90JR1bj63s_}85ntp@K;7*Jcue{6%uAEB*Kb_ zTGo(Ta;g_N$`o92qLvh zPdR+RMazqFb}TBL+J*Trl=u>_c_7#G&CkTnKvqP}^jdc>%&n663@TJD%4rYm2RI;c9nRMLouT1dNk7CiRP zV3e!&&!WUW~6jZ80zRE1xoeO7x$7`HZ`>OzW>%#J)qo5eS2kH?Uj9)6h~=X9Sy zesV3H9?;bp5??9h?Z_y?>p_eYr2*ow@KHlC-5N*-i1LnPAlZiTMST%j1?We=Vum?kkpjXPwhu^i_`!t>JGL0SyQC=`wD`aipbTT(VijCRXm}| zB%$9z*guH~7 zSR)JZm%hAaEJHxCRI|ei=!Y$fVpPQTQO%Li3tX9zqR^rO@!{`P13V&uMInoRP=%?< z8?~O=#~WD$c|~a;1!Hb}x~ew{l@R3J`MfK8Ecs1v%hjLQWNjHJh5!8=csc(mRc^HW z?weatrppT^2{A7PNE26GVC{AJ`c#D4NnVc>&co*y2@n(wpIL-N1(HZ0_REkkQ50A( zFkZAO4&(fN9eo41T;UP!>9A&vT4$wZmH(8KA)O?vWFlxu2P!ObaW>FsHRMqcW=4_~ z8JDpbbk3-d=_JvfFe(!8@c$0<%2TQ=sg-f8hGKr_Q9~nKX08{+*^psgDC!4yxxA01 zjkJOOf>x6v0R{b=lB9UWf<`n&dQ}RgusqOIM=!Z5Oc{R}8LN@Z(IIh4@{yO6L%Vr% zfmX(nZ$;BbcXb?;Lc;`Invy`2J?}iuFY0>J9_`6FyNH&2@gu?>&6N}~agOsZV}RYh zZ}rswH((MtP7MtbYJzM}u;Gyb7a+wjX_BzZY9>ofgkWB4oE*LO<@XHn4y#T{2~!m& zQ)YQ7I8lthL}W)cn`+PMn>SZ|%GLeq_va2-SG%TI;@TnAbM-I5?T>?-__+{e0tpj< zCY`8Z$9EdZMv)b8#jCapmNoI@D_wm#tuPXeeKzP3DJR&Qmy$Rn|RwQ@>)-s>r;}kJjpla zIJel_&$xg>x0^lf6Tb2_`N|Zjv#BU_k;GI}fs&Hup>TkT(th{>0~BXzoeYydUlvJC z?s~=lcM*>K|B?Rx)%4Hw{r|DZ4BJYuZ?{&4C_M9sR#k>5I`fFGs0dMH7VO(AD?>C3 zUWpZzAc9nW=6h{N8DWM!{Ja+2>b=XclJwf=UpPqB`^X(Rr01 z^806D9GzPUBIw&@UPkjPLF5n4^m*-nbo~Fk%49VQTFE&TAqva_qPZ0z3eJL_G^Zj& zfmuM*QW>I|o^xm=%@rXE&caIBR0$$qY!>#n#!3(ow=wftiMJv|{#nr68Y)5*m<6ki zP_Rs2bMw!_T&t@HQD7Fvk*5+wlrf)qtwiWirr&FUS(yDbl_8pilVo*eh-TqTQdJ2e zUvw7MBX=c;U@x5cHQQAQB42bC)+4PFM1KFwkE4-?Dnm5$TJ6Z8$`H-`zBVG99n)VS z{WGuCjyzBiBHt{?NN74LkkQQVA|v-#g2)$|`MkCf;pnJ9Ml-#y$@$;YvQ%sNZp&v| z-rw>-%ifkaAK(0WQvz>F;7tj{gbJ@{`wzhvmroVP)nx4?P?MSpfd1>ODc`k{@N488v0 zAOG+NLl@;5_>KkqGT*Vz?CmysZ#Jn7^xKuM_I*gZELRVz71posmc%qTEKMm6)cs%I z>ACUGhFsdWFZvfAQs+EmgV6=s{icrIzW(3-!-iGg9QvQ^{~wWz{%PAve4&|-ZXFSN z(di?K&Vr@%zKRfqXPzl#WS|m6l&hO@AHayPeNMmE!ZRNOI3g+d(?;a?&AjJkM6&QJ zKr{BH8QHmr;1;qsT_? zt_V?l7J6-OMTo+);Qzm?B1Ey7*0bgOzd+liwLH-L_2yvHV~yW$40%Tye$`f3XsH=83Nx3y6=re-RSUi#n`k@!24RrRh6_9VbEEzMmKlg z2ftmf9!w`5nft=YJC^@@2~gO*d{j*`BCsumA&QApkAq?o&{M&P<||j|X=U2>jswpafDt)zE@E3g!`2`TFvP-0i0umugFM za~+ZxyZ6W0j%>cD{7Ci1A$sXD^i1aCF!8Ygct#wx>HF`!f2wvVA=icjTXX zUw^i@OV7gkrBfGAioIN)P4{U(x!ZO01CM;2my~NF>e^CArK~_Wl*|N8Keh0Z$xJ#G zhq@#j4E;ISU8lTTr0&;pjrzi)38rbIu8Cnxa*|C zXCxG%mJYmZfe_?t@c{kAUq0&1Lx4kl*+7cYcj+{gZAKj8P~mWk!pRn3T`8fR0i9G< zw5TnkaL!N@-lEAFI61I(Xn8~Krqd0)=u&x6izcV=MT;or>|SIJtM1s^k?!l)&U~_{ zKW=`PMZ|dbtLn8`E&V>|U@|Gz!4!OQkZ!@E6oQ>GMkN?3XvSLu6krTRAc+c5&5-Jm zzHmAjV3`aE=N!eCCSf0hrBiXAGAd<&3Xz#r(oDF2PS^8NL5Bg;eyPb8QD3CYBAR%l z=K7DrgXucDebu=PIJvTr!VSfE3r3lH)F(7yT%wqK2-dea!>&9FrX@N>mKcDolQmWG zu8l9GSDuy%t_m+KYb^9<#T%X`-izl~d+M0zu>gywk&IG?3DU$!APL2lVWu*ED(FqV z_FMdpWg#y(Emd6AN@Z=o#gJL4CeHrQuKoe`sEt%Hc2~QOhC4SSQ@K|C*bEyPs@$hD z)VmLcLa`vrXC#@4v0WwuET`p$fF)Bk1fWtAA}W#T)s3>+*837%H<^$mdH35F@jYqSVs?3Quny=q0CB z0oDqD1}vZ=!$iA9dRPe1eQPiSd2BKr3K)Sj^q9dE6>XDYBdqwc{LyJhG6tip4Y2jJ z)Lo6M4PGfvXYFMF^_1j;qAx|AYN?Bs?dUU&frE*+uPTw|wc43$tA1?29hJ&Zk1w2o zgOVz?8N%Mv0g#8O8I`75Rw<2Pao5N4{I}BeOHNDeRi%-X8NH`h-6b#%Go3hoM_!h5m%psJj>^@uhQeM+NQ1E$hM4OaGY*$<5@nBq zw;`c*okWfl^33xY@^{#xgB)L$7N3?%sS6zrO}qQ6*y8iF#}y=XRWu z8(c^JtE={e_5~r7{@Bx$UyDVkE*OhJ*&0p;DeM|UJ&8c-2Ce3#${m&Clm-I* zp7gz1JXMV+;R9TCT8gAjbFo)_UViaBPwiZ;BR~4(>)@8FXHCRpd-kP$8K`h0rjhZR zD5W6^s{4~cipNd1a)LLnHOt;Kq4QUbN~u&;G573?y}}#XGC{o`9|A`{|Kb9`%2ihS zHD)+XZDWcWhvIPqay+)xkT05qgwu$jGnCy+Ro^jA)nJ9y5)DB}L9J21V7+Km%A{I4 zsbW$c9|a7<+@fNgRN)Oe2dKOM&2{9%RX2iBuG$Z%%Q^fkwOiBabVOJcscs5WTr3_% zGm06$C|u1{5QL^1%I;L4HJU_64Mm_cjKhU2jK1g$lw0;O2;|sws3CXh=!3w!K%MW( zz+=kWEUNY(rTTeq|A6U=4Y`i|?wOy0O|IG(wZ~k0Pf@Nq1wm!V4+&(@pEl8%*@FzY z6*Ea+kUE$Cco0o9mT65UBbMH-*eSZC5@2kH6gV9;_IGHfhFwP<|J1txDOc^|2PqmFN(Q7>wFz5qCKWYA!GhK-9vNS=PvRNCIjEMrqT)UrTwXsMa?a3}WB}=E%&8{QK zIll`=xoW@C4*N3(XW}r`dQ)+#RHr!u8xbZxG>%bNbR!l&bJ*r=y!DEAgyC#-Tj&4h zw3Z8-vrT{1baCS$@0fR9L$>~p>)my4@jUCPuU%VnruxU#r>edO_y7A`KXYBLJ*QT~ z|Ld2WXH=?kTu{1NYV`A<8i(WZ6IxPXoai;uS=Z1vue?RGuG)z9Fw118stVg>RfR3A zzM59Q0cAMrN(4O)(n&uyh=`%4?1Dh|*F}uErK15xoZ_M`HX@W+xP5}f7hT^D2lc+J z9@e{Gcsf*wDV>Jlkw1}WDiDC99xl$P8Kq=qG#I4HxDSmzKskU&`5lJGTWhz>mHgVG zeeW-N+7!^`qke!!)#;;j@_LIVuLU%M7MUKDBVp3$GxhsAQvDrWeeP%Oa1DK}?mrQu zToakESmWVgn44jw3>i^B)Zr1>>N)88sp*=DC&h{r44IkM9;h;R?|;73!p9Xc}`;Rwow5HT1>j)&o+m+HbUX z1URr#%9Zt+btl7_h*ghcL^zmA!!XKxEqkIvq}EJ^!I=u@c_PtqTImZ%uLS5t3TV-K zBQhxqG`Kdc@64w57r{GfCNaaH@1jsbhHC~*6PEa7JekH4L)mG_>ZgG&kY8m~g-;<# zUNO2_y1W807L=vXuhi}I<07nY(}pteY{OO`GeZ%yj38Cb*#@afk%7*hMSL1yWo<85 z5&^qsR46u=iaDlu9;vZfW^@MD?OC^OOPjvCZLRKK7jX@J^zSdCyXAU&xABy#z4p+T zWi0iKu0jY|wI!687bcv#;fiH~2DTX;eSJoE3WEG)0~kwE9rtx~cJx_P;F~w=%R3D{ zmF@29?;T)DWV=^rN1k*Itz58>@0Y7~G|}<2H7kan<;a~%V_jgdWg_ey@lcXZmNOw{ zAYs2Y!YPbJ)FOz9QAKLmCu7kh8;qZ-4}K$BX0nT^h=SRQT|6X{J){&LO^wUd4arfV z;F~8F^yuM zTX+)&v<;&x5$w{^(dDMg@`4?oq*y~(`5?4}x)`~cX20v9m;ZRLW?i+T+Risw9WxLsrK+*cu zRx}w1&Qq~43wGKUgqNMd4w!x8VQ71)mC{OKbQq*Fm@_f9ni=MJ03L3Cn!_VnPsrbz z?n^;PMrHC;wx=U+w7&1Np4`w}CiTM6<-ol}#O^9u#}(WOYomf2UI%}3r@pD3ZB5EETeID= zm|N?PYaHT|(PiTjErM8XPgD>?1^UfHUrzr%<3g_5BieCy%dPxL#ZrNIkVym+HGR#X zKvzssGyzi|t5K{ql1YdBsX(SRZW=xo>a>BJnLL3w^wB}4Tp*TT9#wUD*}AV7y&RaE zMUvKJE!4tt%ark=cmM}?7`+{Rtc+W-a`L{CmAp&-+Ok$%Tn~NZBuv)oN~s6NY$nFB zRWRZaV17AM!^;i}Ie~ zuA~~+b)ciSvrl&LPOQ6D6@#ups*ZQ#7w9qi`k3cSmb)Gry2B4_b)BajUNc77nJ{)! zPT$eEjL%7`$mTTzkHt<+cH%t%EGtf|qsFO@fbsuD?a z8glyRWuTvAeJ_jNzmten9WnRv_v%+%4`tqGf>N%Vu3p#9WWo-V!g>WAb}-2-qdtTo zW>DF-2!nQloxw$HrUp)d~C=Uk&g8LEz7rF&2T z7rSUL{PFo>>jydo;VvV!X3X_a^^4dt)OGXKw|ygNcDLSV4D@%Hy{)N%&ek;C+#Ip| zL6(3BHo`zK%!U~Z#;lF-vd@~EhXxyR$Uv9#&KXpt5^`wVt0)U{L+bp+YQ z1Cd~gitK?@MhtLCUpNp6)6Wqfo(;-#n6#Fy@Te7{K zX??dGCf6#Zz;)=;M_a)qSI!#0s=aWCKeEAxsH&5sUKZXfoNRIG9~hL(iZgDh)KGR= zP~%O`lWg`3>^xev+si_xk1hnR+7gO|S#C>EaK|G#icmhM{cO$HnlYA5&Ku%mV`9Vl zZ{Ql_1Wf%7Tv%Z${!E4uD;yXxZh_G%5nyRyZS1nkMlS{95^MERJ)ZXsD~wVk#+5JH z13*qM=)$|&v!=cq*HyQPK36Et$1rm}W;|s)MM)8Zq5up}?1dTjt60((2>U{r3=0F= zR5^V>36q(F5k{3530nGq(ihugp-qln0@P)WVk1%b@+0H)@X}(1K#4POyNNYh9A|jc zvV~AxbG4_FI0C5w6sE6@UBa@SeDLw&Yjc-`08({Q~;5*>2Od!BY;SYtR zd;}G&;zkS)axy4q7HY1U{1cZr=8-rhKFYkNsEF7dlwp*e1ejLUs7HTs_tqh*_Q?7F zFI?}_T3&7WM$1brPq#eTGS>1AcmTRv?rz!LvZ>|jmennK%lwwQ=GU5EY5r34v&~O7 zk2N1}9%}AvzO{Knv#L%py5;`+L} z*XmxW`%>Mrbx+ovs(YZWy>541qHa~)`E}KvpHac^3!YDUp70#^9Q33;J3Lo=mV4%V zwAxo|zft>A?bEgIs~xWGuf4l=OKq(7vf4Q{zpnXl&DUz4uld88v6`bbJvDdKY^n*> z=rxViZ&ZK3`YYAXRX)TP7gyI+y;k)~)t9QCt$MQRRMi7j?Nz&~ zuC4M_Ev}khRqKAk{S)^Y_gCC6xj*H8%KaYqJKYbuvu?w^%iZRVx>vX_ayPkt>-xFt zd#!Wms`tcsQw#Myt*H_nj{&}U(d*mAHQ=R7rOO|_&Ty1~)(ZYoH$W`{I zA9}vhcw`Nqs_Lsfp6_G(^B##?|FhQfJ=X#6k(l+V#`E0)9vZbiReS!a_Hpl#i2dmw zs{Y1%By4{=qy5BtBxHa3j_V2Uk)ZwQA8SUvM*{YzZ@K=$d&F;l`nLNW-XlKy(<|}~ zS6ZK{Jm2(!Y_;{t?fHiLIq#8H>yyj#vg=gikyU)+B{a|9V+!#exkCNVs^5CPzGlpO zWTo}#zdT=Sd7}Qv3O?1TmSyG=dZm-mRWcG+Vi)r7raLZ?N6Mx1$Nt~oVN4qw$C_i=h|(bb=v0JZEKyjd3M`Qr|lfO z?U>Ux*KT{C(>BL$`@GZEVz+(4X=}FIwmWT2cH13JTch3fdrlk6xh4DGciI~4w$C|j z^>*8HPFtPbcB9kgvD-E{ZMAmWMyHJcDC>JSIc?Q;+h00uRd(A4oi?}K_93UuWw$-) zv}tzRhsWCvKV-MP;ItjG+g@_o9<9pN%w_WSB4ccu9r|qEK zc7xM)z-~)BZTH!22c5P7yX}6bt>13@GpDW3Zu?(OTd&>rNvG{zyX_gLt;cSA)@jSy zZJ&19y6v{jPFt7Vw$5qmwA=PLZTs!Ey-wRbcAMd}b=YnFPFuU(cAwL>&u%;Iv}NqJ zk2-Cp-S!7gTiR~>-%eY~Zd>oPCGEC0r_He2u6Nq*w%gwAwC%OqZgSf0vfH*gZFkyj z+nlyL?6%!b+gt3m+w28(?%~_*wv^L$o88vswB2gA9dO!ivDZ}7Q5|f zr|m|&?T?+d8|=2XIBlElw%eVyO?KN~IBnP4Z5gL+quqA5)7ECUC7renc3Y>@w%%?t zowjv$+dijlt=-n)v?c7e{Z89;c3Y3rCc2c`e|w!a(Wq2gyVE9mm1?`kX%p>AwPl?) z(Xmupx6>wymTJ4#X%lrzwe>k|qI9XY2b?xhy;R$P(Kkr)^yS`(3APT>pE* zX&cx7KH#+F^}qk{T$T9X+|TuV=;em`!=nG8yT9RCQ-4_WKK}i>Cs==2^gZ?O@Z7_B zJ@0i-G?DC4XQR1?^LpOvo|w~?*YjTYM4Yy~p7**Z?zH9gyw^P;yRH7P=y`nKzk34p zhef~R-@o+uy@y4wbJthB=J6R%c@K+5$ERO-u3Y&>{bAANxbNRQtLqPo4#&TL?rE(* zEV>*2{+VZ$_ps<}{Kii`%d39uJuKRq`g8@Ka-yfHPb=h;XlUxw%BmmN=R`N-8UN~8 zR-Y4{jDP=&=kmF^ye{^t=c2^Zn?69e+qWuW|nWV2jp#Pt*6Cu50|$#y#G{4X-p@QU6lCw{DN;a~@aiH8l@c zf35n`sy*(!~g*v-?~(eDGcWd&rwxJR;r#6}@X2hiyzMw8W}%TnsAc#Ea`&wb8VzW6#wq zz$Dil%PHfV!VezEP((CJ1^Q$thAooNH)=VCQt1>9;Z{F!_`a~;Xbq>+*ikcatX2dY zwwfV)3B(x@a+r6cD$jW}Sp)q9e4VE4$y+zdJN$!X(k& zL2#y&2fsesZ?)M2#?{gGMM87cHL>xVssimb^M(oDiIAZYAvB-L)wl%s&mRp&31RRN zdsHr{F#pvQ=oBZ1cny?k$`bTaZ!S6_t^ySbIlXuAQ@F3MqkF%R1pIm&vjbf{;+IW4 zaqX|Z!=#u5IuW|zAT`bLeGx1ZqZBbNYD zK;Kh=_=6kFRF;tZefowD-XTLIzU60LzOK_q?O&l&eL7-Kd#MO;yE||@?#}94#jCfSac-^YlMD}u^-qTV3=ACUK1O^z z5)S&J5k?0I1A%f$8^xFdxKVv7?8zP;i4pNQRI<#3CLQNeWW8&}S%!EBZxr4T4&12961Qs41Lp zl6t~gPEh7qvEvi=7h|74A_do?<;P4xIs1G+5|p|#J7{$3yQQFgm)YIV(CIb@&oXdI zmkkM~AZ$`OPuP$ooZQrjo5z z;S{}e`a%YXTztNnXFTRUW3H$=~UAQ}o1ofJr+)<|Ro zUdFhAhglrWETpN)Ard}{obT{hnVVAgda3WvQR^Q@@8VOI000#7|L11 z-)c%2v$%O9X&*VYA<|X}Q3{59u>g^MXLTwPe@1qdnn;=|X1~0#X5Ywp49ErYMyhMM zIB&Gp$p#u9C;r_=Pe)&3>@(_iSNpfW_yc4v*ZP;F$~!Sh>3Av~GWTxYdi`D^OX90< z*m3>Uja3hhNQJirG9*jCX|T*U`6Qhu>w2y5JF4_J%P_emX%s)gSpsBeW>~C=m`5$o zWHJ&&;`hf8NCes8SGEF1){*|QXkIGF*$b_ z5W6Lfnlpu%<_)L)W{Bu7NzKFCi@Vq`lOY0Y{jsD$P9Nd#y+rO1fTe!BwO_Q}R(WJ= zxV6jZ>o_td9_lQ(dvtmhPQ1RpR$G*}57KrUM?$7onJ4qaFI#mcOt$kr(f*uJF zK+48%q&qyjTZgFp>^MlY7@& zX-j(gyF>4J@gtIUDknK>DT+&G6q{$zzdC5mzAt|^Vh$x5Sszrgx^&>#bw!zdfe107 z`DFE$Cking8eBHVFX3l&S|FUEo1&>mJVrcHh^Ui54BdP(9h?WNbQ|_0y!DogUInNn z8s9P^1=Z9DbGcOPK|$wfWd>Mypj$V)`^+vm1~JScx(c`MThQZb|Feb*5TIOlq?ate zuCZ3m|L18#8h(AP=`D>P@&3fSsp0qP&(zPa+v@o!(f@bV{7&_+t8cG**8NrYjjktM z+qn6^@h5k~*cL{`EfQrhAsd$6D}Pe8qVG5$l6FY`ZQH#A*4b!Vw%=T&Z-dh?t#8bl zt5^}4S-be(y{7A3_k7|%hOBGimRe?UCX={J{gokunLnv?I1`MMQAS`3dHDp3m`Rdk zW6%cp{mD$ZbDtbiIc=!4Qj}pbcdR64wcC)yyld=6`f8c88rY$P>J09TaO*j|OL*Ou z?R$1@-=^q~>9$&^e;<-6i4*>{`2R_x4@-hCN%iZ`-Z6(H~p*I{DTY zo>q~479^J8a7gxoh`x3Eo}1gYwsH5?w)JbbZN6zw8%Ve9Y1^_*&*M@OH&2oDOZqQi zKKwROlVOv9GhYa;CP{uU3F>9ys0w9`evN%0Y^h?K54dte+DYE>(y{9i_9f1`Wy^Zf zG2!2{ZTIHgTiP}>|6U=$^DZ@>B0(8b6H)sZ4>)%F2uO-^vh@?(7Y>J0wN87=BYS)bt*`> zH({o}bl5~+2&JPWZ=l&n$>J!ZyjsfuTa;}9^I6L4|5>=`UV;Vd-MOpBHV8tQQN^LC zRoeB|>NsKMQ|6~_W81b3Z99b*p#bF0H4q}e2GRZENA$GO&y}p}{*L}${$&j4>1DtrO&-13 zTMNL8R0hlR0EWn5>CGlPs=j)(5TW)C?O$qcA&fAB`2>B1v$GLMW&&~ShHQqwCD)=X zH%Y#~^AI`r`>cc$l}&hVLvH<80*L#qMM?HNdqRmk)n-0%xCS;#sO-ipW@ZeZeP*iP zOk=yvC!grH^^=Vu9Jvyk{DYe7U5g+8IkJ{(?4c#$Ag2^RIeE!Alo!E}kQ&6uxClkl zG15lM*#Yuzp$=r^%&`(d@ zwvn~lu5a7YwoBi-d6#P2w0+B#+iuyueS^d)Kl)!IT|?IOyu?*113E~6n}MomVAYQZ zk3c9bg9g18lA9EXEd+T^I$(&BHL%Nx2PAI>9iM$0$FAi)?wsCxNE)o)FG=r`4xnE@ zAgL{D^exLe>?S^2{*}OLpL&yjda8{#k?RGC>xQI{HQofp!t{s9w18y9B)=&`f>R(w z1S=M4+43fN6FYsMb%Z0bmBAevz3n@S_vq5GYj_j2+gWD^dtiVuK+VmoyuQ4-7K@OoC@gu#1p%3~xtta)?A;vsRMDFo;`UwZeV1@t=?6N<+hR@8 z@lWtE**PG_BG;pbKmSk2SFYMuUCmV=zBLskjT^s1&rfG?ev;(9B?MY5iHRX&k{a@@xrX!M(Ux42v<;(kpV zM!KL222(J#MNN!2nC=-EA@&?ZOg>J$oYkxtH~OW|vN7dxAKow)Ma#dk9PYzw?So^{ zc<=>Ek~7?qcGsibOS24Kxspde;{H=zv?MdVO4KAaBgj=mPohs?%TmGpWOD9jW&G~Y z`$``8-J$pEevU1x^^J;fZgtta^8XX_1Wx7`K8_K-FO@x@zwl|CIr|5*@(*jFeL2kbp$6klKDHcy*$cv&;1ejU)o+e#dE$ae?WAbq<9W$RbV)_4b zTFZ{+KWM(FX|VBojaPb)5`BM3{R4I1tc!V0*Z!z>UCk5Ke^b4(>O@u8-R}Au*K#eV z*82aB3tSC1G5{4bOR?T1PtO|wtbW8ug0&IS5+~6q@xjdmkz8}H>+t!5upy{xT05M? zWS9PAwe_=e^3hFq7lZ#&eB+FW0zzu@o(jIaq_$^8@tM83<{-$oWU!ASxD9} z3Csx2T1jzDN5}zm3*W@;jZUUH^uf^T07DKUe+sk*pn{l%Z;0YJ+%Gy4CPv3yi z30a6M_g{bVcbaw0Xk)I|G<@ASH3K2&cj8GxBe2Fx3J|HGa013Sn+C{8#I{2=lMx}= zHc7TyAP#+CCdE306}-$~5KkLk1(h{}O993-%Osa4CfGB2y=_k|Uf7jdUglK_vexQf za^-%y@lSaLxoV@@AI*KtVtxrW;%v}VH#mR z1dXz*nf2&AMi^D{R6k39`1->`%b?ELI=VrOKQ5*7sw1vaz#TEdOVxC%Je0h|FIlq4kPK8XTIndh& z8K5io`>mg5Xvp=ZGW8@;1 zGfgrmCPK7RIh7F|kgG=J@O+(hG8JI+lm#2f#7+(oM-ql?hb_)ema`8smQ+acxP4HRpm!p=#hdtr7ui}LZ^EmX7?o44(ko;tI}_W| zD_HL*PVBI7Hm~c=lBe6NFYh(eE7T%1_v>(`<(D3k2X zX7_gvcIz2pPdGgmBHoeM_Ppx50p*Gc$Koh0@H#**0O<%!FLA?!Oo~HKS*IL>!@*1l z2%ZSBd#FJydGY6r$`MyFyIAoR_9&L`%(>LsUxe9T$U{=V6_&W(f_c-Vc4u)7w~AHW z6vnVfo-r&L3qqKXR;cnSB<_*XsEumE#%@cpAQN6BS-5}}O7A)X(}_W0WhXQR3pYz9 z>G?4Z7jUHG$sv#b>|zTC@?EXj0NuI9(MVZ@_2Y7zh_HZ$un^&zUDFg;I4>~h^`da4 zi@@>*dav7!q7ep4jIEFE0HtUP?GV23d(Uti&di`K!%l1NqK$82b+Mjww>a^7T(q0YaB=t zJ~4>C(VH(Zu**((2ik6{> z%jjim3vwx2x7+KM^Z!Mfp|uRQc$yz-`nRV2jsHme|ChZR8y>9xUj6-bpR2pt^C{2D z+CQoJubKy{zgZosdb|6F?v3QBU&ybW{U;YbaVr8@Dtm~>GckUl@Yukr<70jF`$Id8 zepZS7dS83?K;omX#)N9h)&9WG=MuXh*Tgo&G8-rYlC@iftR@m_ROI4&ozfO?CBI>U06V-4){VJIY`gd~o{{f{YRXA7si5 zXNW{%)fFdSJRAtdFldVWrod+@TI2Xup4esMbC*t%6{Yekv@V_V^TO`bo=M#Gikg?J zUoo(Sm=N1zyn*CZ2x_CGiWpdP{PZF$S)6A2IfDd>x|-b|`jS2C-*Oy%Jtl<$-(i%&4$2;Ea9wdreL|0!*eQw z3oav>L-+CP+3rrmn!F)|6g{zh3L)K8Mo2ItlWfr0kug1Y76KqF?2(oymSePSEJvpj+&V{m;L;8bMl>gdL#KLK}6dzauwVInL*Y$84tWEv--NsW3}{tI(; zC$^5SxFvJ6fEH}Ly9$=L;_tjKVVqL4rsWA(wUS}xsQ9g=>mYk1?h_*UDDKjv&*G@! z<*n2AI2QMbE#p{9-o6|bzl`l2?Phnjs~AhSbQ|N^AArU)5`mwP6*fbNZ4&k`3~^Y8 zlRmo(@~diIB8N^$w3`aPEuCTIKm^yB1f~{$Kdyv#wmd=N58PxS#X=41T!?@KJaTAf zP-Z55k*Ez|LYKr(+#m~)82gHK3w8LjI2((0L0`cxh?li+04Hv{TlGmIxkLTUp-@Hz zT2?p$Q7pkd)(70ObeZ)5*3%f;bvT;jY(nxCF$ly@rP0+xX_8Zf@{s^41)jnM`NOr^ z!2^w%6PuBqN^UHT>%5|50K+*gU1%P}+XfL{%9PmC-Y0Kk{>%0Ln-(U7FEUCnlx=2E zwy$}Ox${nl>0NEko{|XCT$S@x5=9^g&wDewAXtkzQ9WxxQ86KYM8Yns@O+QL$2z?#>wa70mlfDUmLJ0IO@f` zVORTI4gX9>%Jn|&-2^uK@bMEgNL4E%F2=ebYFCWvCt-9A82W5fcw6vrzUw!`&XsS-Ev(c2Q?B#l=fQGpk&HXY+h^q;Z{Ts%8CntY2rzA!lls)1WLUHO( z6bOX_l6CL{M*WGkz);b|(;Fm#UF}A1kAAtnL9|6ZP>em zF@mDv6_n+SAF(kPf(dZESJOw0l!PslX@Q9q7-=WqctjgnHiz%xbV8A*IOjg0xg=VK zE`jx%VM0_}Ar7)$EPBGm#_WmfY#60ov%SpxEil9u!#JqsZz|+B$g>QPlbG6T_rqR* z#FdG4pBfF<+F$7|S(VF-hFAglfALpp?|xv}90}cK|0Fb-atbIEDdIT&Y@I}R!}CdD z2OEVf8Bnw4JHR^sAJtmmUTA)_>6cBZ#^=5N;N8{msfNY%2kRT^-s^eYv%B_>Yj3If z&zcWc|EBt;s*kx}aqn<_(X~`NYHgJNU$41KMq1bgR0fpTZ{=sgd7|K?jkOOK^se>} z)^|xS?n|_9wW`GxWH;2ml!A1g^c9J}jm0P&hmkoQj*~(|c1k)-cv1Po1W(U97l{(E zxDu~!%;_V|09;|&!KVcB>VH^NtV&sPyF)n?!Fau-R9O$2+T@FMkuR;AC z@y|*;KK#|p8JtPwVi#qlD!?dKd$B*QWOW&7vd2@gE+iJ^?W}cqQ+@ska1JPr85qub~q3b~isbY}I_g-Eo~t8c7-iFu2W#GpDG1nC5Ia;TNV zL69IxRzPT5JG%B+!y8bo2MpX0)(J;)pEi$3Svhr1C>>je>q`Mqj56Eb-$!oM1?fU8 zt6x!4K(!<3n-n<_2?@2qWWaA)A7JsO_7gnr@_#5zLedXaU>JLWD6Tdk(7OrXOo|N7%EnG)~jIN*Zk2LTyDxA9XWhNfHMY{eN74r6V79iRmiRK0nPz#g zvK$i;fr;H>MNr3LFP7tlBUKebELe++A)a?>)zOe-43OI%_OYpvr<2CD1M9Y=>Vmy& zXn1~+w;|$rwnE&;A?hP;8)B*6mG`BLpPZEx3shq{RXI}B-lILWO{dasj5=uPu&Cvf z2IX|Xo<^!{9Je{{#>oe~4HEaLmGGc^6Sa+^*acK z$@X^a!|+2;kKSfrB9{^^VF?ltZ+SgZ(v zB|wD48dDGY5^sAzZF+^zZw=e6|Mji&AAiq~)Xls6#6xxmlsS}JMA$_gP-sJ~`f=go z6K&6{uUt}dCX@7IGlTX8?i~`Qsr-pDPPz#vNKA52-%qObs9qqjU09}NDYq(n&Sx~w zIdKTVw3b?XMKB$u8>la;vbo7YWeFeXB!VXKo*$OT#C3z~qjtMgnSh{OYN`s8KkpEy zi~|-RNF6c+SXkB{&R0rlm4*9)6AyxEt-@5ac1?yULQaVU?XcH>^+f--i>@2{eH8jeXv)1z7X9tt6eYP5)tW=`AFquOfd$> z${3!q5PBx3T$B9&j!t6B`i)e(u)LHYy5Ph?gl5qu6ipu)q2=~apMS?dPtRc0hYO+1 zulg|h3^n>#?MV?N*vKD=Qnre^MqvVca6?SC-XJ4&$|Al5+l>|2uc~ic+gQ_c;sDa} zmv*Sw1lKZX3(kV#E)IonFr_*Zsm@(gu_i30&uqNU)&9h9-pw{I*Y)dNZ^y#V0Ht0$ zm5~EMi$)?8^9hZ_HI4V5xR0;AzWh!@NOa-RNqr?eb9oL2TVw4L8|U_3=5MD-d|<)1 zd!Oa2smzB521j(B!Ggn7el4qc>xlureDn0boa!?rU(Q;K>fAe!YA^roQoe`dMlAp0 zQOh#LJ|yS=cI_ux%Rjb!rsZ@?drQ3Kyyjmtf2H|j&F^S_OY^Fx-!y%z>6xZSo4T5A zXj%rJ|92Wc-}qjb{P#2l8mqkD_WqG~$a|-EjdwxAYYl%3XaBfsA;Mwh2?P;j}VeO~k;7`|HS9?*- z>os4m`Qw@sH61k@Yc8q&RrSl&zh8Z{+Ni#&`uwV2R{d?&$EqH#x~(cyH3wGxKX-q? zeaL;AJK{da^;0YoA96kDy4@9V&EbVgewGYxsMqTJRaJHF`mIK9pXw^TRo@6vM9S2D z{|))`drOAbPj%OeI|v)mKD=mno!o`yRPI^Z^liHKq&~bhe~+uo_sKo`mkcMS_%f-M z2{+D@ONOtT;x4=x^5@u+;cKV5Yxr3z0cao8hp(9eRBfU*F=x^6)%jb>z1zw+R=%N) z>cdw}@ff*h<>KKrc|7G_U!?frj*LDWpW-8(wDV{^tKY#Ww8jj|lQw}qu z=5MtpmJCPo4=Q($1xWjyMZ@7Ko>cwQ>Yr-wUpyR|0+RNLL;PuK9S+J(m}1I(UE=5# zH9+mZwf8L=4ovaIvH7w2+9QjG{Zrf{b-c9qE*kbtagWq>(H_@_ugu?5u5T9fEa+LO z53io$7W0&O>YOFRt#Zp`6UrKK!}{>5DIT9=fr0c%|GjnKVC< zQ3Q{P{NLJ`KD=UzN6!D7`G2!hA6`DiEiymjmk%#f-|DU_C#S@dI~DU%-Cy?T!DkMZ=fo;goxIfulXLYWNbl zhYl|Hpu`J*{e;XH`|s4M;fpJ{J-lf6qA3uli8Hcj_`)gfAvN$<+KDB@7sx%640$W+ zRy(c_pPzqHxp#4W+x6|{MZ*iG_%a3PoePK0%imM3k1oFd;`^5jpF0Jd{FXMnXn6h< z-=#LIV~d98O>xiaS607*S~z^p6!%m=UH!E7c71qm{+@ELF7M@8G(2aD$2_P#NZrgu z!!1+X1AEtN+L1-W%~Rat-QD|GHKm_D*rjxogi| z8(uuzAh$3w$~}cx0{$cx4|AfQ{HCw|O#AB34(Y>nQ+(MCu^VC!E*|zw^&GYGCiLOj zDW2mx;5xvvRWrpc1HJ*@#rkmd6t`T`e@Xv2`f$}0w@~Hh*+G5SJ;g2V=iJYMg{WAi zQk4^+>y+!%vcfR!6t`UPoeRFxv+CIWa?51v-bV)h;^Xu0|4t(Rw|~{K!KrS~ld9X~ z>XF6A4$AG5NX+%M=lQc@)v*IpJ@eFJOH;}JeVKmjKDiy;w_Hbc9PBvQr5_uZ;+7@L zmn`?_$NHzZMQXaO(2w;^af>LKo%*rfDQ;QUzOH@0e(c^UZjn9pT>V(j6t@KM`*TZn zid$sJ@J8KJ+@hYc_*j?RGD&w}oaYa(-8sc`(pRUiHWwe;KgDybZl#~@nc_J$pRD<0 zdeyNGxn;7!m#4tAsW6*X9c!QJ_B;`#O-O01I<{}B+w)|PHtFNt`mxLucxBDss~ySz`@_D%0x zb?ok`ZqK`iZ8z~w{n*~K0ARe`HN`DAFTQ#4?fS7hr?_SAV{;#?lk@)tTAS8#XY(hT z&uu!``1g%Vz4tf#uwi@sr|TQ*lAgcx_-l{Ue5+=8b$``gS1otH!}Y2wroG6oI6rS4 ztH*>y z{e=eC$0t!Gp@vI_FnZ!d!8S@7R)_K9=jw~>$9R$*@h0fhKAhYF>yPpY>?t4vT@l>9OS_*(6aaT)om@rXEXCI z@ID)i`-GAmBR7Fl5r}=r+sr_NPk;)dq$2#;I+#?#kQGp_L|8}k#o{sXJmyW!G8^o< zFe%Ew2IGE+eT+V-S!x!84PFjPY~N9TiVW-|X{A0oJ|eN%B<2z`0Dt*(P+E@ceAqiE zePiN$42#KgnzHn-hf%hDmA=tT_QLKts7O|t=aiM~ykTF!G@w`{F+>^$G4K+M z9te_fO6}*fO4d$%v@nZgSC6^CY?-B%M{p|1N~kLI{KV_7?IK(^1r_ZE$tw`?-qLsP zkab;`Sf7wS(l8NI@jVSa0JOst&xnwf2Bl91+JH=kG}&mmum+i<@Ng=^654Aqo93HXI5Ab8ZRycx-xN%m1s5hF}!o|STfNKoX@y&45~yk z<5?pq1Rgb}0Tf?!K^BCFcI9btg<8X*2&kI)9`=udWl2QqiwZ*=p(4F{A9T*94%u&C z`yFq%PPE+KfpF!TxIM8j~ylSL6;c`!h zh%!mSEveRgYng%unq;u6xf(k|E0+&g6JQzAcn2K=M9%2JkZgZ z&Z7et1cnM%I7RG`&#-VQA|Das{L>F2Mio$AW_7pHTseOR2u+cZgBarhyi%HlY1i=|E_-+=e+_8QY}^qEo7C`Ty-bJj z><|h@?vP^e%J@S>(3K0^$bW(CkFYWjBazP(R?FwyhTO8#;xJXd#Azb+uM;k)OmDVJ zF++iO0@Mq&Pi@@6RDr$?w{3*f4*YhM&xXQ{$V_Gvg_|dzH1M=oP;tx`tn@&gfBJq# zq3Y~nHZ&Q9g(_E2m~04$3$9Juj3%T24YCp)A9-&V5|wKrY|U@GQkVDH6cy7A9J)#P zt10jv zOQ3<88udY;5{A!!bO`dVDD57IiXYqxPefFChL3Sf%T6C)w5_+8YGfg>cNDekd5c#P zA-?hjZAMgm`4*FMHQjwHR_XVM^V1&{9=_xEjF3j4uH83Q9qu6jmMKC&j)W*eT?}(P zn_()0mp#RV&9o|Fa6%^uGGvsn?mqDvBU#wRfHe?PWtANT zbCdnzY}V0j#yy5q4P&>)pAXf`4uikaMiJ6Ie`q01{hi7?M&?jxlcA9zApvJR{JD_p z5PCz*KqiU6q0~_G1oBHuqG#?I``nN=472YAr~5&8r9xPu?OGx&Mi>!wf*p%!VmU$F zZkk2V`uY^4?&^2F0^JMcw+O%|vks}j0VUZA1a$_8%z!3KVUm1Mw9hEa5OjM%e?w!Q zyYO@$L(@vGE8646ho-$F+Z`U>-A>@1PJrO4LReZZaht9>6|G!ypW)(SyNDCkqsSJM zQCYpi#LR|Lv5CVGO@VDn0-h~+c`cU>r5AMZNz_M~I1|x@cDIvHE|Tj)6UK&{%y5d&ED$gs#jO_xWDXfbnW4n{;&Mx7M?tWQ1bzx76d24d}8p5 z#farZy1VXi?O*ZxKh>=34Uw8N)V`wFn~ywvGI(I_qO=Bye!_}H834-BlsPQO63K%V z4YG>R4q5bY$|7+Y^Cx&xR52A-Y#ngudG#~#7?yt$2%s4o)S+-do9%1w=wGF;qe7F> zU5wX0FkD=7CJ^VaP5hLPEFfRhpC;!QdMxIBI8JzcS%T>auu1kSpn_Zo>}yVnrncRg zSZ9OH8K-wprd5Ad-zR+HS$!uw78G-VF_y$~mVDR#LV*{&0Q3iN!2*_$FN3_UOpFYo zG@uj&gg1Ol^0leQWUrfhDKpfWwEH2Tv&4^i19!o5+eZ;l1UGY z`q|;bu>c`%L88IRshGtOg~fKl&{%U);?=C7p_bOO$~dq^*vDA%H};yQ-gdC37f!@d z$=>k1nhSP0rJ6GYD@GU?P}0XJYy(wMhSMb>chpde5$jy;6kLoRiXsRc#YCe9wg|Z4 zq^Nh32v}Gr@RGni+6NS|&s^2r62>+On!=S}Jh8PPqi({$+*5NViBSWaQOXEVCl3muAawZA z40(rsA#y8Q5TsaOoP+Y+t%@Lsz%Dr{N}hsfua;+72?}y=iy_vWiKFClUNAXr6A4Ok z0Yv=~GVKfs;t>~Kj#+R5KrBWDMz<{hbe$B{ZW0-GP-AsMkNOIFlmvi+#Z+HOs*VAJ zBiwByqeaOaA$XUq-V75}ABT>GG(b^@f^eLwp0rqKyaGbhwF*EK$x@IpVAh}Z(I08qo$zg?n33~EfR`I2&V~JH{^|$@0@41Fs?r%>4pm_fwiTkXQAjQ+RSqUYL7CT56oHdj z8^uJ~w6+$Ykd;yF1HOXvj+!DArLtMuoq~Zt-?9S|?5mT#*G~Lw$&NT=a+8CTp^p0D z*(jA=w~cywvMWf#Ek~OMB6G5f;eWt6nA_t@oqld{&KENL)xZj^ z#h=sHk)rA?MCg(iV#3q1&mqpwGlwfedfCc%We2*`LOXcRzc0Tb;9!noLPGrr!8-%(D47!IPG%rorbdqikE_Kp3cG9Gf2BR} zqszO7sv90W*@?In-EgUzD&<29)_(P#7;DUxKG!`ze1@oKbxpKMs_1(jZ{DWEn@?gl zLEz+HQ!^$4Jx&y}Fa~1|!x>1FJIy?6f(rFsq~^+g04T>{DFCw!0RINK=Q}2afG{F&F3mI>K`_~xmS4}Gb`^>$P-rLbnOqFzQ24fGQo# zoI2ER$i%3GZDJ#r{Cw&eD-8Kl*f@r&lO13va4*?oPEHKvFa&RJ+p$SsG${<~22y>7 z><~D+NLmp7bGWG}`6xwG;T>zWk_#-2O2Mdaa6fRe9TdtzSlSpW!%Frap`+Tczv0F-F&Q4&mKeCqFwJ7lkq zqETC2u2^Umdgc6YXkXJ>&a^z&GS<@HvaMwWOaR|&{?q37H6Licsd;hJ8%`$6v^?{=@=@biWj8s62AZMd=FqWV|s|Ga**{@(hn z^(*SD>%L$2`MUSk-CuWGU8t_b^Qz}L&vDOw&sClUR26uZnEzXAgSE{y|6KFuHBZ(I z)!bEcb)dM9QY4xJxb^v#|hhW^~&!xv#NeBtk(CsS9ny{pB zhkMC!6}-*cO$hE)H&_qRzM&si@!ONgTk!rr)m>d|9Mu(`T|0LE9EXa(lq8POaBI`K@#5FY56J)obbGN zk453#xG2k#k~K-^liN009H2KHW;=UgtIwi9Zww(zr0|#1_%vD+=*^i8!iQJz!L*|A zZj2%82CJT}dX^ZCV!F9TyX*C*C%^u=v}m`aKgD-*`+H~+5oytGJyi`B#d<>r*3Hy> zR`Xed<>I_qJtl8V-e|B~m^Z5j0i*gX3i9TetoWf&{IJ2IFmH|~WVl7kg?O_f9_f*3 zv?#)xXLmX_yBe*pICGFC#~wgPq8M+Ur1xGC-g_nEw|#e3-qkL0w(W)vyDY6V2AmdNKs#?zmk{`9d%i-N{EV{2!m zMH?*&8|QSgjkA5HMS4rrW)90D|sHd#0$vjMfN)#X_5SAQWQCavMy||oxuD4eH`{-B$LS z6g)F27r08*6mpQdBy+#?IB&QwO zYf>aRuluv#K-s0?ze-Mv?i5wd>;9dB9hjUJ-F0V9vXv$J4)mOkns>lEfU8pIIq#~M<0RJhNKQNAHz^Dq-C0+a zzV~-j=iPX~Z4qb8Y^AuAzKNabQhcj`cq6hum5xPwtT0>;$^x3ch>!SUdO+KyG)93uVwGBq?f);i>`0gk(p=8 zm1e-tYyvjPX(LT01-kP>(Xa0Y)0l9%(WLlxP81|OU#G5QM3aMXr=Gvz&DyskK9eHc zA%_{2t*e4{wZWVuH^A9GkyKWndBW+zGT8Vh$KLT^kvLBJa5NS^ZNcYTP3AGD6HAci zpKp^-ug{#QaJe0QJNi5cpLx`g#Jn+@PqxE6Li#LU*JwujoY!ZLSCVo4E#dlGK}0TP2q*^0rG;yR@_Bek^d_%o92?@g~DgS7Xhe9pxrJ@w^T$(_{d`fqbSZj|J2?C z3n?J@P~t6xs-SIvfT5~CiVe0#0nG>k`6crRBq;j}Xa^{rmR+&@WF3lemt?4^tX|Dv zGzKnKN7YuqIPv_h?RR<9(AbsFF4Ywyr@zOAG1nD#mVPyr? z;+eKK85gMm87(My>#gq-sAMA@d& z$u;_H&{5WP1a&s8%W#U+?E{aO^f)n)!2<~7MGIiFN&sBLsPi4gK`kl^t*j=LriaKU z!M7JIJqk5Xtih%MXW%2ZJk_-=^;mcUweg0}%RM0(#F;WqYw$iBgCCGdxpt6eqRL(x zm6+g@D;gIRW)zA+jO#B=LhIqxYaMKJj2l|6^^)uUt6brT(hdM9&gsG99cYUpRR+LN zPyv!MQYekjI`F*1bqN~NonO03C!lcG8WcutsAyP>-cq*%BsdvTIGcFH3+1X3po0RQ zAe@?zqiGaX#`FroXHn)@#?j4+whaOIK#PVE+cuVtLsh4yA_)d71zVg=Ytu;Rhz7_c zgO1d3p`~}g)$-lUwFN+Hks5~bi3)O!f}mo+{h_EjvU`x6qNG{u5Vso?XSOz+g=qOm z=@_&;Wmj}vm6qWl%8-IL?~W_9iBpIUs3mq@wDk{)ITg7yQFo*5Xn%go$I%5jjjH1$ z%Lhp*NT3J>L-1ad&jQ*d0(?UIiZ%`sz?tg~50@sO{lPV8AL=3O%wnzp^bpDQ-QaHT-d z0e}-u9f7)7Sxw+!XzfPg5)YJ)KuyYOvdT3KXXZ&+6*KaDZs}>pR`1fui`y2a2-O7& z#Sttas#1qiD4h=24&c}TKD2?cX+J(iIPfw5Vpiq@4St zW-IqZ-7~`rvuZ{Gtu8s}T37%5?_txV*VfEfwr_MnRnrrQHR0j)+`@P|>XB#9*Vl?I{hwl&x??9gVq&+v{X9zKb6 zFVxnGg;{PvaqE_J7~Gi%ZAct#PoknH*1;8`NE`A39hPK5m)TMpfNG=5Hxf27nK4m= zWGVu);*7PJ1=-kJSAo+#xfyZdP0U*nz7V(b@-iMI8jl{*Uf;mL^3BZsFFb1-5 zqwOFmZBMc=)z08kicf+&E!$DFl=|1GbLhX)IRxr1>?+A3A_FrKM%D(fX~=(VCln8S zJKxgT=8PvU@L;JAI@6N&w{sOPA;4YazZ(z(9fheWpuZEUo^{{9l+)TbJk`d`+cs=t5B@3t%oi(5vw)Ytu{?o!>( z&9830SpCK3hD{%Ay0+=?x_8$tdcRy3t^P@MvU(fp1q^$y;tgfB=QY%u*)9CRURNvr zx6ANu7leJJ&s}zPXZ*1A4WyZX#z>nJW2pW=n%8tCt#^;i=~~*xM9bNDA%`S;MejFy zA?HCs*u#<&=#ghqsu+9YC4eYo{~7Xs($ti8zB#Q^i6DSclPF%RyYdbj3CIf&wnTF+!u_5tRrPbo>1ijEv0u8Qh|N!D;MYO7o!PNNE~(p6@Sa zA^HJcknYgn&oen?mK~aViy3^ojr(o;O%$c-L5Se6XJv`x3<|2oG@wwre!rBcf&t0*7p`ZaiDY zijP7Pq7QpmK@Xx&gCeAxB%2XByxy_p5p1}40x}XD8Ib{H9tE3GW?(kwj)s^(&M%?Y zgX@luvI4AJJPw&L&KL(0BZK2ZU1GeqD=zL6V-c~tcYt6HN9jv$MFJ`m8M3Gwt|XV% zre*#ZD^66p_dam5f+)vbj@fg+qc{c`h$3wJ4avB?=oH-hH&1jL;5|I1hE6$4GQ*oK)AA1 z>?#gbkb>1##@a-S{da5n6nU}8o>{TtAmniU?N}EEwP$=l?CTmFNC0}&M*11x8e5+TWpJ8J`so$w@e8?yTK3!?C6% z5J!>#+?+qhcCSfe6U4(U4zgxIB(BY2Nx<@82QzmEnzVnN!aUXTOEZA+j51~WI#;B`ue&?j`4&X zG=vJb5x^rhd7$Z { + const authHeader = request.headers.authorization + const token = authHeader && authHeader.split(' ')[1] + + if (!token) { + reply.code(401).send({ error: 'Token requis' }) + return + } + + try { + const user = jwt.verify(token, JWT_SECRET) + request.user = user + } catch (err) { + reply.code(403).send({ error: 'Token invalide' }) + return + } +} + +// Route de login non protégée +fastify.post('/api/login', async (request, reply) => { + const { email, password } = request.body + + const user = await prisma.user.findUnique({ + where: { email } + }) + + if (!user) { + reply.code(401).send({ error: 'Email ou mot de passe incorrect' }) + return + } + + // Vérifier le mot de passe avec bcrypt + const validPassword = await bcrypt.compare(password, user.password) + if (!validPassword) { + reply.code(401).send({ error: 'Email ou mot de passe incorrect' }) + return + } + + const token = jwt.sign( + { + userId: user.id, + email: user.email, + role: user.role + }, + JWT_SECRET, + { expiresIn: '24h' } + ) + + return { token } +}) + +// Route de création d'utilisateur non protégée +fastify.register(userRoutes, { + prefix: '/api', + publicRoutes: true +}) + +// Route /me pour vérifier le token JWT +fastify.get('/api/me', async (request, reply) => { + const authHeader = request.headers.authorization + const token = authHeader && authHeader.split(' ')[1] + + if (!token) { + reply.code(401).send({ error: 'Token requis' }) + return + } + + try { + const user = jwt.verify(token, JWT_SECRET) + // Récupérer les infos user à jour depuis la DB + const currentUser = await prisma.user.findUnique({ + where: { id: user.userId }, + select: { + id: true, + email: true, + role: true + } + }) + return currentUser + } catch (err) { + reply.code(401).send({ error: 'Token invalide' }) + return + } +}) + +// Bloc des routes protégées +fastify.register(async (fastify) => { + fastify.addHook('preHandler', authenticateToken) + + // Routes existantes + fastify.register(customerRoutes, { prefix: '/api' }) + fastify.register(productRoutes, { prefix: '/api' }) + fastify.register(purchaseRoutes, { prefix: '/api' }) + fastify.register(artistRoutes, { prefix: '/api' }) + fastify.register(clientRoutes, { prefix: '/api' }) + // Nouvelle route users (protégée) + // fastify.register(userRoutes, { prefix: '/api' }) +}) + +// Démarrage du serveur +fastify.listen({ port: 3000, host: '0.0.0.0' }) \ No newline at end of file diff --git a/backend/src/prisma/migrations/20241213134627_init/migration.sql b/backend/src/prisma/migrations/20241213134627_init/migration.sql new file mode 100644 index 0000000..d18cfcd --- /dev/null +++ b/backend/src/prisma/migrations/20241213134627_init/migration.sql @@ -0,0 +1,12 @@ +-- CreateTable +CREATE TABLE "User" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "email" TEXT NOT NULL, + "password" TEXT NOT NULL, + "name" TEXT, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" DATETIME NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); diff --git a/backend/src/prisma/migrations/20241213150706_add_artists_customers_products_purchases_and_modify_users/migration.sql b/backend/src/prisma/migrations/20241213150706_add_artists_customers_products_purchases_and_modify_users/migration.sql new file mode 100644 index 0000000..d8d570d --- /dev/null +++ b/backend/src/prisma/migrations/20241213150706_add_artists_customers_products_purchases_and_modify_users/migration.sql @@ -0,0 +1,177 @@ +-- CreateTable +CREATE TABLE "Customer" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "civility" TEXT, + "name" TEXT NOT NULL, + "phone" TEXT, + "phoneSecondary" TEXT, + "email" TEXT, + "emailSecondary" TEXT, + "language" TEXT NOT NULL DEFAULT 'fr', + "isNpai" BOOLEAN NOT NULL DEFAULT false, + "origin" TEXT, + "comments" TEXT, + "additionalInterests" TEXT, + "street" TEXT, + "additionalStreet" TEXT, + "zipCode" TEXT, + "city" TEXT, + "country" TEXT, + "identityType" TEXT, + "identityNumber" TEXT, + "identityAuthority" TEXT, + "dateIdentityNumber" DATETIME, + "tvaIntra" TEXT, + "codeComptable" TEXT, + "codeComptableAchat" TEXT, + "contactFirstName" TEXT, + "contactLastName" TEXT, + "discr" TEXT NOT NULL DEFAULT 'professionalCustomer' +); + +-- CreateTable +CREATE TABLE "Category" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "name" TEXT NOT NULL, + "imageName" TEXT, + "isForPurchase" BOOLEAN NOT NULL DEFAULT false, + "position" INTEGER +); + +-- CreateTable +CREATE TABLE "Artist" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "firstName" TEXT, + "lastName" TEXT NOT NULL, + "dateBirth" DATETIME, + "dateDeath" DATETIME, + "imageName" TEXT, + "authenticityCertificate" TEXT, + "isPhare" BOOLEAN NOT NULL DEFAULT false, + "isCirca" BOOLEAN NOT NULL DEFAULT false +); + +-- CreateTable +CREATE TABLE "Product" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "code" TEXT NOT NULL, + "title" TEXT NOT NULL, + "acquisitionPrice" REAL NOT NULL, + "saleDepositPrice" REAL, + "dateFirstMeeting" DATETIME, + "dateAcquisition" DATETIME, + "width" REAL, + "height" REAL, + "depth" REAL, + "diametre" REAL, + "widthInch" REAL, + "heightInch" REAL, + "depthInch" REAL, + "diametreInch" REAL, + "encadrement" BOOLEAN NOT NULL DEFAULT false, + "collectionPerso" BOOLEAN NOT NULL DEFAULT false, + "venteDebout" BOOLEAN NOT NULL DEFAULT false, + "onWall" BOOLEAN NOT NULL DEFAULT false, + "isMultiple" BOOLEAN NOT NULL DEFAULT false, + "isCirca" BOOLEAN NOT NULL DEFAULT false, + "wantedPrice" REAL, + "wantedPriceMinimum" REAL, + "comments" TEXT, + "commentHistory" TEXT, + "imageName" TEXT, + "year" DATETIME, + "artistId" INTEGER NOT NULL, + "categoryId" INTEGER NOT NULL, + "typeId" INTEGER NOT NULL, + "stateId" INTEGER NOT NULL, + "acquisitionModeId" INTEGER NOT NULL, + "productParentId" INTEGER, + CONSTRAINT "Product_artistId_fkey" FOREIGN KEY ("artistId") REFERENCES "Artist" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Product_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Product_typeId_fkey" FOREIGN KEY ("typeId") REFERENCES "Type" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Product_stateId_fkey" FOREIGN KEY ("stateId") REFERENCES "State" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Product_acquisitionModeId_fkey" FOREIGN KEY ("acquisitionModeId") REFERENCES "AcquisitionMode" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Product_productParentId_fkey" FOREIGN KEY ("productParentId") REFERENCES "Product" ("id") ON DELETE SET NULL ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "Type" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "name" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "State" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "name" TEXT NOT NULL, + "color" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "AcquisitionMode" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "name" TEXT NOT NULL, + "type" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "Purchase" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "isGroupedPurchase" BOOLEAN NOT NULL DEFAULT false, + "location" TEXT, + "amountTotal" REAL NOT NULL, + "amountDecremented" REAL NOT NULL, + "fromDepotVente" BOOLEAN NOT NULL DEFAULT false, + "customerId" INTEGER NOT NULL, + "acquisitionModeId" INTEGER, + CONSTRAINT "Purchase_customerId_fkey" FOREIGN KEY ("customerId") REFERENCES "Customer" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Purchase_acquisitionModeId_fkey" FOREIGN KEY ("acquisitionModeId") REFERENCES "AcquisitionMode" ("id") ON DELETE SET NULL ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "PurchaseProduct" ( + "purchaseId" INTEGER NOT NULL, + "productId" INTEGER NOT NULL, + "acquisitionPrice" REAL NOT NULL, + "quantity" INTEGER, + + PRIMARY KEY ("purchaseId", "productId"), + CONSTRAINT "PurchaseProduct_purchaseId_fkey" FOREIGN KEY ("purchaseId") REFERENCES "Purchase" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "PurchaseProduct_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product" ("id") ON DELETE RESTRICT ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "_CategoryToCustomer" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL, + CONSTRAINT "_CategoryToCustomer_A_fkey" FOREIGN KEY ("A") REFERENCES "Category" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "_CategoryToCustomer_B_fkey" FOREIGN KEY ("B") REFERENCES "Customer" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); + +-- RedefineTables +PRAGMA defer_foreign_keys=ON; +PRAGMA foreign_keys=OFF; +CREATE TABLE "new_User" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "email" TEXT NOT NULL, + "password" TEXT NOT NULL, + "name" TEXT, + "role" TEXT NOT NULL DEFAULT 'USER', + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" DATETIME NOT NULL +); +INSERT INTO "new_User" ("createdAt", "email", "id", "name", "password", "updatedAt") SELECT "createdAt", "email", "id", "name", "password", "updatedAt" FROM "User"; +DROP TABLE "User"; +ALTER TABLE "new_User" RENAME TO "User"; +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); +PRAGMA foreign_keys=ON; +PRAGMA defer_foreign_keys=OFF; + +-- CreateIndex +CREATE UNIQUE INDEX "Product_code_key" ON "Product"("code"); + +-- CreateIndex +CREATE UNIQUE INDEX "_CategoryToCustomer_AB_unique" ON "_CategoryToCustomer"("A", "B"); + +-- CreateIndex +CREATE INDEX "_CategoryToCustomer_B_index" ON "_CategoryToCustomer"("B"); diff --git a/backend/src/prisma/migrations/20241213163715_add_clients/migration.sql b/backend/src/prisma/migrations/20241213163715_add_clients/migration.sql new file mode 100644 index 0000000..48eac87 --- /dev/null +++ b/backend/src/prisma/migrations/20241213163715_add_clients/migration.sql @@ -0,0 +1,58 @@ +-- CreateTable +CREATE TABLE "Client" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "name" TEXT NOT NULL +); + +-- RedefineTables +PRAGMA defer_foreign_keys=ON; +PRAGMA foreign_keys=OFF; +CREATE TABLE "new_Product" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "code" TEXT NOT NULL, + "title" TEXT NOT NULL, + "acquisitionPrice" REAL NOT NULL, + "saleDepositPrice" REAL, + "dateFirstMeeting" DATETIME, + "dateAcquisition" DATETIME, + "width" REAL, + "height" REAL, + "depth" REAL, + "diametre" REAL, + "widthInch" REAL, + "heightInch" REAL, + "depthInch" REAL, + "diametreInch" REAL, + "encadrement" BOOLEAN NOT NULL DEFAULT false, + "collectionPerso" BOOLEAN NOT NULL DEFAULT false, + "venteDebout" BOOLEAN NOT NULL DEFAULT false, + "onWall" BOOLEAN NOT NULL DEFAULT false, + "isMultiple" BOOLEAN NOT NULL DEFAULT false, + "isCirca" BOOLEAN NOT NULL DEFAULT false, + "wantedPrice" REAL, + "wantedPriceMinimum" REAL, + "comments" TEXT, + "commentHistory" TEXT, + "imageName" TEXT, + "year" DATETIME, + "artistId" INTEGER NOT NULL, + "categoryId" INTEGER NOT NULL, + "typeId" INTEGER NOT NULL, + "stateId" INTEGER NOT NULL, + "acquisitionModeId" INTEGER NOT NULL, + "clientId" INTEGER, + "productParentId" INTEGER, + CONSTRAINT "Product_artistId_fkey" FOREIGN KEY ("artistId") REFERENCES "Artist" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Product_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Product_typeId_fkey" FOREIGN KEY ("typeId") REFERENCES "Type" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Product_stateId_fkey" FOREIGN KEY ("stateId") REFERENCES "State" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Product_acquisitionModeId_fkey" FOREIGN KEY ("acquisitionModeId") REFERENCES "AcquisitionMode" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Product_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "Client" ("id") ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT "Product_productParentId_fkey" FOREIGN KEY ("productParentId") REFERENCES "Product" ("id") ON DELETE SET NULL ON UPDATE CASCADE +); +INSERT INTO "new_Product" ("acquisitionModeId", "acquisitionPrice", "artistId", "categoryId", "code", "collectionPerso", "commentHistory", "comments", "dateAcquisition", "dateFirstMeeting", "depth", "depthInch", "diametre", "diametreInch", "encadrement", "height", "heightInch", "id", "imageName", "isCirca", "isMultiple", "onWall", "productParentId", "saleDepositPrice", "stateId", "title", "typeId", "venteDebout", "wantedPrice", "wantedPriceMinimum", "width", "widthInch", "year") SELECT "acquisitionModeId", "acquisitionPrice", "artistId", "categoryId", "code", "collectionPerso", "commentHistory", "comments", "dateAcquisition", "dateFirstMeeting", "depth", "depthInch", "diametre", "diametreInch", "encadrement", "height", "heightInch", "id", "imageName", "isCirca", "isMultiple", "onWall", "productParentId", "saleDepositPrice", "stateId", "title", "typeId", "venteDebout", "wantedPrice", "wantedPriceMinimum", "width", "widthInch", "year" FROM "Product"; +DROP TABLE "Product"; +ALTER TABLE "new_Product" RENAME TO "Product"; +CREATE UNIQUE INDEX "Product_code_key" ON "Product"("code"); +PRAGMA foreign_keys=ON; +PRAGMA defer_foreign_keys=OFF; diff --git a/backend/src/prisma/migrations/20241213163916_add_url_on_clients/migration.sql b/backend/src/prisma/migrations/20241213163916_add_url_on_clients/migration.sql new file mode 100644 index 0000000..c34c1df --- /dev/null +++ b/backend/src/prisma/migrations/20241213163916_add_url_on_clients/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Client" ADD COLUMN "url" TEXT; diff --git a/backend/src/prisma/migrations/migration_lock.toml b/backend/src/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..e5e5c47 --- /dev/null +++ b/backend/src/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "sqlite" \ No newline at end of file diff --git a/backend/src/prisma/schema.prisma b/backend/src/prisma/schema.prisma new file mode 100644 index 0000000..1de1be2 --- /dev/null +++ b/backend/src/prisma/schema.prisma @@ -0,0 +1,176 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "sqlite" + url = "file:../data/db.sqlite" +} + +model Customer { + id Int @id @default(autoincrement()) + civility String? + name String + phone String? + phoneSecondary String? + email String? + emailSecondary String? + language String @default("fr") + isNpai Boolean @default(false) + origin String? + comments String? + additionalInterests String? + street String? + additionalStreet String? + zipCode String? + city String? + country String? + identityType String? + identityNumber String? + identityAuthority String? + dateIdentityNumber DateTime? + tvaIntra String? + codeComptable String? + codeComptableAchat String? + contactFirstName String? + contactLastName String? + discr String @default("professionalCustomer") + categories Category[] + purchases Purchase[] +} + +model Category { + id Int @id @default(autoincrement()) + name String + imageName String? + isForPurchase Boolean @default(false) + position Int? + customers Customer[] + products Product[] +} + +model Artist { + id Int @id @default(autoincrement()) + firstName String? + lastName String + dateBirth DateTime? + dateDeath DateTime? + imageName String? + authenticityCertificate String? + isPhare Boolean @default(false) + isCirca Boolean @default(false) + products Product[] +} + +model Client { + id Int @id @default(autoincrement()) + name String + products Product[] + url String? +} + +model Product { + id Int @id @default(autoincrement()) + code String @unique + title String + acquisitionPrice Float + saleDepositPrice Float? + dateFirstMeeting DateTime? + dateAcquisition DateTime? + width Float? + height Float? + depth Float? + diametre Float? + widthInch Float? + heightInch Float? + depthInch Float? + diametreInch Float? + encadrement Boolean @default(false) + collectionPerso Boolean @default(false) + venteDebout Boolean @default(false) + onWall Boolean @default(false) + isMultiple Boolean @default(false) + isCirca Boolean @default(false) + wantedPrice Float? + wantedPriceMinimum Float? + comments String? + commentHistory String? + imageName String? + year DateTime? + + artist Artist @relation(fields: [artistId], references: [id]) + artistId Int + category Category @relation(fields: [categoryId], references: [id]) + categoryId Int + type Type @relation(fields: [typeId], references: [id]) + typeId Int + state State @relation(fields: [stateId], references: [id]) + stateId Int + acquisitionMode AcquisitionMode @relation(fields: [acquisitionModeId], references: [id]) + acquisitionModeId Int + + client Client? @relation(fields: [clientId], references: [id]) + clientId Int? + + purchases PurchaseProduct[] + productParent Product? @relation("ProductToProduct", fields: [productParentId], references: [id]) + productParentId Int? + childProducts Product[] @relation("ProductToProduct") +} + +model Type { + id Int @id @default(autoincrement()) + name String + products Product[] +} + +model State { + id Int @id @default(autoincrement()) + name String + color String + products Product[] +} + +model AcquisitionMode { + id Int @id @default(autoincrement()) + name String + type String + products Product[] + purchases Purchase[] +} + +model Purchase { + id Int @id @default(autoincrement()) + isGroupedPurchase Boolean @default(false) + location String? + amountTotal Float + amountDecremented Float + fromDepotVente Boolean @default(false) + + customer Customer @relation(fields: [customerId], references: [id]) + customerId Int + acquisitionMode AcquisitionMode? @relation(fields: [acquisitionModeId], references: [id]) + acquisitionModeId Int? + products PurchaseProduct[] +} + +model PurchaseProduct { + purchase Purchase @relation(fields: [purchaseId], references: [id]) + purchaseId Int + product Product @relation(fields: [productId], references: [id]) + productId Int + acquisitionPrice Float + quantity Int? + + @@id([purchaseId, productId]) +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + password String + name String? + role String @default("USER") + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} \ No newline at end of file diff --git a/backend/src/routes/artists.js b/backend/src/routes/artists.js new file mode 100644 index 0000000..0c24ddf --- /dev/null +++ b/backend/src/routes/artists.js @@ -0,0 +1,16 @@ +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +module.exports = async function artistRoutes(fastify) { + fastify.post('/artists', async (request, reply) => { + try { + const artist = await prisma.artist.create({ + data: request.body + }) + return artist + } catch (error) { + reply.code(400).send({ error: error.message }) + } + }) +} \ No newline at end of file diff --git a/backend/src/routes/clients.js b/backend/src/routes/clients.js new file mode 100644 index 0000000..2579a48 --- /dev/null +++ b/backend/src/routes/clients.js @@ -0,0 +1,47 @@ +const { PrismaClient } = require('@prisma/client'); + +const prisma = new PrismaClient(); + +async function clientRoutes(fastify) { + // Create client + fastify.post('/clients', async (request, reply) => { + try { + const { name, url } = request.body; + const client = await prisma.client.create({ + data: { name, url } + }); + return client; + } catch (error) { + reply.code(400).send({ error: 'Failed to create client' }); + } + }); + + // Get all clients + fastify.get('/clients', async () => { + try { + return await prisma.client.findMany(); + } catch (error) { + throw new Error('Failed to fetch clients'); + } + }); + + // Get client by ID + fastify.get('/clients/:id', async (request, reply) => { + try { + const client = await prisma.client.findUnique({ + where: { id: parseInt(request.params.id) } + }); + + if (!client) { + reply.code(404).send({ error: 'Client not found' }); + return; + } + + return client; + } catch (error) { + reply.code(400).send({ error: 'Failed to fetch client' }); + } + }); +} + +module.exports = clientRoutes; \ No newline at end of file diff --git a/backend/src/routes/customers.js b/backend/src/routes/customers.js new file mode 100644 index 0000000..20dc069 --- /dev/null +++ b/backend/src/routes/customers.js @@ -0,0 +1,21 @@ +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +module.exports = async function customerRoutes(fastify) { + fastify.post('/customers', async (request, reply) => { + try { + const customer = await prisma.customer.create({ + data: { + ...request.body, + categories: { + connect: request.body.categoryIds?.map((id) => ({ id })) + } + } + }) + return customer + } catch (error) { + reply.code(400).send({ error: error.message }) + } + }) +} \ No newline at end of file diff --git a/backend/src/routes/products.js b/backend/src/routes/products.js new file mode 100644 index 0000000..30742ba --- /dev/null +++ b/backend/src/routes/products.js @@ -0,0 +1,25 @@ +const { PrismaClient } =require('@prisma/client') + +const prisma = new PrismaClient() + +module.exports = async function productRoutes(fastify) { + fastify.post('/products', async (request, reply) => { + try { + const product = await prisma.product.create({ + data: { + ...request.body, + artist: { connect: { id: request.body.artistId } }, + category: { connect: { id: request.body.categoryId } }, + type: { connect: { id: request.body.typeId } }, + state: { connect: { id: request.body.stateId } }, + acquisitionMode: { connect: { id: request.body.acquisitionModeId } }, + productParent: request.body.productParentId ? + { connect: { id: request.body.productParentId } } : undefined + } + }) + return product + } catch (error) { + reply.code(400).send({ error: error.message }) + } + }) +} \ No newline at end of file diff --git a/backend/src/routes/purchases.js b/backend/src/routes/purchases.js new file mode 100644 index 0000000..d6daa90 --- /dev/null +++ b/backend/src/routes/purchases.js @@ -0,0 +1,62 @@ +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +async function purchaseRoutes(fastify) { + fastify.post('/purchases', async (request, reply) => { + try { + const purchase = await prisma.purchase.create({ + data: { + ...request.body, + customer: { connect: { id: request.body.customerId } }, + acquisitionMode: request.body.acquisitionModeId ? + { connect: { id: request.body.acquisitionModeId } } : undefined, + products: { + create: request.body.products.map((product) => ({ + product: { connect: { id: product.productId } }, + acquisitionPrice: product.acquisitionPrice, + quantity: product.quantity + })) + } + }, + include: { + products: { + include: { + product: true + } + } + } + }) + return purchase + } catch (error) { + reply.code(400).send({ error: error.message }) + } + }) + + fastify.get('/purchases', async (request, reply) => { + try { + const purchases = await prisma.purchase.findMany({ + include: { + customer: true, + acquisitionMode: true, + products: { + include: { + product: { + include: { + artist: true, + category: true, + client: true, + } + } + } + }, + } + }) + return purchases + } catch (error) { + reply.code(400).send({ error: error.message }) + } + }) +} + +module.exports = purchaseRoutes \ No newline at end of file diff --git a/backend/src/routes/users.js b/backend/src/routes/users.js new file mode 100644 index 0000000..084462a --- /dev/null +++ b/backend/src/routes/users.js @@ -0,0 +1,46 @@ +const { PrismaClient } = require('@prisma/client') +const bcrypt = require('bcrypt') + +const prisma = new PrismaClient() + +module.exports = async function userRoutes(fastify) { + fastify.post('/users', async (request, reply) => { + try { + const { email, password, name, role } = request.body + + // Vérifier si l'utilisateur existe déjà + const existingUser = await prisma.user.findUnique({ + where: { email } + }) + + if (existingUser) { + reply.code(400).send({ error: 'Cet email est déjà utilisé' }) + return + } + + // Hasher le mot de passe + const hashedPassword = await bcrypt.hash(password, 10) + + // Créer l'utilisateur + const user = await prisma.user.create({ + data: { + email, + password: hashedPassword, + name, + role + }, + select: { + id: true, + email: true, + name: true, + role: true, + createdAt: true + } + }) + + return user + } catch (error) { + reply.code(400).send({ error: error.message }) + } + }) +} \ No newline at end of file diff --git a/backend/src/utils/seed.js b/backend/src/utils/seed.js new file mode 100644 index 0000000..d2be29e --- /dev/null +++ b/backend/src/utils/seed.js @@ -0,0 +1,227 @@ +const { PrismaClient } = require('@prisma/client') +const axios = require('axios'); + +// const data = require('../../data.json') + +const prisma = new PrismaClient() + +async function cleanDb() { + // Suppression dans l'ordre pour respecter les contraintes de clés étrangères + await prisma.purchaseProduct.deleteMany() + await prisma.purchase.deleteMany() + await prisma.product.deleteMany() + await prisma.artist.deleteMany() + await prisma.category.deleteMany() + await prisma.state.deleteMany() + await prisma.type.deleteMany() + await prisma.acquisitionMode.deleteMany() + await prisma.customer.deleteMany() + console.log('Base de données nettoyée!') +} + +const API_URL = 'https://lh.logiciel-arteo.fr/api/purchase/'; + +async function seed() { + try { + // await cleanDb() + + // Créer le client par défaut + // const defaultClient = await prisma.client.upsert({ + // where: { id: 1 }, + // update: {}, + // create: { + // id: 1, + // name: "Ghost", + // url: API_URL + // } + // }) + + const response = await axios.get(API_URL); + const dataArray = response.data; + + for (const data of dataArray) { + // 1. Create Categories + const allCategories = new Set([ + ...(data.customer?.categories || []), + ...(data.products || []).map(p => p.product?.category).filter(Boolean) + ]) + + const categories = await Promise.all( + Array.from(allCategories).map(cat => + prisma.category.upsert({ + where: { id: cat?.id || 0 }, + update: {}, + create: { + id: cat?.id || 0, + name: cat?.name || 'Unknown', + imageName: cat?.image_name || null, + isForPurchase: cat?.is_for_purchase || false, + position: cat?.position || null + } + }) + ) + ) + + // 2. Create Customer + if (data.customer) { + const customer = await prisma.customer.upsert({ + where: { id: data.customer?.id || 0 }, + update: {}, + create: { + id: data.customer?.id || 0, + name: data.customer?.name || 'Unknown', + email: data.customer?.email, + language: data.customer?.language || 'fr', + isNpai: data.customer?.is_npai || false, + country: data.customer?.country, + contactFirstName: data.customer?.contact_first_name, + contactLastName: data.customer?.contact_last_name, + discr: data.customer?.discr || 'professionalCustomer', + categories: { + connect: (data.customer?.categories || []).map(cat => ({ id: cat.id })) + } + } + }) + } + + // Skip if no products + if (!data.products || !data.products.length) { + console.log('No products found for this entry, skipping product creation') + continue + } + + // 3. Create States, Types, and AcquisitionModes + for (const product of data.products) { + if (product.product?.state) { + await prisma.state.upsert({ + where: { id: product.product.state?.id || 1 }, + update: {}, + create: { + id: product.product.state?.id || 1, + name: product.product.state?.name || 'Unknown', + color: product.product.state?.color || '#000000' + } + }) + } + + if (product.product?.type) { + await prisma.type.upsert({ + where: { id: product.product.type?.id || 1 }, + update: {}, + create: { + id: product.product.type?.id || 1, + name: product.product.type?.name || 'Unknown' + } + }) + } + + if (product.product?.acquisition_mode) { + await prisma.acquisitionMode.upsert({ + where: { id: product.product.acquisition_mode?.id || 1 }, + update: {}, + create: { + id: product.product.acquisition_mode?.id || 1, + name: product.product.acquisition_mode?.name || 'Unknown', + type: product.product.acquisition_mode?.type || 'ACQUISITION' + } + }) + } + } + + // 4. Create Artists + for (const product of data.products) { + if (product.product?.artist) { + await prisma.artist.upsert({ + where: { id: product.product.artist?.id || 0 }, + update: {}, + create: { + id: product.product.artist?.id || 0, + firstName: product.product.artist?.first_name, + lastName: product.product.artist?.last_name || 'Unknown', + dateBirth: product.product.artist?.date_birth, + dateDeath: product.product.artist?.date_death, + imageName: product.product.artist?.image_name, + isPhare: product.product.artist?.is_phare || false, + isCirca: product.product.artist?.is_circa || false + } + }) + } + } + + // 5. Create Products + const products = await Promise.all( + data.products.map(item => + prisma.product.upsert({ + where: { code: item.product?.code || 'UNKNOWN' }, + update: {}, + create: { + code: item.product?.code || 'UNKNOWN', + title: item.product?.title || 'Unknown', + acquisitionPrice: item.product?.acquisition_price || 0, + dateFirstMeeting: item.product?.date_first_meeting, + dateAcquisition: item.product?.date_acquisition, + width: item.product?.width, + height: item.product?.height, + depth: item.product?.depth, + diametre: item.product?.diametre, + widthInch: item.product?.width_inch, + heightInch: item.product?.height_inch, + depthInch: item.product?.depth_inch, + diametreInch: item.product?.diametre_inch, + encadrement: item.product?.encadrement || false, + collectionPerso: item.product?.collection_perso || false, + venteDebout: item.product?.vente_debout || false, + onWall: item.product?.on_wall || false, + isMultiple: item.product?.is_multiple || false, + wantedPrice: item.product?.wanted_price, + wantedPriceMinimum: item.product?.wanted_price_minimum, + comments: item.product?.comments, + commentHistory: item.product?.comment_history, + imageName: item.product?.image_name, + year: item.product?.year, + isCirca: item.product?.is_circa || false, + artist: { connect: { id: item.product?.artist?.id || 0 } }, + category: { connect: { id: item.product?.category?.id || 0 } }, + type: { connect: { id: item.product?.type?.id || 1 } }, + state: { connect: { id: 1 } }, + acquisitionMode: { connect: { id: item.product?.acquisition_mode?.id || 1 } }, + client: { connect: { id: 2 } } + } + }) + ) + ) + + // 6. Create Purchase + const purchase = await prisma.purchase.create({ + data: { + isGroupedPurchase: data.is_grouped_purchase || false, + location: data.location, + amountTotal: data.amount_total || 0, + amountDecremented: data.amount_decremented || 0, + fromDepotVente: data.from_depot_vente || false, + customer: { connect: { id: data.customer?.id || 0 } }, + acquisitionMode: data.acquisition_mode?.id ? + { connect: { id: data.acquisition_mode.id } } : + undefined, + products: { + create: data.products.map(item => ({ + product: { connect: { code: item.product?.code || 'UNKNOWN' } }, + acquisitionPrice: item.acquisition_price || 0, + quantity: item.quantity || 1 + })) + } + } + }) + + console.log(`Import réussi pour l'entrée ${data.id}!`) + } + + console.log('Import complet réussi!') + } catch (error) { + console.error('Erreur lors de l\'import:', error) + } finally { + await prisma.$disconnect() + } +} + +seed() \ No newline at end of file diff --git a/backend/yarn.lock b/backend/yarn.lock new file mode 100644 index 0000000..a79d7d5 --- /dev/null +++ b/backend/yarn.lock @@ -0,0 +1,1499 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@fastify/ajv-compiler@^4.0.0": + version "4.0.1" + resolved "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.1.tgz" + integrity sha512-DxrBdgsjNLP0YM6W5Hd6/Fmj43S8zMKiFJYgi+Ri3htTGAowPVG/tG1wpnWLMjufEnehRivUCKZ1pLDIoZdTuw== + dependencies: + ajv "^8.12.0" + ajv-formats "^3.0.1" + fast-uri "^3.0.0" + +"@fastify/cors@^10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@fastify/cors/-/cors-10.0.1.tgz" + integrity sha512-O8JIf6448uQbOgzSkCqhClw6gFTAqrdfeA6R3fc/3gwTJGUp7gl8/3tbNB+6INuu4RmgVOq99BmvdGbtu5pgOA== + dependencies: + fastify-plugin "^5.0.0" + mnemonist "0.39.8" + +"@fastify/error@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@fastify/error/-/error-4.0.0.tgz" + integrity sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA== + +"@fastify/fast-json-stringify-compiler@^5.0.0": + version "5.0.1" + resolved "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.1.tgz" + integrity sha512-f2d3JExJgFE3UbdFcpPwqNUEoHWmt8pAKf8f+9YuLESdefA0WgqxeT6DrGL4Yrf/9ihXNSKOqpjEmurV405meA== + dependencies: + fast-json-stringify "^6.0.0" + +"@fastify/merge-json-schemas@^0.1.1": + version "0.1.1" + resolved "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz" + integrity sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA== + dependencies: + fast-deep-equal "^3.1.3" + +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@mapbox/node-pre-gyp@^1.0.11": + version "1.0.11" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz" + integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@prisma/client@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@prisma/client/-/client-6.0.1.tgz" + integrity sha512-60w7kL6bUxz7M6Gs/V+OWMhwy94FshpngVmOY05TmGD0Lhk+Ac0ZgtjlL6Wll9TD4G03t4Sq1wZekNVy+Xdlbg== + +"@prisma/debug@6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@prisma/debug/-/debug-6.0.1.tgz" + integrity sha512-jQylgSOf7ibTVxqBacnAlVGvek6fQxJIYCQOeX2KexsfypNzXjJQSS2o5s+Mjj2Np93iSOQUaw6TvPj8syhG4w== + +"@prisma/engines-version@5.23.0-27.5dbef10bdbfb579e07d35cc85fb1518d357cb99e": + version "5.23.0-27.5dbef10bdbfb579e07d35cc85fb1518d357cb99e" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.23.0-27.5dbef10bdbfb579e07d35cc85fb1518d357cb99e.tgz" + integrity sha512-JmIds0Q2/vsOmnuTJYxY4LE+sajqjYKhLtdOT6y4imojqv5d/aeVEfbBGC74t8Be1uSp0OP8lxIj2OqoKbLsfQ== + +"@prisma/engines@6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-6.0.1.tgz" + integrity sha512-4hxzI+YQIR2uuDyVsDooFZGu5AtixbvM2psp+iayDZ4hRrAHo/YwgA17N23UWq7G6gRu18NvuNMb48qjP3DPQw== + dependencies: + "@prisma/debug" "6.0.1" + "@prisma/engines-version" "5.23.0-27.5dbef10bdbfb579e07d35cc85fb1518d357cb99e" + "@prisma/fetch-engine" "6.0.1" + "@prisma/get-platform" "6.0.1" + +"@prisma/fetch-engine@6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.0.1.tgz" + integrity sha512-T36bWFVGeGYYSyYOj9d+O9G3sBC+pAyMC+jc45iSL63/Haq1GrYjQPgPMxrEj9m739taXrupoysRedQ+VyvM/Q== + dependencies: + "@prisma/debug" "6.0.1" + "@prisma/engines-version" "5.23.0-27.5dbef10bdbfb579e07d35cc85fb1518d357cb99e" + "@prisma/get-platform" "6.0.1" + +"@prisma/get-platform@6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.0.1.tgz" + integrity sha512-zspC9vlxAqx4E6epMPMLLBMED2VD8axDe8sPnquZ8GOsn6tiacWK0oxrGK4UAHYzYUVuMVUApJbdXB2dFpLhvg== + dependencies: + "@prisma/debug" "6.0.1" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@types/node@^22.10.2": + version "22.10.2" + resolved "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz" + integrity sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ== + dependencies: + undici-types "~6.20.0" + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abstract-logging@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz" + integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== + +agent-base@6, agent-base@^6.0.2: + 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" + +agentkeepalive@^4.1.3: + version "4.5.0" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + +ajv@^8.0.0, ajv@^8.12.0: + version "8.17.1" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +atomic-sleep@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + +avvio@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/avvio/-/avvio-9.1.0.tgz" + integrity sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw== + dependencies: + "@fastify/error" "^4.0.0" + fastq "^1.17.1" + +axios@^1.7.9: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz" + integrity sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.11" + node-addon-api "^5.0.0" + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +buffer-equal-constant-time@1.0.1: + 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== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +cookie@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz" + integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA== + +debug@4, debug@^4.3.3: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +detect-libc@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +ecdsa-sig-formatter@1.0.11: + 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" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +fast-decode-uri-component@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz" + integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== + +fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stringify@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.0.0.tgz" + integrity sha512-FGMKZwniMTgZh7zQp9b6XnBVxUmKVahQLQeRQHqwYmPDqDhcEKZ3BaQsxelFFI5PY7nN71OEeiL47/zUWcYe1A== + dependencies: + "@fastify/merge-json-schemas" "^0.1.1" + ajv "^8.12.0" + ajv-formats "^3.0.1" + fast-deep-equal "^3.1.3" + fast-uri "^2.3.0" + json-schema-ref-resolver "^1.0.1" + rfdc "^1.2.0" + +fast-querystring@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz" + integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== + dependencies: + fast-decode-uri-component "^1.0.1" + +fast-redact@^3.1.1: + version "3.5.0" + resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz" + integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== + +fast-uri@^2.3.0: + version "2.4.0" + resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz" + integrity sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA== + +fast-uri@^3.0.0, fast-uri@^3.0.1: + version "3.0.3" + resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz" + integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== + +fastify-plugin@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.0.1.tgz" + integrity sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ== + +fastify@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/fastify/-/fastify-5.1.0.tgz" + integrity sha512-0SdUC5AoiSgMSc2Vxwv3WyKzyGMDJRAW/PgNsK1kZrnkO6MeqUIW9ovVg9F2UGIqtIcclYMyeJa4rK6OZc7Jxg== + dependencies: + "@fastify/ajv-compiler" "^4.0.0" + "@fastify/error" "^4.0.0" + "@fastify/fast-json-stringify-compiler" "^5.0.0" + abstract-logging "^2.0.1" + avvio "^9.0.0" + fast-json-stringify "^6.0.0" + find-my-way "^9.0.0" + light-my-request "^6.0.0" + pino "^9.0.0" + process-warning "^4.0.0" + proxy-addr "^2.0.7" + rfdc "^1.3.1" + secure-json-parse "^2.7.0" + semver "^7.6.0" + toad-cache "^3.7.0" + +fastq@^1.17.1: + version "1.17.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +find-my-way@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/find-my-way/-/find-my-way-9.1.0.tgz" + integrity sha512-Y5jIsuYR4BwWDYYQ2A/RWWE6gD8a0FMgtU+HOq1WKku+Cwdz8M1v8wcAmRXXM1/iqtoqg06v+LjAxMYbCjViMw== + dependencies: + fast-deep-equal "^3.1.3" + fast-querystring "^1.0.0" + safe-regex2 "^4.0.0" + +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +form-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +graceful-fs@^4.2.6: + 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== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + 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" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + +ipaddr.js@1.9.1: + 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-fullwidth-code-point@^3.0.0: + 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== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + +json-schema-ref-resolver@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz" + integrity sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw== + dependencies: + fast-deep-equal "^3.1.3" + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +jsonwebtoken@^9.0.2: + version "9.0.2" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jwa@^1.4.1: + 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" + +jws@^3.2.2: + 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" + +light-my-request@^6.0.0: + version "6.3.0" + resolved "https://registry.npmjs.org/light-my-request/-/light-my-request-6.3.0.tgz" + integrity sha512-bWTAPJmeWQH5suJNYwG0f5cs0p6ho9e6f1Ppoxv5qMosY+s9Ir2+ZLvvHcgA7VTDop4zl/NCHhOVVqU+kd++Ow== + dependencies: + cookie "^1.0.1" + process-warning "^4.0.0" + set-cookie-parser "^2.6.0" + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lru-cache@^6.0.0: + 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" + +make-dir@^3.1.0: + 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== + dependencies: + semver "^6.0.0" + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.3: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.6" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@0.39.8: + version "0.39.8" + resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.8.tgz" + integrity sha512-vyWo2K3fjrUw8YeeZ1zF0fy6Mu59RHokURlld8ymdUPjMlD9EC9ov1/YPqTgqRvUN9nTr3Gqfz29LYAmu0PHPQ== + dependencies: + obliterator "^2.0.1" + +ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +negotiator@^0.6.2: + version "0.6.4" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + +node-abi@^3.3.0: + version "3.71.0" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz" + integrity sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw== + dependencies: + semver "^7.3.5" + +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +obliterator@^2.0.1: + version "2.0.4" + resolved "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +on-exit-leak-free@^2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz" + integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +pino-abstract-transport@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz" + integrity sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw== + dependencies: + split2 "^4.0.0" + +pino-std-serializers@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz" + integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA== + +pino@^9.0.0: + version "9.5.0" + resolved "https://registry.npmjs.org/pino/-/pino-9.5.0.tgz" + integrity sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.1.1" + on-exit-leak-free "^2.1.0" + pino-abstract-transport "^2.0.0" + pino-std-serializers "^7.0.0" + process-warning "^4.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.2.0" + safe-stable-stringify "^2.3.1" + sonic-boom "^4.0.1" + thread-stream "^3.0.0" + +prebuild-install@^7.1.1: + version "7.1.2" + resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +prisma@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/prisma/-/prisma-6.0.1.tgz" + integrity sha512-CaMNFHkf+DDq8zq3X/JJsQ4Koy7dyWwwtOKibkT/Am9j/tDxcfbg7+lB1Dzhx18G/+RQCMgjPYB61bhRqteNBQ== + dependencies: + "@prisma/engines" "6.0.1" + optionalDependencies: + fsevents "2.3.3" + +process-warning@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz" + integrity sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +proxy-addr@^2.0.7: + 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" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +quick-format-unescaped@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" + integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +real-require@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz" + integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +ret@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz" + integrity sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.2.0, rfdc@^1.3.1: + version "1.4.1" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex2@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/safe-regex2/-/safe-regex2-4.0.0.tgz" + integrity sha512-Hvjfv25jPDVr3U+4LDzBuZPPOymELG3PYcSk5hcevooo1yxxamQL/bHs/GrEPGmMoMEwRrHVGiCA1pXi97B8Ew== + dependencies: + ret "~0.5.0" + +safe-stable-stringify@^2.3.1: + version "2.5.0" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +secure-json-parse@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" + integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== + +semver@^6.0.0: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.5, semver@^7.5.4, semver@^7.6.0: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-cookie-parser@^2.6.0: + version "2.7.1" + resolved "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz" + integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== + +signal-exit@^3.0.0, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.8.3" + resolved "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + +sonic-boom@^4.0.1: + version "4.2.0" + resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz" + integrity sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww== + dependencies: + atomic-sleep "^1.0.0" + +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +sqlite3@^5.1.7: + version "5.1.7" + resolved "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz" + integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog== + dependencies: + bindings "^1.5.0" + node-addon-api "^7.0.0" + prebuild-install "^7.1.1" + tar "^6.1.11" + optionalDependencies: + node-gyp "8.x" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.2.1" + resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +thread-stream@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz" + integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== + dependencies: + real-require "^0.2.0" + +toad-cache@^3.7.0: + version "3.7.0" + resolved "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz" + integrity sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +typescript@^5.7.2: + version "5.7.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz" + integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..81ef6e9 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,42 @@ +version: '3.8' + +services: + backend: + build: + context: ./backend + dockerfile: Dockerfile + volumes: + - ./backend:/app + - /app/node_modules + environment: + - DB_PATH=/data/db.sqlite + ports: + - "3000:3000" + depends_on: + - db + + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + volumes: + - ./frontend:/app + - /app/node_modules + environment: + - REACT_APP_API_URL=http://localhost:3000 + depends_on: + - backend + + nginx: + image: nginx:alpine + ports: + - "80:80" + volumes: + - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf + depends_on: + - frontend + + db: + image: keinos/sqlite3 + volumes: + - ./data:/data diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..74872fd --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,50 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react' + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}) +``` diff --git a/frontend/components.json b/frontend/components.json new file mode 100644 index 0000000..1d282e6 --- /dev/null +++ b/frontend/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 0000000..092408a --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..e4b78ea --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..e3a1632 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,47 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@radix-ui/react-dropdown-menu": "^2.1.3", + "@radix-ui/react-icons": "^1.3.2", + "@radix-ui/react-label": "^2.1.1", + "@radix-ui/react-select": "^2.1.3", + "@radix-ui/react-slot": "^1.1.1", + "@tanstack/react-query": "^5.62.7", + "@tanstack/react-table": "^8.20.6", + "axios": "^1.7.9", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.468.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router-dom": "^7.0.2", + "tailwind-merge": "^2.5.5", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@eslint/js": "^9.15.0", + "@types/node": "^22.10.2", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", + "eslint": "^9.15.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.12.0", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.16", + "typescript": "~5.6.2", + "typescript-eslint": "^8.15.0", + "vite": "^6.0.1" + } +} diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 0000000..bd9c1cf --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,68 @@ +import { BrowserRouter, Routes, Route, Navigate, useLocation } from 'react-router-dom' +import Header from './components/Header' +import Login from './pages/Login' + +import { useEffect, useState } from 'react' +import { authService, User } from './services/auth.service' +import Dashboard from './pages/Dashboard' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' + +export function PrivateRoute({ children }: { children: JSX.Element }) { + const [isLoading, setIsLoading] = useState(true) + const [user, setUser] = useState(null) + const location = useLocation() + + useEffect(() => { + authService.getCurrentUser() + .then(user => { + setUser(user) + setIsLoading(false) + }) + }, []) + console.log(user) + + if (isLoading) { + return
Loading...
// Ou un spinner + } + + if (!user) { + return + } + + return children +} +// const [isLoading, setIsLoading] = useState(true) +// const [user, setUser] = useState(null) + +const queryClient = new QueryClient() + +function App() { + useEffect(() => { + authService.getCurrentUser() + .then(user => { + // setUser(user) + // setIsLoading(false) + console.log(user) + }) + }, []) + return ( + + +
+ + } /> + + + + } + /> + + + + ) +} + +export default App diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/frontend/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx new file mode 100644 index 0000000..b4884bb --- /dev/null +++ b/frontend/src/components/Header.tsx @@ -0,0 +1,34 @@ +import { Button } from "@/components/ui/button" +import { MoonIcon, SunIcon } from "@radix-ui/react-icons" +import { useTheme } from "@/components/theme-provider" + +export default function Header() { + const { theme, setTheme } = useTheme() + + return ( +
+
+ +
+ +
+
+
+ ) +} \ No newline at end of file diff --git a/frontend/src/components/Table.tsx b/frontend/src/components/Table.tsx new file mode 100644 index 0000000..4f4165a --- /dev/null +++ b/frontend/src/components/Table.tsx @@ -0,0 +1,128 @@ +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table" +import { + ColumnDef, + flexRender, + getCoreRowModel, + useReactTable, + SortingState, + getSortedRowModel, + ColumnFiltersState, + getFilteredRowModel, + getPaginationRowModel, +} from "@tanstack/react-table" +import { useState } from "react" +import { Input } from "./ui/input" +import { Button } from "./ui/button" + +interface DataTableProps { + columns: ColumnDef[] + data: TData[] +} + +export function DataTable({ + columns, + data, +}: DataTableProps) { + const [sorting, setSorting] = useState([]) + const [columnFilters, setColumnFilters] = useState([]) + + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + onSortingChange: setSorting, + getSortedRowModel: getSortedRowModel(), + onColumnFiltersChange: setColumnFilters, + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + state: { + sorting, + columnFilters, + }, + }) + + return ( +
+
+ + table.getColumn("artist")?.setFilterValue(event.target.value) + } + className="max-w-sm" + /> +
+
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext() + )} + + ))} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext() + )} + + ))} + + )) + ) : ( + + + No results. + + + )} + +
+
+
+ + +
+
+ ) +} diff --git a/frontend/src/components/theme-provider.tsx b/frontend/src/components/theme-provider.tsx new file mode 100644 index 0000000..fd614d5 --- /dev/null +++ b/frontend/src/components/theme-provider.tsx @@ -0,0 +1,64 @@ +import { createContext, useContext, useEffect, useState } from "react" + +type Theme = "dark" | "light" | "system" + +type ThemeProviderProps = { + children: React.ReactNode + defaultTheme?: Theme + storageKey?: string +} + +type ThemeProviderState = { + theme: Theme + setTheme: (theme: Theme) => void +} + +const ThemeProviderContext = createContext(undefined) + +export function ThemeProvider({ + children, + defaultTheme = "system", + storageKey = "vite-ui-theme", + ...props +}: ThemeProviderProps) { + const [theme, setTheme] = useState( + () => (localStorage.getItem(storageKey) as Theme) || defaultTheme + ) + + useEffect(() => { + const root = window.document.documentElement + root.classList.remove("light", "dark") + + if (theme === "system") { + const systemTheme = window.matchMedia("(prefers-color-scheme: dark)") + .matches + ? "dark" + : "light" + root.classList.add(systemTheme) + return + } + + root.classList.add(theme) + }, [theme]) + + const value = { + theme, + setTheme: (theme: Theme) => { + localStorage.setItem(storageKey, theme) + setTheme(theme) + }, + } + + return ( + + {children} + + ) +} + +export const useTheme = () => { + const context = useContext(ThemeProviderContext) + if (context === undefined) + throw new Error("useTheme must be used within a ThemeProvider") + return context +} \ No newline at end of file diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx new file mode 100644 index 0000000..65d4fcd --- /dev/null +++ b/frontend/src/components/ui/button.tsx @@ -0,0 +1,57 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/frontend/src/components/ui/card.tsx b/frontend/src/components/ui/card.tsx new file mode 100644 index 0000000..cabfbfc --- /dev/null +++ b/frontend/src/components/ui/card.tsx @@ -0,0 +1,76 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/frontend/src/components/ui/dropdown-menu.tsx b/frontend/src/components/ui/dropdown-menu.tsx new file mode 100644 index 0000000..9ff6568 --- /dev/null +++ b/frontend/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,199 @@ +import * as React from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { Check, ChevronRight, Circle } from "lucide-react" + +import { cn } from "@/lib/utils" + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + svg]:size-4 [&>svg]:shrink-0", + inset && "pl-8", + className + )} + {...props} + /> +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +} diff --git a/frontend/src/components/ui/input.tsx b/frontend/src/components/ui/input.tsx new file mode 100644 index 0000000..69b64fb --- /dev/null +++ b/frontend/src/components/ui/input.tsx @@ -0,0 +1,22 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Input = React.forwardRef>( + ({ className, type, ...props }, ref) => { + return ( + + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/frontend/src/components/ui/label.tsx b/frontend/src/components/ui/label.tsx new file mode 100644 index 0000000..683faa7 --- /dev/null +++ b/frontend/src/components/ui/label.tsx @@ -0,0 +1,24 @@ +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const labelVariants = cva( + "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" +) + +const Label = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, ...props }, ref) => ( + +)) +Label.displayName = LabelPrimitive.Root.displayName + +export { Label } diff --git a/frontend/src/components/ui/select.tsx b/frontend/src/components/ui/select.tsx new file mode 100644 index 0000000..a84242c --- /dev/null +++ b/frontend/src/components/ui/select.tsx @@ -0,0 +1,157 @@ +import * as React from "react" +import * as SelectPrimitive from "@radix-ui/react-select" +import { Check, ChevronDown, ChevronUp } from "lucide-react" + +import { cn } from "@/lib/utils" + +const Select = SelectPrimitive.Root + +const SelectGroup = SelectPrimitive.Group + +const SelectValue = SelectPrimitive.Value + +const SelectTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + span]:line-clamp-1", + className + )} + {...props} + > + {children} + + + + +)) +SelectTrigger.displayName = SelectPrimitive.Trigger.displayName + +const SelectScrollUpButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName + +const SelectScrollDownButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +SelectScrollDownButton.displayName = + SelectPrimitive.ScrollDownButton.displayName + +const SelectContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, position = "popper", ...props }, ref) => ( + + + + + {children} + + + + +)) +SelectContent.displayName = SelectPrimitive.Content.displayName + +const SelectLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SelectLabel.displayName = SelectPrimitive.Label.displayName + +const SelectItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +SelectItem.displayName = SelectPrimitive.Item.displayName + +const SelectSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SelectSeparator.displayName = SelectPrimitive.Separator.displayName + +export { + Select, + SelectGroup, + SelectValue, + SelectTrigger, + SelectContent, + SelectLabel, + SelectItem, + SelectSeparator, + SelectScrollUpButton, + SelectScrollDownButton, +} diff --git a/frontend/src/components/ui/table.tsx b/frontend/src/components/ui/table.tsx new file mode 100644 index 0000000..c0df655 --- /dev/null +++ b/frontend/src/components/ui/table.tsx @@ -0,0 +1,120 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Table = React.forwardRef< + HTMLTableElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+ + +)) +Table.displayName = "Table" + +const TableHeader = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableHeader.displayName = "TableHeader" + +const TableBody = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableBody.displayName = "TableBody" + +const TableFooter = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + tr]:last:border-b-0", + className + )} + {...props} + /> +)) +TableFooter.displayName = "TableFooter" + +const TableRow = React.forwardRef< + HTMLTableRowElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableRow.displayName = "TableRow" + +const TableHead = React.forwardRef< + HTMLTableCellElement, + React.ThHTMLAttributes +>(({ className, ...props }, ref) => ( +
[role=checkbox]]:translate-y-[2px]", + className + )} + {...props} + /> +)) +TableHead.displayName = "TableHead" + +const TableCell = React.forwardRef< + HTMLTableCellElement, + React.TdHTMLAttributes +>(({ className, ...props }, ref) => ( + [role=checkbox]]:translate-y-[2px]", + className + )} + {...props} + /> +)) +TableCell.displayName = "TableCell" + +const TableCaption = React.forwardRef< + HTMLTableCaptionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableCaption.displayName = "TableCaption" + +export { + Table, + TableHeader, + TableBody, + TableFooter, + TableHead, + TableRow, + TableCell, + TableCaption, +} diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..b4003e7 --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,72 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + + + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + --primary: 0 0% 9%; + --primary-foreground: 0 0% 98%; + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + --ring: 0 0% 3.9%; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + --radius: 0.5rem; + } + + .dark { + --background: 0 0% 10.2%; + --foreground: 0 0% 98%; + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 0% 98%; + --primary-foreground: 0 0% 9%; + --secondary: 0 0% 14.9%; + --secondary-foreground: 0 0% 98%; + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 14.9%; + --input: 0 0% 14.9%; + --ring: 0 0% 83.1%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } +} + +@layer base { + * { + @apply border-border; + } + + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/frontend/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx new file mode 100644 index 0000000..a3942d0 --- /dev/null +++ b/frontend/src/main.tsx @@ -0,0 +1,13 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' +import { ThemeProvider } from "@/components/theme-provider" + +createRoot(document.getElementById('root')!).render( + + + + + , +) diff --git a/frontend/src/pages/Dashboard.tsx b/frontend/src/pages/Dashboard.tsx new file mode 100644 index 0000000..f7c26a2 --- /dev/null +++ b/frontend/src/pages/Dashboard.tsx @@ -0,0 +1,150 @@ +import { DataTable } from "@/components/Table" +import { ColumnDef } from "@tanstack/react-table" +import { purchaseService, Purchase } from "@/services/purchase.service" +import { useQuery } from "@tanstack/react-query" +import { clientService, Client } from "@/services/client.service" +import { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectLabel, + SelectTrigger, + SelectValue, +} from "@/components/ui/select" +import { useState } from "react" +import { Eye, ArrowUpDown } from "lucide-react" +import { Button } from "@/components/ui/button" + +const columns: ColumnDef[] = [ + { + id: "artwork", + accessorFn: (row) => row.products[0]?.product.title, + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const product = row.original.products[0]?.product + return ( +
+
{product?.title}
+
+ {product?.width}x{product?.height}cm • {product?.year?.split('T')[0]} +
+
+ ) + } + }, + { + id: "artist", + accessorFn: (row) => `${row.products[0]?.product.artist.firstName || ''} ${row.products[0]?.product.artist.lastName}`, + header: ({ column }) => ( + + ), + }, + { + id: "Date d'acquisition", + accessorFn: (row) => row.products[0]?.product.title, + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const product = row.original.products[0]?.product + return ( +
+ {new Date(product?.dateAcquisition).toLocaleDateString('fr-FR')} +
+ ) + } + }, + { + id: "contact", + accessorFn: (row) => `${row.customer.contactFirstName} ${row.customer.contactLastName}`, + header: ({ column }) => ( +
Contact
+ ), + }, + + + { + accessorKey: "amountTotal", + header: ({ column }) => ( + + ), + cell: ({ getValue }) => ( +
{`${getValue().toLocaleString('fr-FR')} €`}
+ ), + }, + { + id: "actions", + cell: ({ row }) => { + const imageName = row.original.products[0]?.product.imageName + const clientUrl = row.original.products[0]?.product.client?.url + const imageUrl = imageName && clientUrl ? `${clientUrl}media/cache/art_product_image/uploads/art/products/${imageName}` : null + + return imageUrl ? ( + + ) : null + } + } +] + +export default function Purchases() { + const { data: purchases = [], isLoading: purchasesLoading } = useQuery({ + queryKey: ['purchases'], + queryFn: purchaseService.getAll + }) + + const { data: clients = [], isLoading: clientsLoading } = useQuery({ + queryKey: ['clients'], + queryFn: clientService.getAll + }) + + const [selectedClient, setSelectedClient] = useState('all') + + const filteredPurchases = selectedClient === 'all' + ? purchases + : purchases.filter(p => p.customer.id === parseInt(selectedClient)) + + if (purchasesLoading || clientsLoading) return
Chargement...
+ + return ( +
+
+ +
+ +
+ ) +} + + diff --git a/frontend/src/pages/Login.tsx b/frontend/src/pages/Login.tsx new file mode 100644 index 0000000..1d4c70f --- /dev/null +++ b/frontend/src/pages/Login.tsx @@ -0,0 +1,73 @@ +import { useState } from "react" +import { useNavigate } from "react-router-dom" +import { Button } from "@/components/ui/button" +import { Input } from "@/components/ui/input" +import { Card, CardHeader, CardContent, CardFooter } from "@/components/ui/card" +import { Label } from "@/components/ui/label" +import { authService } from "@/services/auth.service" + +export default function Login() { + const navigate = useNavigate() + const [isLoading, setIsLoading] = useState(false) + const [formData, setFormData] = useState({ + email: "", + password: "", + }) + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault() + setIsLoading(true) + + try { + const response = await authService.login(formData) + authService.saveToken(response.token) + navigate('/') + } catch (error) { + console.error('Login failed:', error) + } finally { + setIsLoading(false) + } + } + + return ( +
+ + +

Art

+
+
+ +
+ + + setFormData({ ...formData, email: e.target.value }) + } + /> +
+
+ + + setFormData({ ...formData, password: e.target.value }) + } + /> +
+
+ + + +
+
+
+ ) +} diff --git a/frontend/src/services/auth.service.ts b/frontend/src/services/auth.service.ts new file mode 100644 index 0000000..03a14a0 --- /dev/null +++ b/frontend/src/services/auth.service.ts @@ -0,0 +1,79 @@ +export interface User { + id: string; + email: string; + role: string; +} + +interface LoginCredentials { + email: string; + password: string; +} + +interface LoginResponse { + token: string; + user: { + id: string; + email: string; + }; +} + +export const authService = { + async login(credentials: LoginCredentials): Promise { + const response = await fetch(`${import.meta.env.VITE_BASE_URL}/login`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(credentials), + }); + + if (!response.ok) { + throw new Error('Login failed'); + } + + return response.json(); + }, + + saveToken(token: string) { + localStorage.setItem('token', token); + }, + + getToken(): string | null { + return localStorage.getItem('token'); + }, + + logout() { + localStorage.removeItem('token'); + }, + + async getCurrentUser(): Promise { + try { + const token = localStorage.getItem('token'); + console.log('Token:', token); + + if (!token) return null; + + console.log('Fetching /me...'); + const response = await fetch(`${import.meta.env.VITE_BASE_URL}/me`, { + headers: { Authorization: `Bearer ${token}` } + }); + + if (!response.ok) { + console.error('ME response not OK:', response.status); + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + console.log('ME response:', data); + return data; + } catch (error) { + console.error('getCurrentUser error:', error); + localStorage.removeItem('token'); + return null; + } + }, + + isAuthenticated(): boolean { + return !!localStorage.getItem('token'); + } +}; \ No newline at end of file diff --git a/frontend/src/services/client.service.ts b/frontend/src/services/client.service.ts new file mode 100644 index 0000000..3c3c42a --- /dev/null +++ b/frontend/src/services/client.service.ts @@ -0,0 +1,36 @@ +import axios from 'axios' + +export type Client = { + id: number + name: string + url: string +} + +export const clientService = { + getAll: async (): Promise => { + const response = await axios.get(`${import.meta.env.VITE_BASE_URL}/clients`, { + headers: { + Authorization: `Bearer ${localStorage.getItem('token')}` + } + }) + return response.data + }, + + getById: async (id: number): Promise => { + const response = await axios.get(`${import.meta.env.VITE_BASE_URL}/clients/${id}`, { + headers: { + Authorization: `Bearer ${localStorage.getItem('token')}` + } + }) + return response.data + }, + + create: async (client: Omit): Promise => { + const response = await axios.post(`${import.meta.env.VITE_BASE_URL}/clients`, client, { + headers: { + Authorization: `Bearer ${localStorage.getItem('token')}` + } + }) + return response.data + } +} \ No newline at end of file diff --git a/frontend/src/services/purchase.service.ts b/frontend/src/services/purchase.service.ts new file mode 100644 index 0000000..fdeef87 --- /dev/null +++ b/frontend/src/services/purchase.service.ts @@ -0,0 +1,37 @@ +import axios from 'axios' + +export type Purchase = { + id: number + location: string + amountTotal: number + customer: { + name: string + contactFirstName: string + contactLastName: string + email: string + } + products: Array<{ + product: { + code: string + title: string + artist: { + firstName: string + lastName: string + } + } + acquisitionPrice: number + }> +} + +export const purchaseService = { + getAll: async (): Promise => { + const response = await axios.get(`${import.meta.env.VITE_BASE_URL}/purchases`, + { + headers: { + Authorization: `Bearer ${localStorage.getItem('token')}` + } + } + ) + return response.data + } +} diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000..3fc12b0 --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,57 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: ["./index.html", "./src/**/*.{ts,tsx,js,jsx}"], + theme: { + extend: { + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + }, + colors: { + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + chart: { + '1': 'hsl(var(--chart-1))', + '2': 'hsl(var(--chart-2))', + '3': 'hsl(var(--chart-3))', + '4': 'hsl(var(--chart-4))', + '5': 'hsl(var(--chart-5))' + } + } + } + }, + plugins: [require("tailwindcss-animate")], +} diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..13c8944 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,35 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": [ + "ES2020", + "DOM", + "DOM.Iterable" + ], + "module": "ESNext", + "skipLibCheck": true, + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "baseUrl": ".", + "paths": { + "@/*": [ + "./src/*" + ] + }, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..20ff94b --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,19 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.node.json" + } + ], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": [ + "./src/*" + ] + } + } +} \ No newline at end of file diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..db0becc --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..5790e82 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,12 @@ +import path from "path" +import react from "@vitejs/plugin-react" +import { defineConfig } from "vite" + +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}) diff --git a/frontend/yarn.lock b/frontend/yarn.lock new file mode 100644 index 0000000..4d3f8fb --- /dev/null +++ b/frontend/yarn.lock @@ -0,0 +1,2500 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" + integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== + +"@babel/core@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.26.0", "@babel/generator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== + dependencies: + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== + dependencies: + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-plugin-utils@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== + dependencies: + "@babel/types" "^7.26.3" + +"@babel/plugin-transform-react-jsx-self@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz#c0b6cae9c1b73967f7f9eb2fca9536ba2fad2858" + integrity sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-jsx-source@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz#4c6b8daa520b5f155b5fb55547d7c9fa91417503" + integrity sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/traverse@^7.25.9": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@esbuild/aix-ppc64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz#b57697945b50e99007b4c2521507dc613d4a648c" + integrity sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw== + +"@esbuild/android-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz#1add7e0af67acefd556e407f8497e81fddad79c0" + integrity sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w== + +"@esbuild/android-arm@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.0.tgz#ab7263045fa8e090833a8e3c393b60d59a789810" + integrity sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew== + +"@esbuild/android-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.0.tgz#e8f8b196cfdfdd5aeaebbdb0110983460440e705" + integrity sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ== + +"@esbuild/darwin-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz#2d0d9414f2acbffd2d86e98253914fca603a53dd" + integrity sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw== + +"@esbuild/darwin-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz#33087aab31a1eb64c89daf3d2cf8ce1775656107" + integrity sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA== + +"@esbuild/freebsd-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz#bb76e5ea9e97fa3c753472f19421075d3a33e8a7" + integrity sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA== + +"@esbuild/freebsd-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz#e0e2ce9249fdf6ee29e5dc3d420c7007fa579b93" + integrity sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ== + +"@esbuild/linux-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz#d1b2aa58085f73ecf45533c07c82d81235388e75" + integrity sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g== + +"@esbuild/linux-arm@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz#8e4915df8ea3e12b690a057e77a47b1d5935ef6d" + integrity sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw== + +"@esbuild/linux-ia32@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz#8200b1110666c39ab316572324b7af63d82013fb" + integrity sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA== + +"@esbuild/linux-loong64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz#6ff0c99cf647504df321d0640f0d32e557da745c" + integrity sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g== + +"@esbuild/linux-mips64el@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz#3f720ccd4d59bfeb4c2ce276a46b77ad380fa1f3" + integrity sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA== + +"@esbuild/linux-ppc64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz#9d6b188b15c25afd2e213474bf5f31e42e3aa09e" + integrity sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ== + +"@esbuild/linux-riscv64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz#f989fdc9752dfda286c9cd87c46248e4dfecbc25" + integrity sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw== + +"@esbuild/linux-s390x@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz#29ebf87e4132ea659c1489fce63cd8509d1c7319" + integrity sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g== + +"@esbuild/linux-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz#4af48c5c0479569b1f359ffbce22d15f261c0cef" + integrity sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA== + +"@esbuild/netbsd-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz#1ae73d23cc044a0ebd4f198334416fb26c31366c" + integrity sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg== + +"@esbuild/openbsd-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz#5d904a4f5158c89859fd902c427f96d6a9e632e2" + integrity sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg== + +"@esbuild/openbsd-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz#4c8aa88c49187c601bae2971e71c6dc5e0ad1cdf" + integrity sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q== + +"@esbuild/sunos-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz#8ddc35a0ea38575fa44eda30a5ee01ae2fa54dd4" + integrity sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA== + +"@esbuild/win32-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz#6e79c8543f282c4539db684a207ae0e174a9007b" + integrity sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA== + +"@esbuild/win32-ia32@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz#057af345da256b7192d18b676a02e95d0fa39103" + integrity sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw== + +"@esbuild/win32-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz#168ab1c7e1c318b922637fad8f339d48b01e1244" + integrity sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.19.0": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984" + integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== + dependencies: + "@eslint/object-schema" "^2.1.5" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/core@^0.9.0": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.9.1.tgz#31763847308ef6b7084a4505573ac9402c51f9d1" + integrity sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c" + integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@9.16.0", "@eslint/js@^9.15.0": + version "9.16.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.16.0.tgz#3df2b2dd3b9163056616886c86e4082f45dbf3f4" + integrity sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg== + +"@eslint/object-schema@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e" + integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== + +"@eslint/plugin-kit@^0.2.3": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz#2b78e7bb3755784bb13faa8932a1d994d6537792" + integrity sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg== + dependencies: + levn "^0.4.1" + +"@floating-ui/core@^1.6.0": + version "1.6.8" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12" + integrity sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA== + dependencies: + "@floating-ui/utils" "^0.2.8" + +"@floating-ui/dom@^1.0.0": + version "1.6.12" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.12.tgz#6333dcb5a8ead3b2bf82f33d6bc410e95f54e556" + integrity sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w== + dependencies: + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.8" + +"@floating-ui/react-dom@^2.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" + integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/utils@^0.2.8": + version "0.2.8" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" + integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" + integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@radix-ui/number@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.0.tgz#1e95610461a09cdf8bb05c152e76ca1278d5da46" + integrity sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ== + +"@radix-ui/primitive@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.1.tgz#fc169732d755c7fbad33ba8d0cd7fd10c90dc8e3" + integrity sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA== + +"@radix-ui/react-arrow@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.1.tgz#2103721933a8bfc6e53bbfbdc1aaad5fc8ba0dd7" + integrity sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w== + dependencies: + "@radix-ui/react-primitive" "2.0.1" + +"@radix-ui/react-collection@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.1.tgz#be2c7e01d3508e6d4b6d838f492e7d182f17d3b0" + integrity sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-slot" "1.1.1" + +"@radix-ui/react-compose-refs@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz#6f766faa975f8738269ebb8a23bad4f5a8d2faec" + integrity sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw== + +"@radix-ui/react-context@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a" + integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q== + +"@radix-ui/react-direction@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" + integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== + +"@radix-ui/react-dismissable-layer@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.2.tgz#771594b202f32bc8ffeb278c565f10c513814aee" + integrity sha512-kEHnlhv7wUggvhuJPkyw4qspXLJOdYoAP4dO2c8ngGuXTq1w/HZp1YeVB+NQ2KbH1iEG+pvOCGYSqh9HZOz6hg== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-escape-keydown" "1.1.0" + +"@radix-ui/react-dropdown-menu@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.3.tgz#02665f99bfdcefc33a8a15dc130e9b98ebdf7671" + integrity sha512-eKyAfA9e4HOavzyGJC6kiDIlHMPzAU0zqSqTg+VwS0Okvb9nkTo7L4TugkCUqM3I06ciSpdtYQ73cgB7tyUgVw== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-menu" "2.1.3" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-controllable-state" "1.1.0" + +"@radix-ui/react-focus-guards@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz#8635edd346304f8b42cae86b05912b61aef27afe" + integrity sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg== + +"@radix-ui/react-focus-scope@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.1.tgz#5c602115d1db1c4fcfa0fae4c3b09bb8919853cb" + integrity sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-callback-ref" "1.1.0" + +"@radix-ui/react-icons@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-icons/-/react-icons-1.3.2.tgz#09be63d178262181aeca5fb7f7bc944b10a7f441" + integrity sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g== + +"@radix-ui/react-id@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed" + integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-label@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.1.tgz#f30bd577b26873c638006e4f65761d4c6b80566d" + integrity sha512-UUw5E4e/2+4kFMH7+YxORXGWggtY6sM8WIwh5RZchhLuUg2H1hc98Py+pr8HMz6rdaYrK2t296ZEjYLOCO5uUw== + dependencies: + "@radix-ui/react-primitive" "2.0.1" + +"@radix-ui/react-menu@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.3.tgz#5a3330cf5dc5d48666da31ba0e83fef99288e367" + integrity sha512-wY5SY6yCiJYP+DMIy7RrjF4shoFpB9LJltliVwejBm8T2yepWDJgKBhIFYOGWYR/lFHOCtbstN9duZFu6gmveQ== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-collection" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-dismissable-layer" "1.1.2" + "@radix-ui/react-focus-guards" "1.1.1" + "@radix-ui/react-focus-scope" "1.1.1" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-popper" "1.2.1" + "@radix-ui/react-portal" "1.1.3" + "@radix-ui/react-presence" "1.1.2" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-roving-focus" "1.1.1" + "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-use-callback-ref" "1.1.0" + aria-hidden "^1.1.1" + react-remove-scroll "2.6.0" + +"@radix-ui/react-popper@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.1.tgz#2fc66cfc34f95f00d858924e3bee54beae2dff0a" + integrity sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw== + dependencies: + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-rect" "1.1.0" + "@radix-ui/react-use-size" "1.1.0" + "@radix-ui/rect" "1.1.0" + +"@radix-ui/react-portal@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.3.tgz#b0ea5141103a1671b715481b13440763d2ac4440" + integrity sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw== + dependencies: + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-presence@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.2.tgz#bb764ed8a9118b7ec4512da5ece306ded8703cdc" + integrity sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-primitive@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz#6d9efc550f7520135366f333d1e820cf225fad9e" + integrity sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg== + dependencies: + "@radix-ui/react-slot" "1.1.1" + +"@radix-ui/react-roving-focus@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.1.tgz#3b3abb1e03646937f28d9ab25e96343667ca6520" + integrity sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-collection" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + +"@radix-ui/react-select@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-2.1.3.tgz#b3f0ed2ae8fb9ebb03baaec49f9856e24628fc16" + integrity sha512-tlLwaewTfrKetiex8iW9wwME/qrYlzlH0qcgYmos7xS54MO00SiPHasLoAykg/yVrjf41GQptPPi4oXzrP+sgg== + dependencies: + "@radix-ui/number" "1.1.0" + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-collection" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-dismissable-layer" "1.1.2" + "@radix-ui/react-focus-guards" "1.1.1" + "@radix-ui/react-focus-scope" "1.1.1" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-popper" "1.2.1" + "@radix-ui/react-portal" "1.1.3" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-previous" "1.1.0" + "@radix-ui/react-visually-hidden" "1.1.1" + aria-hidden "^1.1.1" + react-remove-scroll "2.6.0" + +"@radix-ui/react-slot@1.1.1", "@radix-ui/react-slot@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.1.tgz#ab9a0ffae4027db7dc2af503c223c978706affc3" + integrity sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + +"@radix-ui/react-use-callback-ref@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1" + integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== + +"@radix-ui/react-use-controllable-state@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0" + integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.0" + +"@radix-ui/react-use-escape-keydown@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754" + integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.0" + +"@radix-ui/react-use-layout-effect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27" + integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== + +"@radix-ui/react-use-previous@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz#d4dd37b05520f1d996a384eb469320c2ada8377c" + integrity sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og== + +"@radix-ui/react-use-rect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz#13b25b913bd3e3987cc9b073a1a164bb1cf47b88" + integrity sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ== + dependencies: + "@radix-ui/rect" "1.1.0" + +"@radix-ui/react-use-size@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz#b4dba7fbd3882ee09e8d2a44a3eed3a7e555246b" + integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-visually-hidden@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz#f7b48c1af50dfdc366e92726aee6d591996c5752" + integrity sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg== + dependencies: + "@radix-ui/react-primitive" "2.0.1" + +"@radix-ui/rect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.0.tgz#f817d1d3265ac5415dadc67edab30ae196696438" + integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg== + +"@rollup/rollup-android-arm-eabi@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz#7f4c4d8cd5ccab6e95d6750dbe00321c1f30791e" + integrity sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ== + +"@rollup/rollup-android-arm64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz#17ea71695fb1518c2c324badbe431a0bd1879f2d" + integrity sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA== + +"@rollup/rollup-darwin-arm64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz#dac0f0d0cfa73e7d5225ae6d303c13c8979e7999" + integrity sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ== + +"@rollup/rollup-darwin-x64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz#8f63baa1d31784904a380d2e293fa1ddf53dd4a2" + integrity sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ== + +"@rollup/rollup-freebsd-arm64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz#30ed247e0df6e8858cdc6ae4090e12dbeb8ce946" + integrity sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA== + +"@rollup/rollup-freebsd-x64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz#57846f382fddbb508412ae07855b8a04c8f56282" + integrity sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz#378ca666c9dae5e6f94d1d351e7497c176e9b6df" + integrity sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA== + +"@rollup/rollup-linux-arm-musleabihf@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz#a692eff3bab330d5c33a5d5813a090c15374cddb" + integrity sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg== + +"@rollup/rollup-linux-arm64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz#6b1719b76088da5ac1ae1feccf48c5926b9e3db9" + integrity sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA== + +"@rollup/rollup-linux-arm64-musl@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz#865baf5b6f5ff67acb32e5a359508828e8dc5788" + integrity sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A== + +"@rollup/rollup-linux-loongarch64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz#23c6609ba0f7fa7a7f2038b6b6a08555a5055a87" + integrity sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA== + +"@rollup/rollup-linux-powerpc64le-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz#652ef0d9334a9f25b9daf85731242801cb0fc41c" + integrity sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A== + +"@rollup/rollup-linux-riscv64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz#1eb6651839ee6ebca64d6cc64febbd299e95e6bd" + integrity sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA== + +"@rollup/rollup-linux-s390x-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz#015c52293afb3ff2a293cf0936b1d43975c1e9cd" + integrity sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg== + +"@rollup/rollup-linux-x64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz#b83001b5abed2bcb5e2dbeec6a7e69b194235c1e" + integrity sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw== + +"@rollup/rollup-linux-x64-musl@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz#6cc7c84cd4563737f8593e66f33b57d8e228805b" + integrity sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g== + +"@rollup/rollup-win32-arm64-msvc@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz#631ffeee094d71279fcd1fe8072bdcf25311bc11" + integrity sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A== + +"@rollup/rollup-win32-ia32-msvc@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz#06d1d60d5b9f718e8a6c4a43f82e3f9e3254587f" + integrity sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA== + +"@rollup/rollup-win32-x64-msvc@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz#4dff5c4259ebe6c5b4a8f2c5bc3829b7a8447ff0" + integrity sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA== + +"@tanstack/query-core@5.62.7": + version "5.62.7" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.62.7.tgz#c7f6d0131c08cd2f60e73ec6e7b70e2e9e335def" + integrity sha512-fgpfmwatsrUal6V+8EC2cxZIQVl9xvL7qYa03gsdsCy985UTUlS4N+/3hCzwR0PclYDqisca2AqR1BVgJGpUDA== + +"@tanstack/react-query@^5.62.7": + version "5.62.7" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.62.7.tgz#8f253439a38ad6ce820bc6d42d89ca2556574d1a" + integrity sha512-+xCtP4UAFDTlRTYyEjLx0sRtWyr5GIk7TZjZwBu4YaNahi3Rt2oMyRqfpfVrtwsqY2sayP4iXVCwmC+ZqqFmuw== + dependencies: + "@tanstack/query-core" "5.62.7" + +"@tanstack/react-table@^8.20.6": + version "8.20.6" + resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.20.6.tgz#a1f3103327aa59aa621931f4087a7604a21054d0" + integrity sha512-w0jluT718MrOKthRcr2xsjqzx+oEM7B7s/XXyfs19ll++hlId3fjTm+B2zrR3ijpANpkzBAr15j1XGVOMxpggQ== + dependencies: + "@tanstack/table-core" "8.20.5" + +"@tanstack/table-core@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.20.5.tgz#3974f0b090bed11243d4107283824167a395cf1d" + integrity sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg== + +"@types/babel__core@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/cookie@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" + integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== + +"@types/estree@1.0.6", "@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/node@^22.10.2": + version "22.10.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.2.tgz#a485426e6d1fdafc7b0d4c7b24e2c78182ddabb9" + integrity sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ== + dependencies: + undici-types "~6.20.0" + +"@types/prop-types@*": + version "15.7.14" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" + integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== + +"@types/react-dom@^18.3.1": + version "18.3.5" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.5.tgz#45f9f87398c5dcea085b715c58ddcf1faf65f716" + integrity sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q== + +"@types/react@^18.3.12": + version "18.3.16" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.16.tgz#5326789125fac98b718d586ad157442ceb44ff28" + integrity sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@typescript-eslint/eslint-plugin@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz#0901933326aea4443b81df3f740ca7dfc45c7bea" + integrity sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.18.0" + "@typescript-eslint/type-utils" "8.18.0" + "@typescript-eslint/utils" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.18.0.tgz#a1c9456cbb6a089730bf1d3fc47946c5fb5fe67b" + integrity sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q== + dependencies: + "@typescript-eslint/scope-manager" "8.18.0" + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/typescript-estree" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz#30b040cb4557804a7e2bcc65cf8fdb630c96546f" + integrity sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw== + dependencies: + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" + +"@typescript-eslint/type-utils@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz#6f0d12cf923b6fd95ae4d877708c0adaad93c471" + integrity sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow== + dependencies: + "@typescript-eslint/typescript-estree" "8.18.0" + "@typescript-eslint/utils" "8.18.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.18.0.tgz#3afcd30def8756bc78541268ea819a043221d5f3" + integrity sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA== + +"@typescript-eslint/typescript-estree@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz#d8ca785799fbb9c700cdff1a79c046c3e633c7f9" + integrity sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg== + dependencies: + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.18.0.tgz#48f67205d42b65d895797bb7349d1be5c39a62f7" + integrity sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.18.0" + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/typescript-estree" "8.18.0" + +"@typescript-eslint/visitor-keys@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz#7b6d33534fa808e33a19951907231ad2ea5c36dd" + integrity sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw== + dependencies: + "@typescript-eslint/types" "8.18.0" + eslint-visitor-keys "^4.2.0" + +"@vitejs/plugin-react@^4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz#c64be10b54c4640135a5b28a2432330e88ad7c20" + integrity sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug== + dependencies: + "@babel/core" "^7.26.0" + "@babel/plugin-transform-react-jsx-self" "^7.25.9" + "@babel/plugin-transform-react-jsx-source" "^7.25.9" + "@types/babel__core" "^7.20.5" + react-refresh "^0.14.2" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.14.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-hidden@^1.1.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" + integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== + dependencies: + tslib "^2.0.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +autoprefixer@^10.4.20: + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + dependencies: + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.0.1" + postcss-value-parser "^4.2.0" + +axios@^1.7.9: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.23.3, browserslist@^4.24.0: + version "4.24.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" + integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== + dependencies: + caniuse-lite "^1.0.30001669" + electron-to-chromium "^1.5.41" + node-releases "^2.0.18" + update-browserslist-db "^1.1.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669: + version "1.0.30001688" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz#f9d3ede749f083ce0db4c13db9d828adaf2e8d0a" + integrity sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + 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" + optionalDependencies: + fsevents "~2.3.2" + +class-variance-authority@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.1.tgz#4008a798a0e4553a781a57ac5177c9fb5d043787" + integrity sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg== + dependencies: + clsx "^2.1.1" + +clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610" + integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA== + +cross-spawn@^7.0.0, cross-spawn@^7.0.5: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +electron-to-chromium@^1.5.41: + version "1.5.73" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz#f32956ce40947fa3c8606726a96cd8fb5bb5f720" + integrity sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +esbuild@^0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.0.tgz#f2d470596885fcb2e91c21eb3da3b3c89c0b55e7" + integrity sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ== + optionalDependencies: + "@esbuild/aix-ppc64" "0.24.0" + "@esbuild/android-arm" "0.24.0" + "@esbuild/android-arm64" "0.24.0" + "@esbuild/android-x64" "0.24.0" + "@esbuild/darwin-arm64" "0.24.0" + "@esbuild/darwin-x64" "0.24.0" + "@esbuild/freebsd-arm64" "0.24.0" + "@esbuild/freebsd-x64" "0.24.0" + "@esbuild/linux-arm" "0.24.0" + "@esbuild/linux-arm64" "0.24.0" + "@esbuild/linux-ia32" "0.24.0" + "@esbuild/linux-loong64" "0.24.0" + "@esbuild/linux-mips64el" "0.24.0" + "@esbuild/linux-ppc64" "0.24.0" + "@esbuild/linux-riscv64" "0.24.0" + "@esbuild/linux-s390x" "0.24.0" + "@esbuild/linux-x64" "0.24.0" + "@esbuild/netbsd-x64" "0.24.0" + "@esbuild/openbsd-arm64" "0.24.0" + "@esbuild/openbsd-x64" "0.24.0" + "@esbuild/sunos-x64" "0.24.0" + "@esbuild/win32-arm64" "0.24.0" + "@esbuild/win32-ia32" "0.24.0" + "@esbuild/win32-x64" "0.24.0" + +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-plugin-react-hooks@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz#3d34e37d5770866c34b87d5b499f5f0b53bf0854" + integrity sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw== + +eslint-plugin-react-refresh@^0.4.14: + version "0.4.16" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz#149dbc9279bd16942409f1c1d2f0dce3299430ef" + integrity sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ== + +eslint-scope@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442" + integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +eslint@^9.15.0: + version "9.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.16.0.tgz#66832e66258922ac0a626f803a9273e37747f2a6" + integrity sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.19.0" + "@eslint/core" "^0.9.0" + "@eslint/eslintrc" "^3.2.0" + "@eslint/js" "9.16.0" + "@eslint/plugin-kit" "^0.2.3" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.1" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.5" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.2.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== + dependencies: + acorn "^8.14.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.0" + +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-nonce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" + integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^10.3.10: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globals@^15.12.0: + version "15.13.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-15.13.0.tgz#bbec719d69aafef188ecd67954aae76a696010fc" + integrity sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.13.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + dependencies: + hasown "^2.0.2" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jiti@^1.21.6: + version "1.21.6" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@^3.0.0, lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +loose-envify@^1.0.0, loose-envify@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lucide-react@^0.468.0: + version "0.468.0" + resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.468.0.tgz#830c1bfd905575ddd23b832baa420c87db166910" + integrity sha512-6koYRhnM2N0GGZIdXzSeiNwguv1gt/FAjZOiPl76roBi3xKEXa4WmfpxgQwTTL4KipXjefrnf3oV4IsYhi4JFA== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.7: + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-releases@^2.0.18: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pirates@^4.0.1: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== + dependencies: + lilconfig "^3.0.0" + yaml "^2.3.4" + +postcss-nested@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" + integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== + dependencies: + postcss-selector-parser "^6.1.1" + +postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.4.47, postcss@^8.4.49: + version "8.4.49" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-dom@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.2" + +react-refresh@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== + +react-remove-scroll-bar@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz#3e585e9d163be84a010180b18721e851ac81a29c" + integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g== + dependencies: + react-style-singleton "^2.2.1" + tslib "^2.0.0" + +react-remove-scroll@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz#fb03a0845d7768a4f1519a99fdb84983b793dc07" + integrity sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ== + dependencies: + react-remove-scroll-bar "^2.3.6" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + +react-router-dom@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-7.0.2.tgz#cbd7ce2db7112f1bc3e9eee3657ad32d7515a913" + integrity sha512-VJOQ+CDWFDGaWdrG12Nl+d7yHtLaurNgAQZVgaIy7/Xd+DojgmYLosFfZdGz1wpxmjJIAkAMVTKWcvkx1oggAw== + dependencies: + react-router "7.0.2" + +react-router@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.0.2.tgz#2820e107cb8cec8acc5db15a17470c056ea86022" + integrity sha512-m5AcPfTRUcjwmhBzOJGEl6Y7+Crqyju0+TgTQxoS4SO+BkWbhOrcfZNq6wSWdl2BBbJbsAoBUb8ZacOFT+/JlA== + dependencies: + "@types/cookie" "^0.6.0" + cookie "^1.0.1" + set-cookie-parser "^2.6.0" + turbo-stream "2.4.0" + +react-style-singleton@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" + integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== + dependencies: + get-nonce "^1.0.0" + invariant "^2.2.4" + tslib "^2.0.0" + +react@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== + dependencies: + loose-envify "^1.1.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.1.7, resolve@^1.22.8: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rollup@^4.23.0: + version "4.28.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.28.1.tgz#7718ba34d62b449dfc49adbfd2f312b4fe0df4de" + integrity sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg== + dependencies: + "@types/estree" "1.0.6" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.28.1" + "@rollup/rollup-android-arm64" "4.28.1" + "@rollup/rollup-darwin-arm64" "4.28.1" + "@rollup/rollup-darwin-x64" "4.28.1" + "@rollup/rollup-freebsd-arm64" "4.28.1" + "@rollup/rollup-freebsd-x64" "4.28.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.28.1" + "@rollup/rollup-linux-arm-musleabihf" "4.28.1" + "@rollup/rollup-linux-arm64-gnu" "4.28.1" + "@rollup/rollup-linux-arm64-musl" "4.28.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.28.1" + "@rollup/rollup-linux-powerpc64le-gnu" "4.28.1" + "@rollup/rollup-linux-riscv64-gnu" "4.28.1" + "@rollup/rollup-linux-s390x-gnu" "4.28.1" + "@rollup/rollup-linux-x64-gnu" "4.28.1" + "@rollup/rollup-linux-x64-musl" "4.28.1" + "@rollup/rollup-win32-arm64-msvc" "4.28.1" + "@rollup/rollup-win32-ia32-msvc" "4.28.1" + "@rollup/rollup-win32-x64-msvc" "4.28.1" + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== + dependencies: + loose-envify "^1.1.0" + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.6.0: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +set-cookie-parser@^2.6.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943" + integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + name string-width-cjs + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + name strip-ansi-cjs + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +sucrase@^3.35.0: + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "^10.3.10" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tailwind-merge@^2.5.5: + version "2.5.5" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.5.5.tgz#98167859b856a2a6b8d2baf038ee171b9d814e39" + integrity sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA== + +tailwindcss-animate@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" + integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== + +tailwindcss@^3.4.16: + version "3.4.16" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.16.tgz#35a7c3030844d6000fc271878db4096b6a8d2ec9" + integrity sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.6.0" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.3.2" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.21.6" + lilconfig "^3.1.3" + micromatch "^4.0.8" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.1.1" + postcss "^8.4.47" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.2" + postcss-nested "^6.2.0" + postcss-selector-parser "^6.1.2" + resolve "^1.22.8" + sucrase "^3.35.0" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tslib@^2.0.0, tslib@^2.1.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +turbo-stream@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/turbo-stream/-/turbo-stream-2.4.0.tgz#1e4fca6725e90fa14ac4adb782f2d3759a5695f0" + integrity sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +typescript-eslint@^8.15.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.18.0.tgz#41026f27a3481185f3239d817ae5b960572145a0" + integrity sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ== + dependencies: + "@typescript-eslint/eslint-plugin" "8.18.0" + "@typescript-eslint/parser" "8.18.0" + "@typescript-eslint/utils" "8.18.0" + +typescript@~5.6.2: + version "5.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" + integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-callback-ref@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693" + integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== + dependencies: + tslib "^2.0.0" + +use-sidecar@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" + integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +vite@^6.0.1: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.3.tgz#cc01f403e326a9fc1e064235df8a6de084c8a491" + integrity sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw== + dependencies: + esbuild "^0.24.0" + postcss "^8.4.49" + rollup "^4.23.0" + optionalDependencies: + fsevents "~2.3.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" + integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..cbd8f85 --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,15 @@ +server { + listen 80; + + # Serve static files directly + location / { + root /path/to/frontend/dist; + try_files $uri $uri/ /index.html; + } + + location /api { + proxy_pass http://backend:3000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } +} \ No newline at end of file