├── .env.example
├── .gitignore
├── FAQ
├── general.txt
├── health.txt
└── special.txt
├── README.md
├── all-deployments.yaml
├── docker-compose.yaml
├── frontend
├── .eslintrc.cjs
├── .gitignore
├── Dockerfile
├── index.html
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
│ ├── images
│ │ └── background.jpg
│ └── vite.svg
├── src
│ ├── App.jsx
│ ├── assets
│ │ └── react.svg
│ ├── index.css
│ └── main.jsx
├── tailwind.config.js
└── vite.config.js
├── insert_data.py
├── postgres
├── Dockerfile
└── init.sql
├── service2
├── Dockerfile
└── app.py
└── service3
├── Dockerfile
├── app.py
└── wait-for-postgres.sh
/.env.example:
--------------------------------------------------------------------------------
1 | OPENAI_API_KEY=xxx
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .env
--------------------------------------------------------------------------------
/FAQ/general.txt:
--------------------------------------------------------------------------------
1 | Q: What are the hours of operation for your restaurant?
2 | A: Our restaurant is open from 11 a.m. to 10 p.m. from Monday to Saturday. On Sundays, we open at 12 p.m. and close at 9 p.m.
3 |
4 | Q: What type of cuisine does your restaurant serve?
5 | A: Our restaurant specializes in contemporary American cuisine with an emphasis on local and sustainable ingredients.
6 |
7 | Q: Do you offer vegetarian or vegan options?
8 | A: Yes, we have a range of dishes to cater to vegetarians and vegans. Please let our staff know about any dietary restrictions you have when you order.
--------------------------------------------------------------------------------
/FAQ/health.txt:
--------------------------------------------------------------------------------
1 | Q: What are the ingredients in your gluten-free options?
2 | A: Our gluten-free dishes are prepared using a variety of ingredients that don't contain gluten. Some options include our Quinoa Salad and our Grilled Chicken with Roasted Vegetables.
3 |
4 | Q: What steps is your restaurant taking to ensure safety amid the ongoing pandemic?
5 | A: We adhere to strict health and safety protocols, including regular sanitization, maintaining physical distance between tables, and providing hand sanitizers for customers. We also offer contactless pickup and delivery options.
6 |
7 | Q: Can I request alterations to a dish due to allergies?
8 | A: Absolutely, we strive to accommodate all of our customers' needs. Please inform our staff about any allergies you have, and we'll do our best to modify the dish accordingly.
--------------------------------------------------------------------------------
/FAQ/special.txt:
--------------------------------------------------------------------------------
1 | Q: Can you tell me about your signature dishes?
2 | A: Our signature dishes include our locally-sourced Steak with Truffle Butter, and our Seasonal Vegetable Pasta, which changes based on what's fresh and in season.
3 |
4 | Q: What's included in your Seafood Platter?
5 | A: Our Seafood Platter includes a selection of the freshest catch of the day, including oysters, prawns, clams, and grilled fish, served with our house special sauce.
6 |
7 | Q: Do you have any specials or promotions running currently?
8 | A: Yes, we have a Happy Hour promotion from 3 to 5 p.m. on weekdays, with special prices on selected appetizers and drinks.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Restaurant Chatbot Project
2 |
3 | This project is a restaurant chatbot that is distributed across several microservices. The chatbot can answer general questions about the restaurant, such as operating hours, menu options, and health protocols.
4 |
5 | ## Services
6 |
7 | The project consists of the following services:
8 |
9 | 1. **Frontend:** A React application that provides the user interface for interacting with the chatbot.
10 |
11 | 2. **Service2:** A Python (FastAPI)-based backend that coordinates the communication between the frontend and Service3. This service also manages the interaction history between the user and the chatbot.
12 |
13 | 3. **Service3:** Another Python (FastAPI)-based backend hosting the chatbot algorithm. This service communicates with the AI engine (OpenAI GPT-3.5-turbo) to process user queries and generate suitable responses.
14 |
15 | 4. **Redis:** A Redis server used for state storage across the services.
16 |
17 | 5. **Postgres:** A Postgres server acting as a database for storing vector embeddings.
18 |
19 | ## Setup
20 |
21 | To get the project up and running, make sure Docker is installed on your system.
22 |
23 | Then, run the following command:
24 |
25 | ```bash
26 | docker-compose up
27 | ```
28 |
29 | This command starts all services using the `docker-compose.yml` file. It downloads the necessary Docker images, creates associated containers, and gets them running together.
30 |
31 | ## Data Population
32 |
33 | The provided `insert_data.py` script can be used to populate the Postgres database with your data. To do this, run the script once the services are up and running. It will connect to the Postgres service, create the necessary tables, and insert data into them.
34 |
35 | ## Env Variable
36 |
37 | Rename the .env.example to .env and set your OpenAI API Key.
38 |
39 | # LangChain on KuberNetes - Locally
40 |
41 | 1. Run Registry as Docker Container
42 |
43 | `docker run -d -p 5000:5000 --name local-registry registry:2`
44 |
45 | 2. Build all images locally
46 |
47 | ```shell
48 | docker build -t mypostgres ./postgres
49 | docker build -t myservice2 ./service2
50 | docker build -t myservice3 ./service3
51 | docker build -t myfrontend ./frontend
52 | ```
53 |
54 | 3. Tag and push images
55 |
56 | ```shell
57 | # For Postgres
58 | docker tag mypostgres localhost:5000/mypostgres
59 | docker push localhost:5000/mypostgres
60 |
61 | # For Service2
62 | docker tag myservice2 localhost:5000/myservice2
63 | docker push localhost:5000/myservice2
64 |
65 | # For Service3
66 | docker tag myservice3 localhost:5000/myservice3
67 | docker push localhost:5000/myservice3
68 |
69 | # For Frontend
70 | docker tag myfrontend localhost:5000/myfrontend
71 | docker push localhost:5000/myfrontend
72 | ```
73 |
--------------------------------------------------------------------------------
/all-deployments.yaml:
--------------------------------------------------------------------------------
1 | # Redis
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: redis
6 | spec:
7 | replicas: 1
8 | selector:
9 | matchLabels:
10 | app: redis
11 | template:
12 | metadata:
13 | labels:
14 | app: redis
15 | spec:
16 | containers:
17 | - name: redis
18 | image: redis:latest
19 | volumeMounts:
20 | - name: redis-data
21 | mountPath: /data
22 | volumes:
23 | - name: redis-data
24 | emptyDir: {}
25 | ---
26 | apiVersion: v1
27 | kind: Service
28 | metadata:
29 | name: redis
30 | spec:
31 | selector:
32 | app: redis
33 | ports:
34 | - port: 6379
35 | targetPort: 6379
36 | ---
37 | # Postgres
38 | apiVersion: apps/v1
39 | kind: Deployment
40 | metadata:
41 | name: postgres
42 | spec:
43 | replicas: 1
44 | selector:
45 | matchLabels:
46 | app: postgres
47 | template:
48 | metadata:
49 | labels:
50 | app: postgres
51 | spec:
52 | containers:
53 | - name: postgres
54 | image: mypostgres:latest
55 | ports:
56 | - containerPort: 5432
57 | env:
58 | - name: POSTGRES_USER
59 | value: "admin"
60 | - name: POSTGRES_PASSWORD
61 | value: "admin"
62 | - name: POSTGRES_DB
63 | value: "vectordb"
64 | volumeMounts:
65 | - name: init-sql
66 | mountPath: /docker-entrypoint-initdb.d
67 | volumes:
68 | - name: init-sql
69 | hostPath:
70 | path: /path/on/host/postgres/init.sql
71 | ---
72 | apiVersion: v1
73 | kind: Service
74 | metadata:
75 | name: postgres
76 | spec:
77 | selector:
78 | app: postgres
79 | ports:
80 | - port: 5433
81 | targetPort: 5432
82 | ---
83 | # Service2
84 | apiVersion: apps/v1
85 | kind: Deployment
86 | metadata:
87 | name: service2
88 | spec:
89 | replicas: 1
90 | selector:
91 | matchLabels:
92 | app: service2
93 | template:
94 | metadata:
95 | labels:
96 | app: service2
97 | spec:
98 | containers:
99 | - name: service2
100 | image: myservice2:latest
101 | ports:
102 | - containerPort: 80
103 | ---
104 | apiVersion: v1
105 | kind: Service
106 | metadata:
107 | name: service2
108 | spec:
109 | selector:
110 | app: service2
111 | ports:
112 | - port: 5000
113 | targetPort: 80
114 | ---
115 | # Service3
116 | apiVersion: apps/v1
117 | kind: Deployment
118 | metadata:
119 | name: service3
120 | spec:
121 | replicas: 1
122 | selector:
123 | matchLabels:
124 | app: service3
125 | template:
126 | metadata:
127 | labels:
128 | app: service3
129 | spec:
130 | containers:
131 | - name: service3
132 | image: myservice3:latest
133 | ports:
134 | - containerPort: 80
135 | envFrom:
136 | - configMapRef:
137 | name: service3-configmap
138 | ---
139 | apiVersion: v1
140 | kind: Service
141 | metadata:
142 | name: service3
143 | spec:
144 | selector:
145 | app: service3
146 | ports:
147 | - port: 8000
148 | targetPort: 80
149 | ---
150 | # Frontend
151 | apiVersion: apps/v1
152 | kind: Deployment
153 | metadata:
154 | name: frontend
155 | spec:
156 | replicas: 1
157 | selector:
158 | matchLabels:
159 | app: frontend
160 | template:
161 | metadata:
162 | labels:
163 | app: frontend
164 | spec:
165 | containers:
166 | - name: frontend
167 | image: myfrontend:latest
168 | ports:
169 | - containerPort: 3000
170 | ---
171 | apiVersion: v1
172 | kind: Service
173 | metadata:
174 | name: frontend
175 | spec:
176 | selector:
177 | app: frontend
178 | ports:
179 | - port: 3000
180 | targetPort: 3000
181 |
--------------------------------------------------------------------------------
/docker-compose.yaml:
--------------------------------------------------------------------------------
1 | version: "3"
2 | services:
3 | redis:
4 | image: redis:latest
5 | ports:
6 | - "6379:6379"
7 | volumes:
8 | - redis_data:/data
9 |
10 | postgres:
11 | build: ./postgres
12 | ports:
13 | - "5433:5432"
14 | volumes:
15 | - ./postgres/init.sql:/docker-entrypoint-initdb.d/init.sql
16 | environment:
17 | POSTGRES_USER: admin
18 | POSTGRES_PASSWORD: admin
19 | POSTGRES_DB: vectordb
20 |
21 | service2:
22 | build: ./service2
23 | ports:
24 | - "5000:80"
25 | depends_on:
26 | - postgres
27 |
28 | service3:
29 | build: ./service3
30 | ports:
31 | - "8000:80"
32 | env_file:
33 | - .env
34 | depends_on:
35 | - postgres
36 | frontend:
37 | build: ./frontend
38 | ports:
39 | - "3000:3000"
40 |
41 | volumes:
42 | redis_data:
43 | redis2_data:
44 |
--------------------------------------------------------------------------------
/frontend/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | /* eslint-env node */
2 |
3 | module.exports = {
4 | env: { browser: true, es2020: true },
5 | extends: [
6 | 'eslint:recommended',
7 | 'plugin:react/recommended',
8 | 'plugin:react/jsx-runtime',
9 | 'plugin:react-hooks/recommended',
10 | ],
11 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
12 | settings: { react: { version: '18.2' } },
13 | plugins: ['react-refresh'],
14 | rules: {
15 | 'react-refresh/only-export-components': [
16 | 'warn',
17 | { allowConstantExport: true },
18 | ],
19 | },
20 | }
21 |
--------------------------------------------------------------------------------
/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/frontend/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:18-alpine
2 |
3 | WORKDIR /app
4 |
5 | EXPOSE 3000
6 |
7 | COPY package.json package-lock.json ./
8 |
9 | RUN npm install --silent
10 |
11 | COPY . ./
12 |
13 | CMD ["npm", "run", "dev"]
--------------------------------------------------------------------------------
/frontend/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/frontend/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frontend",
3 | "version": "0.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "frontend",
9 | "version": "0.0.0",
10 | "dependencies": {
11 | "react": "^18.2.0",
12 | "react-dom": "^18.2.0",
13 | "react-icons": "^4.10.1"
14 | },
15 | "devDependencies": {
16 | "@types/react": "^18.2.14",
17 | "@types/react-dom": "^18.2.6",
18 | "@vitejs/plugin-react": "^4.0.1",
19 | "autoprefixer": "^10.4.14",
20 | "eslint": "^8.44.0",
21 | "eslint-plugin-react": "^7.32.2",
22 | "eslint-plugin-react-hooks": "^4.6.0",
23 | "eslint-plugin-react-refresh": "^0.4.1",
24 | "postcss": "^8.4.25",
25 | "tailwindcss": "^3.3.2",
26 | "vite": "^4.4.0"
27 | }
28 | },
29 | "node_modules/@aashutoshrathi/word-wrap": {
30 | "version": "1.2.6",
31 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
32 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
33 | "dev": true,
34 | "engines": {
35 | "node": ">=0.10.0"
36 | }
37 | },
38 | "node_modules/@alloc/quick-lru": {
39 | "version": "5.2.0",
40 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
41 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
42 | "dev": true,
43 | "engines": {
44 | "node": ">=10"
45 | },
46 | "funding": {
47 | "url": "https://github.com/sponsors/sindresorhus"
48 | }
49 | },
50 | "node_modules/@ampproject/remapping": {
51 | "version": "2.2.1",
52 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
53 | "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
54 | "dev": true,
55 | "dependencies": {
56 | "@jridgewell/gen-mapping": "^0.3.0",
57 | "@jridgewell/trace-mapping": "^0.3.9"
58 | },
59 | "engines": {
60 | "node": ">=6.0.0"
61 | }
62 | },
63 | "node_modules/@babel/code-frame": {
64 | "version": "7.22.5",
65 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
66 | "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
67 | "dev": true,
68 | "dependencies": {
69 | "@babel/highlight": "^7.22.5"
70 | },
71 | "engines": {
72 | "node": ">=6.9.0"
73 | }
74 | },
75 | "node_modules/@babel/compat-data": {
76 | "version": "7.22.6",
77 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz",
78 | "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==",
79 | "dev": true,
80 | "engines": {
81 | "node": ">=6.9.0"
82 | }
83 | },
84 | "node_modules/@babel/core": {
85 | "version": "7.22.8",
86 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.8.tgz",
87 | "integrity": "sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==",
88 | "dev": true,
89 | "dependencies": {
90 | "@ampproject/remapping": "^2.2.0",
91 | "@babel/code-frame": "^7.22.5",
92 | "@babel/generator": "^7.22.7",
93 | "@babel/helper-compilation-targets": "^7.22.6",
94 | "@babel/helper-module-transforms": "^7.22.5",
95 | "@babel/helpers": "^7.22.6",
96 | "@babel/parser": "^7.22.7",
97 | "@babel/template": "^7.22.5",
98 | "@babel/traverse": "^7.22.8",
99 | "@babel/types": "^7.22.5",
100 | "@nicolo-ribaudo/semver-v6": "^6.3.3",
101 | "convert-source-map": "^1.7.0",
102 | "debug": "^4.1.0",
103 | "gensync": "^1.0.0-beta.2",
104 | "json5": "^2.2.2"
105 | },
106 | "engines": {
107 | "node": ">=6.9.0"
108 | },
109 | "funding": {
110 | "type": "opencollective",
111 | "url": "https://opencollective.com/babel"
112 | }
113 | },
114 | "node_modules/@babel/generator": {
115 | "version": "7.22.7",
116 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz",
117 | "integrity": "sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==",
118 | "dev": true,
119 | "dependencies": {
120 | "@babel/types": "^7.22.5",
121 | "@jridgewell/gen-mapping": "^0.3.2",
122 | "@jridgewell/trace-mapping": "^0.3.17",
123 | "jsesc": "^2.5.1"
124 | },
125 | "engines": {
126 | "node": ">=6.9.0"
127 | }
128 | },
129 | "node_modules/@babel/helper-compilation-targets": {
130 | "version": "7.22.6",
131 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz",
132 | "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==",
133 | "dev": true,
134 | "dependencies": {
135 | "@babel/compat-data": "^7.22.6",
136 | "@babel/helper-validator-option": "^7.22.5",
137 | "@nicolo-ribaudo/semver-v6": "^6.3.3",
138 | "browserslist": "^4.21.9",
139 | "lru-cache": "^5.1.1"
140 | },
141 | "engines": {
142 | "node": ">=6.9.0"
143 | },
144 | "peerDependencies": {
145 | "@babel/core": "^7.0.0"
146 | }
147 | },
148 | "node_modules/@babel/helper-environment-visitor": {
149 | "version": "7.22.5",
150 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
151 | "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==",
152 | "dev": true,
153 | "engines": {
154 | "node": ">=6.9.0"
155 | }
156 | },
157 | "node_modules/@babel/helper-function-name": {
158 | "version": "7.22.5",
159 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
160 | "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
161 | "dev": true,
162 | "dependencies": {
163 | "@babel/template": "^7.22.5",
164 | "@babel/types": "^7.22.5"
165 | },
166 | "engines": {
167 | "node": ">=6.9.0"
168 | }
169 | },
170 | "node_modules/@babel/helper-hoist-variables": {
171 | "version": "7.22.5",
172 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
173 | "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
174 | "dev": true,
175 | "dependencies": {
176 | "@babel/types": "^7.22.5"
177 | },
178 | "engines": {
179 | "node": ">=6.9.0"
180 | }
181 | },
182 | "node_modules/@babel/helper-module-imports": {
183 | "version": "7.22.5",
184 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
185 | "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
186 | "dev": true,
187 | "dependencies": {
188 | "@babel/types": "^7.22.5"
189 | },
190 | "engines": {
191 | "node": ">=6.9.0"
192 | }
193 | },
194 | "node_modules/@babel/helper-module-transforms": {
195 | "version": "7.22.5",
196 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz",
197 | "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==",
198 | "dev": true,
199 | "dependencies": {
200 | "@babel/helper-environment-visitor": "^7.22.5",
201 | "@babel/helper-module-imports": "^7.22.5",
202 | "@babel/helper-simple-access": "^7.22.5",
203 | "@babel/helper-split-export-declaration": "^7.22.5",
204 | "@babel/helper-validator-identifier": "^7.22.5",
205 | "@babel/template": "^7.22.5",
206 | "@babel/traverse": "^7.22.5",
207 | "@babel/types": "^7.22.5"
208 | },
209 | "engines": {
210 | "node": ">=6.9.0"
211 | }
212 | },
213 | "node_modules/@babel/helper-plugin-utils": {
214 | "version": "7.22.5",
215 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
216 | "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
217 | "dev": true,
218 | "engines": {
219 | "node": ">=6.9.0"
220 | }
221 | },
222 | "node_modules/@babel/helper-simple-access": {
223 | "version": "7.22.5",
224 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
225 | "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
226 | "dev": true,
227 | "dependencies": {
228 | "@babel/types": "^7.22.5"
229 | },
230 | "engines": {
231 | "node": ">=6.9.0"
232 | }
233 | },
234 | "node_modules/@babel/helper-split-export-declaration": {
235 | "version": "7.22.6",
236 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
237 | "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
238 | "dev": true,
239 | "dependencies": {
240 | "@babel/types": "^7.22.5"
241 | },
242 | "engines": {
243 | "node": ">=6.9.0"
244 | }
245 | },
246 | "node_modules/@babel/helper-string-parser": {
247 | "version": "7.22.5",
248 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
249 | "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
250 | "dev": true,
251 | "engines": {
252 | "node": ">=6.9.0"
253 | }
254 | },
255 | "node_modules/@babel/helper-validator-identifier": {
256 | "version": "7.22.5",
257 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
258 | "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
259 | "dev": true,
260 | "engines": {
261 | "node": ">=6.9.0"
262 | }
263 | },
264 | "node_modules/@babel/helper-validator-option": {
265 | "version": "7.22.5",
266 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
267 | "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
268 | "dev": true,
269 | "engines": {
270 | "node": ">=6.9.0"
271 | }
272 | },
273 | "node_modules/@babel/helpers": {
274 | "version": "7.22.6",
275 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz",
276 | "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==",
277 | "dev": true,
278 | "dependencies": {
279 | "@babel/template": "^7.22.5",
280 | "@babel/traverse": "^7.22.6",
281 | "@babel/types": "^7.22.5"
282 | },
283 | "engines": {
284 | "node": ">=6.9.0"
285 | }
286 | },
287 | "node_modules/@babel/highlight": {
288 | "version": "7.22.5",
289 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
290 | "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
291 | "dev": true,
292 | "dependencies": {
293 | "@babel/helper-validator-identifier": "^7.22.5",
294 | "chalk": "^2.0.0",
295 | "js-tokens": "^4.0.0"
296 | },
297 | "engines": {
298 | "node": ">=6.9.0"
299 | }
300 | },
301 | "node_modules/@babel/parser": {
302 | "version": "7.22.7",
303 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz",
304 | "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==",
305 | "dev": true,
306 | "bin": {
307 | "parser": "bin/babel-parser.js"
308 | },
309 | "engines": {
310 | "node": ">=6.0.0"
311 | }
312 | },
313 | "node_modules/@babel/plugin-transform-react-jsx-self": {
314 | "version": "7.22.5",
315 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz",
316 | "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==",
317 | "dev": true,
318 | "dependencies": {
319 | "@babel/helper-plugin-utils": "^7.22.5"
320 | },
321 | "engines": {
322 | "node": ">=6.9.0"
323 | },
324 | "peerDependencies": {
325 | "@babel/core": "^7.0.0-0"
326 | }
327 | },
328 | "node_modules/@babel/plugin-transform-react-jsx-source": {
329 | "version": "7.22.5",
330 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz",
331 | "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==",
332 | "dev": true,
333 | "dependencies": {
334 | "@babel/helper-plugin-utils": "^7.22.5"
335 | },
336 | "engines": {
337 | "node": ">=6.9.0"
338 | },
339 | "peerDependencies": {
340 | "@babel/core": "^7.0.0-0"
341 | }
342 | },
343 | "node_modules/@babel/template": {
344 | "version": "7.22.5",
345 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
346 | "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==",
347 | "dev": true,
348 | "dependencies": {
349 | "@babel/code-frame": "^7.22.5",
350 | "@babel/parser": "^7.22.5",
351 | "@babel/types": "^7.22.5"
352 | },
353 | "engines": {
354 | "node": ">=6.9.0"
355 | }
356 | },
357 | "node_modules/@babel/traverse": {
358 | "version": "7.22.8",
359 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz",
360 | "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==",
361 | "dev": true,
362 | "dependencies": {
363 | "@babel/code-frame": "^7.22.5",
364 | "@babel/generator": "^7.22.7",
365 | "@babel/helper-environment-visitor": "^7.22.5",
366 | "@babel/helper-function-name": "^7.22.5",
367 | "@babel/helper-hoist-variables": "^7.22.5",
368 | "@babel/helper-split-export-declaration": "^7.22.6",
369 | "@babel/parser": "^7.22.7",
370 | "@babel/types": "^7.22.5",
371 | "debug": "^4.1.0",
372 | "globals": "^11.1.0"
373 | },
374 | "engines": {
375 | "node": ">=6.9.0"
376 | }
377 | },
378 | "node_modules/@babel/types": {
379 | "version": "7.22.5",
380 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz",
381 | "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==",
382 | "dev": true,
383 | "dependencies": {
384 | "@babel/helper-string-parser": "^7.22.5",
385 | "@babel/helper-validator-identifier": "^7.22.5",
386 | "to-fast-properties": "^2.0.0"
387 | },
388 | "engines": {
389 | "node": ">=6.9.0"
390 | }
391 | },
392 | "node_modules/@esbuild/android-arm": {
393 | "version": "0.18.11",
394 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.11.tgz",
395 | "integrity": "sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==",
396 | "cpu": [
397 | "arm"
398 | ],
399 | "dev": true,
400 | "optional": true,
401 | "os": [
402 | "android"
403 | ],
404 | "engines": {
405 | "node": ">=12"
406 | }
407 | },
408 | "node_modules/@esbuild/android-arm64": {
409 | "version": "0.18.11",
410 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz",
411 | "integrity": "sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==",
412 | "cpu": [
413 | "arm64"
414 | ],
415 | "dev": true,
416 | "optional": true,
417 | "os": [
418 | "android"
419 | ],
420 | "engines": {
421 | "node": ">=12"
422 | }
423 | },
424 | "node_modules/@esbuild/android-x64": {
425 | "version": "0.18.11",
426 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.11.tgz",
427 | "integrity": "sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==",
428 | "cpu": [
429 | "x64"
430 | ],
431 | "dev": true,
432 | "optional": true,
433 | "os": [
434 | "android"
435 | ],
436 | "engines": {
437 | "node": ">=12"
438 | }
439 | },
440 | "node_modules/@esbuild/darwin-arm64": {
441 | "version": "0.18.11",
442 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz",
443 | "integrity": "sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==",
444 | "cpu": [
445 | "arm64"
446 | ],
447 | "dev": true,
448 | "optional": true,
449 | "os": [
450 | "darwin"
451 | ],
452 | "engines": {
453 | "node": ">=12"
454 | }
455 | },
456 | "node_modules/@esbuild/darwin-x64": {
457 | "version": "0.18.11",
458 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz",
459 | "integrity": "sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==",
460 | "cpu": [
461 | "x64"
462 | ],
463 | "dev": true,
464 | "optional": true,
465 | "os": [
466 | "darwin"
467 | ],
468 | "engines": {
469 | "node": ">=12"
470 | }
471 | },
472 | "node_modules/@esbuild/freebsd-arm64": {
473 | "version": "0.18.11",
474 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz",
475 | "integrity": "sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==",
476 | "cpu": [
477 | "arm64"
478 | ],
479 | "dev": true,
480 | "optional": true,
481 | "os": [
482 | "freebsd"
483 | ],
484 | "engines": {
485 | "node": ">=12"
486 | }
487 | },
488 | "node_modules/@esbuild/freebsd-x64": {
489 | "version": "0.18.11",
490 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz",
491 | "integrity": "sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==",
492 | "cpu": [
493 | "x64"
494 | ],
495 | "dev": true,
496 | "optional": true,
497 | "os": [
498 | "freebsd"
499 | ],
500 | "engines": {
501 | "node": ">=12"
502 | }
503 | },
504 | "node_modules/@esbuild/linux-arm": {
505 | "version": "0.18.11",
506 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz",
507 | "integrity": "sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==",
508 | "cpu": [
509 | "arm"
510 | ],
511 | "dev": true,
512 | "optional": true,
513 | "os": [
514 | "linux"
515 | ],
516 | "engines": {
517 | "node": ">=12"
518 | }
519 | },
520 | "node_modules/@esbuild/linux-arm64": {
521 | "version": "0.18.11",
522 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz",
523 | "integrity": "sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==",
524 | "cpu": [
525 | "arm64"
526 | ],
527 | "dev": true,
528 | "optional": true,
529 | "os": [
530 | "linux"
531 | ],
532 | "engines": {
533 | "node": ">=12"
534 | }
535 | },
536 | "node_modules/@esbuild/linux-ia32": {
537 | "version": "0.18.11",
538 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz",
539 | "integrity": "sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==",
540 | "cpu": [
541 | "ia32"
542 | ],
543 | "dev": true,
544 | "optional": true,
545 | "os": [
546 | "linux"
547 | ],
548 | "engines": {
549 | "node": ">=12"
550 | }
551 | },
552 | "node_modules/@esbuild/linux-loong64": {
553 | "version": "0.18.11",
554 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz",
555 | "integrity": "sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==",
556 | "cpu": [
557 | "loong64"
558 | ],
559 | "dev": true,
560 | "optional": true,
561 | "os": [
562 | "linux"
563 | ],
564 | "engines": {
565 | "node": ">=12"
566 | }
567 | },
568 | "node_modules/@esbuild/linux-mips64el": {
569 | "version": "0.18.11",
570 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz",
571 | "integrity": "sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==",
572 | "cpu": [
573 | "mips64el"
574 | ],
575 | "dev": true,
576 | "optional": true,
577 | "os": [
578 | "linux"
579 | ],
580 | "engines": {
581 | "node": ">=12"
582 | }
583 | },
584 | "node_modules/@esbuild/linux-ppc64": {
585 | "version": "0.18.11",
586 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz",
587 | "integrity": "sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==",
588 | "cpu": [
589 | "ppc64"
590 | ],
591 | "dev": true,
592 | "optional": true,
593 | "os": [
594 | "linux"
595 | ],
596 | "engines": {
597 | "node": ">=12"
598 | }
599 | },
600 | "node_modules/@esbuild/linux-riscv64": {
601 | "version": "0.18.11",
602 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz",
603 | "integrity": "sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==",
604 | "cpu": [
605 | "riscv64"
606 | ],
607 | "dev": true,
608 | "optional": true,
609 | "os": [
610 | "linux"
611 | ],
612 | "engines": {
613 | "node": ">=12"
614 | }
615 | },
616 | "node_modules/@esbuild/linux-s390x": {
617 | "version": "0.18.11",
618 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz",
619 | "integrity": "sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==",
620 | "cpu": [
621 | "s390x"
622 | ],
623 | "dev": true,
624 | "optional": true,
625 | "os": [
626 | "linux"
627 | ],
628 | "engines": {
629 | "node": ">=12"
630 | }
631 | },
632 | "node_modules/@esbuild/linux-x64": {
633 | "version": "0.18.11",
634 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz",
635 | "integrity": "sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==",
636 | "cpu": [
637 | "x64"
638 | ],
639 | "dev": true,
640 | "optional": true,
641 | "os": [
642 | "linux"
643 | ],
644 | "engines": {
645 | "node": ">=12"
646 | }
647 | },
648 | "node_modules/@esbuild/netbsd-x64": {
649 | "version": "0.18.11",
650 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz",
651 | "integrity": "sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==",
652 | "cpu": [
653 | "x64"
654 | ],
655 | "dev": true,
656 | "optional": true,
657 | "os": [
658 | "netbsd"
659 | ],
660 | "engines": {
661 | "node": ">=12"
662 | }
663 | },
664 | "node_modules/@esbuild/openbsd-x64": {
665 | "version": "0.18.11",
666 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz",
667 | "integrity": "sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==",
668 | "cpu": [
669 | "x64"
670 | ],
671 | "dev": true,
672 | "optional": true,
673 | "os": [
674 | "openbsd"
675 | ],
676 | "engines": {
677 | "node": ">=12"
678 | }
679 | },
680 | "node_modules/@esbuild/sunos-x64": {
681 | "version": "0.18.11",
682 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz",
683 | "integrity": "sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==",
684 | "cpu": [
685 | "x64"
686 | ],
687 | "dev": true,
688 | "optional": true,
689 | "os": [
690 | "sunos"
691 | ],
692 | "engines": {
693 | "node": ">=12"
694 | }
695 | },
696 | "node_modules/@esbuild/win32-arm64": {
697 | "version": "0.18.11",
698 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz",
699 | "integrity": "sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==",
700 | "cpu": [
701 | "arm64"
702 | ],
703 | "dev": true,
704 | "optional": true,
705 | "os": [
706 | "win32"
707 | ],
708 | "engines": {
709 | "node": ">=12"
710 | }
711 | },
712 | "node_modules/@esbuild/win32-ia32": {
713 | "version": "0.18.11",
714 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz",
715 | "integrity": "sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==",
716 | "cpu": [
717 | "ia32"
718 | ],
719 | "dev": true,
720 | "optional": true,
721 | "os": [
722 | "win32"
723 | ],
724 | "engines": {
725 | "node": ">=12"
726 | }
727 | },
728 | "node_modules/@esbuild/win32-x64": {
729 | "version": "0.18.11",
730 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz",
731 | "integrity": "sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==",
732 | "cpu": [
733 | "x64"
734 | ],
735 | "dev": true,
736 | "optional": true,
737 | "os": [
738 | "win32"
739 | ],
740 | "engines": {
741 | "node": ">=12"
742 | }
743 | },
744 | "node_modules/@eslint-community/eslint-utils": {
745 | "version": "4.4.0",
746 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
747 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
748 | "dev": true,
749 | "dependencies": {
750 | "eslint-visitor-keys": "^3.3.0"
751 | },
752 | "engines": {
753 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
754 | },
755 | "peerDependencies": {
756 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
757 | }
758 | },
759 | "node_modules/@eslint-community/regexpp": {
760 | "version": "4.5.1",
761 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
762 | "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
763 | "dev": true,
764 | "engines": {
765 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
766 | }
767 | },
768 | "node_modules/@eslint/eslintrc": {
769 | "version": "2.1.0",
770 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz",
771 | "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==",
772 | "dev": true,
773 | "dependencies": {
774 | "ajv": "^6.12.4",
775 | "debug": "^4.3.2",
776 | "espree": "^9.6.0",
777 | "globals": "^13.19.0",
778 | "ignore": "^5.2.0",
779 | "import-fresh": "^3.2.1",
780 | "js-yaml": "^4.1.0",
781 | "minimatch": "^3.1.2",
782 | "strip-json-comments": "^3.1.1"
783 | },
784 | "engines": {
785 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
786 | },
787 | "funding": {
788 | "url": "https://opencollective.com/eslint"
789 | }
790 | },
791 | "node_modules/@eslint/eslintrc/node_modules/globals": {
792 | "version": "13.20.0",
793 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
794 | "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
795 | "dev": true,
796 | "dependencies": {
797 | "type-fest": "^0.20.2"
798 | },
799 | "engines": {
800 | "node": ">=8"
801 | },
802 | "funding": {
803 | "url": "https://github.com/sponsors/sindresorhus"
804 | }
805 | },
806 | "node_modules/@eslint/js": {
807 | "version": "8.44.0",
808 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz",
809 | "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==",
810 | "dev": true,
811 | "engines": {
812 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
813 | }
814 | },
815 | "node_modules/@humanwhocodes/config-array": {
816 | "version": "0.11.10",
817 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
818 | "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
819 | "dev": true,
820 | "dependencies": {
821 | "@humanwhocodes/object-schema": "^1.2.1",
822 | "debug": "^4.1.1",
823 | "minimatch": "^3.0.5"
824 | },
825 | "engines": {
826 | "node": ">=10.10.0"
827 | }
828 | },
829 | "node_modules/@humanwhocodes/module-importer": {
830 | "version": "1.0.1",
831 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
832 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
833 | "dev": true,
834 | "engines": {
835 | "node": ">=12.22"
836 | },
837 | "funding": {
838 | "type": "github",
839 | "url": "https://github.com/sponsors/nzakas"
840 | }
841 | },
842 | "node_modules/@humanwhocodes/object-schema": {
843 | "version": "1.2.1",
844 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
845 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
846 | "dev": true
847 | },
848 | "node_modules/@jridgewell/gen-mapping": {
849 | "version": "0.3.3",
850 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
851 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
852 | "dev": true,
853 | "dependencies": {
854 | "@jridgewell/set-array": "^1.0.1",
855 | "@jridgewell/sourcemap-codec": "^1.4.10",
856 | "@jridgewell/trace-mapping": "^0.3.9"
857 | },
858 | "engines": {
859 | "node": ">=6.0.0"
860 | }
861 | },
862 | "node_modules/@jridgewell/resolve-uri": {
863 | "version": "3.1.0",
864 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
865 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
866 | "dev": true,
867 | "engines": {
868 | "node": ">=6.0.0"
869 | }
870 | },
871 | "node_modules/@jridgewell/set-array": {
872 | "version": "1.1.2",
873 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
874 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
875 | "dev": true,
876 | "engines": {
877 | "node": ">=6.0.0"
878 | }
879 | },
880 | "node_modules/@jridgewell/sourcemap-codec": {
881 | "version": "1.4.15",
882 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
883 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
884 | "dev": true
885 | },
886 | "node_modules/@jridgewell/trace-mapping": {
887 | "version": "0.3.18",
888 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
889 | "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
890 | "dev": true,
891 | "dependencies": {
892 | "@jridgewell/resolve-uri": "3.1.0",
893 | "@jridgewell/sourcemap-codec": "1.4.14"
894 | }
895 | },
896 | "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
897 | "version": "1.4.14",
898 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
899 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
900 | "dev": true
901 | },
902 | "node_modules/@nicolo-ribaudo/semver-v6": {
903 | "version": "6.3.3",
904 | "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
905 | "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
906 | "dev": true,
907 | "bin": {
908 | "semver": "bin/semver.js"
909 | }
910 | },
911 | "node_modules/@nodelib/fs.scandir": {
912 | "version": "2.1.5",
913 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
914 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
915 | "dev": true,
916 | "dependencies": {
917 | "@nodelib/fs.stat": "2.0.5",
918 | "run-parallel": "^1.1.9"
919 | },
920 | "engines": {
921 | "node": ">= 8"
922 | }
923 | },
924 | "node_modules/@nodelib/fs.stat": {
925 | "version": "2.0.5",
926 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
927 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
928 | "dev": true,
929 | "engines": {
930 | "node": ">= 8"
931 | }
932 | },
933 | "node_modules/@nodelib/fs.walk": {
934 | "version": "1.2.8",
935 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
936 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
937 | "dev": true,
938 | "dependencies": {
939 | "@nodelib/fs.scandir": "2.1.5",
940 | "fastq": "^1.6.0"
941 | },
942 | "engines": {
943 | "node": ">= 8"
944 | }
945 | },
946 | "node_modules/@types/prop-types": {
947 | "version": "15.7.5",
948 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
949 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
950 | "dev": true
951 | },
952 | "node_modules/@types/react": {
953 | "version": "18.2.14",
954 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz",
955 | "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==",
956 | "dev": true,
957 | "dependencies": {
958 | "@types/prop-types": "*",
959 | "@types/scheduler": "*",
960 | "csstype": "^3.0.2"
961 | }
962 | },
963 | "node_modules/@types/react-dom": {
964 | "version": "18.2.6",
965 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz",
966 | "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==",
967 | "dev": true,
968 | "dependencies": {
969 | "@types/react": "*"
970 | }
971 | },
972 | "node_modules/@types/scheduler": {
973 | "version": "0.16.3",
974 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
975 | "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==",
976 | "dev": true
977 | },
978 | "node_modules/@vitejs/plugin-react": {
979 | "version": "4.0.2",
980 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.2.tgz",
981 | "integrity": "sha512-zbnVp3Esfg33zDaoLrjxG+p/dPiOtpvJA+1oOEQwSxMMTRL9zi1eghIcd2WtLjkcKnPsa3S15LzS/OzDn2BOCA==",
982 | "dev": true,
983 | "dependencies": {
984 | "@babel/core": "^7.22.5",
985 | "@babel/plugin-transform-react-jsx-self": "^7.22.5",
986 | "@babel/plugin-transform-react-jsx-source": "^7.22.5",
987 | "react-refresh": "^0.14.0"
988 | },
989 | "engines": {
990 | "node": "^14.18.0 || >=16.0.0"
991 | },
992 | "peerDependencies": {
993 | "vite": "^4.2.0"
994 | }
995 | },
996 | "node_modules/acorn": {
997 | "version": "8.10.0",
998 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
999 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
1000 | "dev": true,
1001 | "bin": {
1002 | "acorn": "bin/acorn"
1003 | },
1004 | "engines": {
1005 | "node": ">=0.4.0"
1006 | }
1007 | },
1008 | "node_modules/acorn-jsx": {
1009 | "version": "5.3.2",
1010 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
1011 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
1012 | "dev": true,
1013 | "peerDependencies": {
1014 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
1015 | }
1016 | },
1017 | "node_modules/ajv": {
1018 | "version": "6.12.6",
1019 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1020 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1021 | "dev": true,
1022 | "dependencies": {
1023 | "fast-deep-equal": "^3.1.1",
1024 | "fast-json-stable-stringify": "^2.0.0",
1025 | "json-schema-traverse": "^0.4.1",
1026 | "uri-js": "^4.2.2"
1027 | },
1028 | "funding": {
1029 | "type": "github",
1030 | "url": "https://github.com/sponsors/epoberezkin"
1031 | }
1032 | },
1033 | "node_modules/ansi-regex": {
1034 | "version": "5.0.1",
1035 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1036 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1037 | "dev": true,
1038 | "engines": {
1039 | "node": ">=8"
1040 | }
1041 | },
1042 | "node_modules/ansi-styles": {
1043 | "version": "3.2.1",
1044 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1045 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1046 | "dev": true,
1047 | "dependencies": {
1048 | "color-convert": "^1.9.0"
1049 | },
1050 | "engines": {
1051 | "node": ">=4"
1052 | }
1053 | },
1054 | "node_modules/any-promise": {
1055 | "version": "1.3.0",
1056 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
1057 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
1058 | "dev": true
1059 | },
1060 | "node_modules/anymatch": {
1061 | "version": "3.1.3",
1062 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1063 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
1064 | "dev": true,
1065 | "dependencies": {
1066 | "normalize-path": "^3.0.0",
1067 | "picomatch": "^2.0.4"
1068 | },
1069 | "engines": {
1070 | "node": ">= 8"
1071 | }
1072 | },
1073 | "node_modules/arg": {
1074 | "version": "5.0.2",
1075 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1076 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
1077 | "dev": true
1078 | },
1079 | "node_modules/argparse": {
1080 | "version": "2.0.1",
1081 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1082 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
1083 | "dev": true
1084 | },
1085 | "node_modules/array-buffer-byte-length": {
1086 | "version": "1.0.0",
1087 | "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
1088 | "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
1089 | "dev": true,
1090 | "dependencies": {
1091 | "call-bind": "^1.0.2",
1092 | "is-array-buffer": "^3.0.1"
1093 | },
1094 | "funding": {
1095 | "url": "https://github.com/sponsors/ljharb"
1096 | }
1097 | },
1098 | "node_modules/array-includes": {
1099 | "version": "3.1.6",
1100 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
1101 | "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
1102 | "dev": true,
1103 | "dependencies": {
1104 | "call-bind": "^1.0.2",
1105 | "define-properties": "^1.1.4",
1106 | "es-abstract": "^1.20.4",
1107 | "get-intrinsic": "^1.1.3",
1108 | "is-string": "^1.0.7"
1109 | },
1110 | "engines": {
1111 | "node": ">= 0.4"
1112 | },
1113 | "funding": {
1114 | "url": "https://github.com/sponsors/ljharb"
1115 | }
1116 | },
1117 | "node_modules/array.prototype.flat": {
1118 | "version": "1.3.1",
1119 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
1120 | "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
1121 | "dev": true,
1122 | "dependencies": {
1123 | "call-bind": "^1.0.2",
1124 | "define-properties": "^1.1.4",
1125 | "es-abstract": "^1.20.4",
1126 | "es-shim-unscopables": "^1.0.0"
1127 | },
1128 | "engines": {
1129 | "node": ">= 0.4"
1130 | },
1131 | "funding": {
1132 | "url": "https://github.com/sponsors/ljharb"
1133 | }
1134 | },
1135 | "node_modules/array.prototype.flatmap": {
1136 | "version": "1.3.1",
1137 | "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
1138 | "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
1139 | "dev": true,
1140 | "dependencies": {
1141 | "call-bind": "^1.0.2",
1142 | "define-properties": "^1.1.4",
1143 | "es-abstract": "^1.20.4",
1144 | "es-shim-unscopables": "^1.0.0"
1145 | },
1146 | "engines": {
1147 | "node": ">= 0.4"
1148 | },
1149 | "funding": {
1150 | "url": "https://github.com/sponsors/ljharb"
1151 | }
1152 | },
1153 | "node_modules/array.prototype.tosorted": {
1154 | "version": "1.1.1",
1155 | "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
1156 | "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
1157 | "dev": true,
1158 | "dependencies": {
1159 | "call-bind": "^1.0.2",
1160 | "define-properties": "^1.1.4",
1161 | "es-abstract": "^1.20.4",
1162 | "es-shim-unscopables": "^1.0.0",
1163 | "get-intrinsic": "^1.1.3"
1164 | }
1165 | },
1166 | "node_modules/autoprefixer": {
1167 | "version": "10.4.14",
1168 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
1169 | "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
1170 | "dev": true,
1171 | "funding": [
1172 | {
1173 | "type": "opencollective",
1174 | "url": "https://opencollective.com/postcss/"
1175 | },
1176 | {
1177 | "type": "tidelift",
1178 | "url": "https://tidelift.com/funding/github/npm/autoprefixer"
1179 | }
1180 | ],
1181 | "dependencies": {
1182 | "browserslist": "^4.21.5",
1183 | "caniuse-lite": "^1.0.30001464",
1184 | "fraction.js": "^4.2.0",
1185 | "normalize-range": "^0.1.2",
1186 | "picocolors": "^1.0.0",
1187 | "postcss-value-parser": "^4.2.0"
1188 | },
1189 | "bin": {
1190 | "autoprefixer": "bin/autoprefixer"
1191 | },
1192 | "engines": {
1193 | "node": "^10 || ^12 || >=14"
1194 | },
1195 | "peerDependencies": {
1196 | "postcss": "^8.1.0"
1197 | }
1198 | },
1199 | "node_modules/available-typed-arrays": {
1200 | "version": "1.0.5",
1201 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
1202 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
1203 | "dev": true,
1204 | "engines": {
1205 | "node": ">= 0.4"
1206 | },
1207 | "funding": {
1208 | "url": "https://github.com/sponsors/ljharb"
1209 | }
1210 | },
1211 | "node_modules/balanced-match": {
1212 | "version": "1.0.2",
1213 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1214 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1215 | "dev": true
1216 | },
1217 | "node_modules/binary-extensions": {
1218 | "version": "2.2.0",
1219 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
1220 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
1221 | "dev": true,
1222 | "engines": {
1223 | "node": ">=8"
1224 | }
1225 | },
1226 | "node_modules/brace-expansion": {
1227 | "version": "1.1.11",
1228 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1229 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1230 | "dev": true,
1231 | "dependencies": {
1232 | "balanced-match": "^1.0.0",
1233 | "concat-map": "0.0.1"
1234 | }
1235 | },
1236 | "node_modules/braces": {
1237 | "version": "3.0.2",
1238 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
1239 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
1240 | "dev": true,
1241 | "dependencies": {
1242 | "fill-range": "^7.0.1"
1243 | },
1244 | "engines": {
1245 | "node": ">=8"
1246 | }
1247 | },
1248 | "node_modules/browserslist": {
1249 | "version": "4.21.9",
1250 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
1251 | "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
1252 | "dev": true,
1253 | "funding": [
1254 | {
1255 | "type": "opencollective",
1256 | "url": "https://opencollective.com/browserslist"
1257 | },
1258 | {
1259 | "type": "tidelift",
1260 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1261 | },
1262 | {
1263 | "type": "github",
1264 | "url": "https://github.com/sponsors/ai"
1265 | }
1266 | ],
1267 | "dependencies": {
1268 | "caniuse-lite": "^1.0.30001503",
1269 | "electron-to-chromium": "^1.4.431",
1270 | "node-releases": "^2.0.12",
1271 | "update-browserslist-db": "^1.0.11"
1272 | },
1273 | "bin": {
1274 | "browserslist": "cli.js"
1275 | },
1276 | "engines": {
1277 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1278 | }
1279 | },
1280 | "node_modules/call-bind": {
1281 | "version": "1.0.2",
1282 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
1283 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
1284 | "dev": true,
1285 | "dependencies": {
1286 | "function-bind": "^1.1.1",
1287 | "get-intrinsic": "^1.0.2"
1288 | },
1289 | "funding": {
1290 | "url": "https://github.com/sponsors/ljharb"
1291 | }
1292 | },
1293 | "node_modules/callsites": {
1294 | "version": "3.1.0",
1295 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1296 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1297 | "dev": true,
1298 | "engines": {
1299 | "node": ">=6"
1300 | }
1301 | },
1302 | "node_modules/camelcase-css": {
1303 | "version": "2.0.1",
1304 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1305 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
1306 | "dev": true,
1307 | "engines": {
1308 | "node": ">= 6"
1309 | }
1310 | },
1311 | "node_modules/caniuse-lite": {
1312 | "version": "1.0.30001514",
1313 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001514.tgz",
1314 | "integrity": "sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ==",
1315 | "dev": true,
1316 | "funding": [
1317 | {
1318 | "type": "opencollective",
1319 | "url": "https://opencollective.com/browserslist"
1320 | },
1321 | {
1322 | "type": "tidelift",
1323 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1324 | },
1325 | {
1326 | "type": "github",
1327 | "url": "https://github.com/sponsors/ai"
1328 | }
1329 | ]
1330 | },
1331 | "node_modules/chalk": {
1332 | "version": "2.4.2",
1333 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1334 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1335 | "dev": true,
1336 | "dependencies": {
1337 | "ansi-styles": "^3.2.1",
1338 | "escape-string-regexp": "^1.0.5",
1339 | "supports-color": "^5.3.0"
1340 | },
1341 | "engines": {
1342 | "node": ">=4"
1343 | }
1344 | },
1345 | "node_modules/chokidar": {
1346 | "version": "3.5.3",
1347 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
1348 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
1349 | "dev": true,
1350 | "funding": [
1351 | {
1352 | "type": "individual",
1353 | "url": "https://paulmillr.com/funding/"
1354 | }
1355 | ],
1356 | "dependencies": {
1357 | "anymatch": "~3.1.2",
1358 | "braces": "~3.0.2",
1359 | "glob-parent": "~5.1.2",
1360 | "is-binary-path": "~2.1.0",
1361 | "is-glob": "~4.0.1",
1362 | "normalize-path": "~3.0.0",
1363 | "readdirp": "~3.6.0"
1364 | },
1365 | "engines": {
1366 | "node": ">= 8.10.0"
1367 | },
1368 | "optionalDependencies": {
1369 | "fsevents": "~2.3.2"
1370 | }
1371 | },
1372 | "node_modules/chokidar/node_modules/glob-parent": {
1373 | "version": "5.1.2",
1374 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1375 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1376 | "dev": true,
1377 | "dependencies": {
1378 | "is-glob": "^4.0.1"
1379 | },
1380 | "engines": {
1381 | "node": ">= 6"
1382 | }
1383 | },
1384 | "node_modules/color-convert": {
1385 | "version": "1.9.3",
1386 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1387 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1388 | "dev": true,
1389 | "dependencies": {
1390 | "color-name": "1.1.3"
1391 | }
1392 | },
1393 | "node_modules/color-name": {
1394 | "version": "1.1.3",
1395 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1396 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
1397 | "dev": true
1398 | },
1399 | "node_modules/commander": {
1400 | "version": "4.1.1",
1401 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1402 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
1403 | "dev": true,
1404 | "engines": {
1405 | "node": ">= 6"
1406 | }
1407 | },
1408 | "node_modules/concat-map": {
1409 | "version": "0.0.1",
1410 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1411 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1412 | "dev": true
1413 | },
1414 | "node_modules/convert-source-map": {
1415 | "version": "1.9.0",
1416 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
1417 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
1418 | "dev": true
1419 | },
1420 | "node_modules/cross-spawn": {
1421 | "version": "7.0.3",
1422 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
1423 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
1424 | "dev": true,
1425 | "dependencies": {
1426 | "path-key": "^3.1.0",
1427 | "shebang-command": "^2.0.0",
1428 | "which": "^2.0.1"
1429 | },
1430 | "engines": {
1431 | "node": ">= 8"
1432 | }
1433 | },
1434 | "node_modules/cssesc": {
1435 | "version": "3.0.0",
1436 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1437 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1438 | "dev": true,
1439 | "bin": {
1440 | "cssesc": "bin/cssesc"
1441 | },
1442 | "engines": {
1443 | "node": ">=4"
1444 | }
1445 | },
1446 | "node_modules/csstype": {
1447 | "version": "3.1.2",
1448 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
1449 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
1450 | "dev": true
1451 | },
1452 | "node_modules/debug": {
1453 | "version": "4.3.4",
1454 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1455 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1456 | "dev": true,
1457 | "dependencies": {
1458 | "ms": "2.1.2"
1459 | },
1460 | "engines": {
1461 | "node": ">=6.0"
1462 | },
1463 | "peerDependenciesMeta": {
1464 | "supports-color": {
1465 | "optional": true
1466 | }
1467 | }
1468 | },
1469 | "node_modules/deep-is": {
1470 | "version": "0.1.4",
1471 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
1472 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
1473 | "dev": true
1474 | },
1475 | "node_modules/define-properties": {
1476 | "version": "1.2.0",
1477 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
1478 | "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
1479 | "dev": true,
1480 | "dependencies": {
1481 | "has-property-descriptors": "^1.0.0",
1482 | "object-keys": "^1.1.1"
1483 | },
1484 | "engines": {
1485 | "node": ">= 0.4"
1486 | },
1487 | "funding": {
1488 | "url": "https://github.com/sponsors/ljharb"
1489 | }
1490 | },
1491 | "node_modules/didyoumean": {
1492 | "version": "1.2.2",
1493 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1494 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
1495 | "dev": true
1496 | },
1497 | "node_modules/dlv": {
1498 | "version": "1.1.3",
1499 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1500 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
1501 | "dev": true
1502 | },
1503 | "node_modules/doctrine": {
1504 | "version": "3.0.0",
1505 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
1506 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
1507 | "dev": true,
1508 | "dependencies": {
1509 | "esutils": "^2.0.2"
1510 | },
1511 | "engines": {
1512 | "node": ">=6.0.0"
1513 | }
1514 | },
1515 | "node_modules/electron-to-chromium": {
1516 | "version": "1.4.454",
1517 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.454.tgz",
1518 | "integrity": "sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==",
1519 | "dev": true
1520 | },
1521 | "node_modules/es-abstract": {
1522 | "version": "1.21.2",
1523 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
1524 | "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
1525 | "dev": true,
1526 | "dependencies": {
1527 | "array-buffer-byte-length": "^1.0.0",
1528 | "available-typed-arrays": "^1.0.5",
1529 | "call-bind": "^1.0.2",
1530 | "es-set-tostringtag": "^2.0.1",
1531 | "es-to-primitive": "^1.2.1",
1532 | "function.prototype.name": "^1.1.5",
1533 | "get-intrinsic": "^1.2.0",
1534 | "get-symbol-description": "^1.0.0",
1535 | "globalthis": "^1.0.3",
1536 | "gopd": "^1.0.1",
1537 | "has": "^1.0.3",
1538 | "has-property-descriptors": "^1.0.0",
1539 | "has-proto": "^1.0.1",
1540 | "has-symbols": "^1.0.3",
1541 | "internal-slot": "^1.0.5",
1542 | "is-array-buffer": "^3.0.2",
1543 | "is-callable": "^1.2.7",
1544 | "is-negative-zero": "^2.0.2",
1545 | "is-regex": "^1.1.4",
1546 | "is-shared-array-buffer": "^1.0.2",
1547 | "is-string": "^1.0.7",
1548 | "is-typed-array": "^1.1.10",
1549 | "is-weakref": "^1.0.2",
1550 | "object-inspect": "^1.12.3",
1551 | "object-keys": "^1.1.1",
1552 | "object.assign": "^4.1.4",
1553 | "regexp.prototype.flags": "^1.4.3",
1554 | "safe-regex-test": "^1.0.0",
1555 | "string.prototype.trim": "^1.2.7",
1556 | "string.prototype.trimend": "^1.0.6",
1557 | "string.prototype.trimstart": "^1.0.6",
1558 | "typed-array-length": "^1.0.4",
1559 | "unbox-primitive": "^1.0.2",
1560 | "which-typed-array": "^1.1.9"
1561 | },
1562 | "engines": {
1563 | "node": ">= 0.4"
1564 | },
1565 | "funding": {
1566 | "url": "https://github.com/sponsors/ljharb"
1567 | }
1568 | },
1569 | "node_modules/es-set-tostringtag": {
1570 | "version": "2.0.1",
1571 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
1572 | "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
1573 | "dev": true,
1574 | "dependencies": {
1575 | "get-intrinsic": "^1.1.3",
1576 | "has": "^1.0.3",
1577 | "has-tostringtag": "^1.0.0"
1578 | },
1579 | "engines": {
1580 | "node": ">= 0.4"
1581 | }
1582 | },
1583 | "node_modules/es-shim-unscopables": {
1584 | "version": "1.0.0",
1585 | "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
1586 | "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
1587 | "dev": true,
1588 | "dependencies": {
1589 | "has": "^1.0.3"
1590 | }
1591 | },
1592 | "node_modules/es-to-primitive": {
1593 | "version": "1.2.1",
1594 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
1595 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
1596 | "dev": true,
1597 | "dependencies": {
1598 | "is-callable": "^1.1.4",
1599 | "is-date-object": "^1.0.1",
1600 | "is-symbol": "^1.0.2"
1601 | },
1602 | "engines": {
1603 | "node": ">= 0.4"
1604 | },
1605 | "funding": {
1606 | "url": "https://github.com/sponsors/ljharb"
1607 | }
1608 | },
1609 | "node_modules/esbuild": {
1610 | "version": "0.18.11",
1611 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.11.tgz",
1612 | "integrity": "sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==",
1613 | "dev": true,
1614 | "hasInstallScript": true,
1615 | "bin": {
1616 | "esbuild": "bin/esbuild"
1617 | },
1618 | "engines": {
1619 | "node": ">=12"
1620 | },
1621 | "optionalDependencies": {
1622 | "@esbuild/android-arm": "0.18.11",
1623 | "@esbuild/android-arm64": "0.18.11",
1624 | "@esbuild/android-x64": "0.18.11",
1625 | "@esbuild/darwin-arm64": "0.18.11",
1626 | "@esbuild/darwin-x64": "0.18.11",
1627 | "@esbuild/freebsd-arm64": "0.18.11",
1628 | "@esbuild/freebsd-x64": "0.18.11",
1629 | "@esbuild/linux-arm": "0.18.11",
1630 | "@esbuild/linux-arm64": "0.18.11",
1631 | "@esbuild/linux-ia32": "0.18.11",
1632 | "@esbuild/linux-loong64": "0.18.11",
1633 | "@esbuild/linux-mips64el": "0.18.11",
1634 | "@esbuild/linux-ppc64": "0.18.11",
1635 | "@esbuild/linux-riscv64": "0.18.11",
1636 | "@esbuild/linux-s390x": "0.18.11",
1637 | "@esbuild/linux-x64": "0.18.11",
1638 | "@esbuild/netbsd-x64": "0.18.11",
1639 | "@esbuild/openbsd-x64": "0.18.11",
1640 | "@esbuild/sunos-x64": "0.18.11",
1641 | "@esbuild/win32-arm64": "0.18.11",
1642 | "@esbuild/win32-ia32": "0.18.11",
1643 | "@esbuild/win32-x64": "0.18.11"
1644 | }
1645 | },
1646 | "node_modules/escalade": {
1647 | "version": "3.1.1",
1648 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1649 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1650 | "dev": true,
1651 | "engines": {
1652 | "node": ">=6"
1653 | }
1654 | },
1655 | "node_modules/escape-string-regexp": {
1656 | "version": "1.0.5",
1657 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1658 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
1659 | "dev": true,
1660 | "engines": {
1661 | "node": ">=0.8.0"
1662 | }
1663 | },
1664 | "node_modules/eslint": {
1665 | "version": "8.44.0",
1666 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz",
1667 | "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==",
1668 | "dev": true,
1669 | "dependencies": {
1670 | "@eslint-community/eslint-utils": "^4.2.0",
1671 | "@eslint-community/regexpp": "^4.4.0",
1672 | "@eslint/eslintrc": "^2.1.0",
1673 | "@eslint/js": "8.44.0",
1674 | "@humanwhocodes/config-array": "^0.11.10",
1675 | "@humanwhocodes/module-importer": "^1.0.1",
1676 | "@nodelib/fs.walk": "^1.2.8",
1677 | "ajv": "^6.10.0",
1678 | "chalk": "^4.0.0",
1679 | "cross-spawn": "^7.0.2",
1680 | "debug": "^4.3.2",
1681 | "doctrine": "^3.0.0",
1682 | "escape-string-regexp": "^4.0.0",
1683 | "eslint-scope": "^7.2.0",
1684 | "eslint-visitor-keys": "^3.4.1",
1685 | "espree": "^9.6.0",
1686 | "esquery": "^1.4.2",
1687 | "esutils": "^2.0.2",
1688 | "fast-deep-equal": "^3.1.3",
1689 | "file-entry-cache": "^6.0.1",
1690 | "find-up": "^5.0.0",
1691 | "glob-parent": "^6.0.2",
1692 | "globals": "^13.19.0",
1693 | "graphemer": "^1.4.0",
1694 | "ignore": "^5.2.0",
1695 | "import-fresh": "^3.0.0",
1696 | "imurmurhash": "^0.1.4",
1697 | "is-glob": "^4.0.0",
1698 | "is-path-inside": "^3.0.3",
1699 | "js-yaml": "^4.1.0",
1700 | "json-stable-stringify-without-jsonify": "^1.0.1",
1701 | "levn": "^0.4.1",
1702 | "lodash.merge": "^4.6.2",
1703 | "minimatch": "^3.1.2",
1704 | "natural-compare": "^1.4.0",
1705 | "optionator": "^0.9.3",
1706 | "strip-ansi": "^6.0.1",
1707 | "strip-json-comments": "^3.1.0",
1708 | "text-table": "^0.2.0"
1709 | },
1710 | "bin": {
1711 | "eslint": "bin/eslint.js"
1712 | },
1713 | "engines": {
1714 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1715 | },
1716 | "funding": {
1717 | "url": "https://opencollective.com/eslint"
1718 | }
1719 | },
1720 | "node_modules/eslint-plugin-react": {
1721 | "version": "7.32.2",
1722 | "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz",
1723 | "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==",
1724 | "dev": true,
1725 | "dependencies": {
1726 | "array-includes": "^3.1.6",
1727 | "array.prototype.flatmap": "^1.3.1",
1728 | "array.prototype.tosorted": "^1.1.1",
1729 | "doctrine": "^2.1.0",
1730 | "estraverse": "^5.3.0",
1731 | "jsx-ast-utils": "^2.4.1 || ^3.0.0",
1732 | "minimatch": "^3.1.2",
1733 | "object.entries": "^1.1.6",
1734 | "object.fromentries": "^2.0.6",
1735 | "object.hasown": "^1.1.2",
1736 | "object.values": "^1.1.6",
1737 | "prop-types": "^15.8.1",
1738 | "resolve": "^2.0.0-next.4",
1739 | "semver": "^6.3.0",
1740 | "string.prototype.matchall": "^4.0.8"
1741 | },
1742 | "engines": {
1743 | "node": ">=4"
1744 | },
1745 | "peerDependencies": {
1746 | "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
1747 | }
1748 | },
1749 | "node_modules/eslint-plugin-react-hooks": {
1750 | "version": "4.6.0",
1751 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
1752 | "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
1753 | "dev": true,
1754 | "engines": {
1755 | "node": ">=10"
1756 | },
1757 | "peerDependencies": {
1758 | "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
1759 | }
1760 | },
1761 | "node_modules/eslint-plugin-react-refresh": {
1762 | "version": "0.4.2",
1763 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.2.tgz",
1764 | "integrity": "sha512-AjT+7woNvaIiFoFqiD7nsd/M1MoW1h+8SAdfCpQ/1LSFkIH9DNAawBsTHj/1sWjijkVXRfF/rOiXFm+4xZrZ5Q==",
1765 | "dev": true,
1766 | "peerDependencies": {
1767 | "eslint": ">=7"
1768 | }
1769 | },
1770 | "node_modules/eslint-plugin-react/node_modules/doctrine": {
1771 | "version": "2.1.0",
1772 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
1773 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
1774 | "dev": true,
1775 | "dependencies": {
1776 | "esutils": "^2.0.2"
1777 | },
1778 | "engines": {
1779 | "node": ">=0.10.0"
1780 | }
1781 | },
1782 | "node_modules/eslint-scope": {
1783 | "version": "7.2.0",
1784 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
1785 | "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
1786 | "dev": true,
1787 | "dependencies": {
1788 | "esrecurse": "^4.3.0",
1789 | "estraverse": "^5.2.0"
1790 | },
1791 | "engines": {
1792 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1793 | },
1794 | "funding": {
1795 | "url": "https://opencollective.com/eslint"
1796 | }
1797 | },
1798 | "node_modules/eslint-visitor-keys": {
1799 | "version": "3.4.1",
1800 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
1801 | "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
1802 | "dev": true,
1803 | "engines": {
1804 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1805 | },
1806 | "funding": {
1807 | "url": "https://opencollective.com/eslint"
1808 | }
1809 | },
1810 | "node_modules/eslint/node_modules/ansi-styles": {
1811 | "version": "4.3.0",
1812 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1813 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1814 | "dev": true,
1815 | "dependencies": {
1816 | "color-convert": "^2.0.1"
1817 | },
1818 | "engines": {
1819 | "node": ">=8"
1820 | },
1821 | "funding": {
1822 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1823 | }
1824 | },
1825 | "node_modules/eslint/node_modules/chalk": {
1826 | "version": "4.1.2",
1827 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1828 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1829 | "dev": true,
1830 | "dependencies": {
1831 | "ansi-styles": "^4.1.0",
1832 | "supports-color": "^7.1.0"
1833 | },
1834 | "engines": {
1835 | "node": ">=10"
1836 | },
1837 | "funding": {
1838 | "url": "https://github.com/chalk/chalk?sponsor=1"
1839 | }
1840 | },
1841 | "node_modules/eslint/node_modules/color-convert": {
1842 | "version": "2.0.1",
1843 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1844 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1845 | "dev": true,
1846 | "dependencies": {
1847 | "color-name": "~1.1.4"
1848 | },
1849 | "engines": {
1850 | "node": ">=7.0.0"
1851 | }
1852 | },
1853 | "node_modules/eslint/node_modules/color-name": {
1854 | "version": "1.1.4",
1855 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1856 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1857 | "dev": true
1858 | },
1859 | "node_modules/eslint/node_modules/escape-string-regexp": {
1860 | "version": "4.0.0",
1861 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1862 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1863 | "dev": true,
1864 | "engines": {
1865 | "node": ">=10"
1866 | },
1867 | "funding": {
1868 | "url": "https://github.com/sponsors/sindresorhus"
1869 | }
1870 | },
1871 | "node_modules/eslint/node_modules/globals": {
1872 | "version": "13.20.0",
1873 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
1874 | "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
1875 | "dev": true,
1876 | "dependencies": {
1877 | "type-fest": "^0.20.2"
1878 | },
1879 | "engines": {
1880 | "node": ">=8"
1881 | },
1882 | "funding": {
1883 | "url": "https://github.com/sponsors/sindresorhus"
1884 | }
1885 | },
1886 | "node_modules/eslint/node_modules/has-flag": {
1887 | "version": "4.0.0",
1888 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1889 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1890 | "dev": true,
1891 | "engines": {
1892 | "node": ">=8"
1893 | }
1894 | },
1895 | "node_modules/eslint/node_modules/supports-color": {
1896 | "version": "7.2.0",
1897 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1898 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1899 | "dev": true,
1900 | "dependencies": {
1901 | "has-flag": "^4.0.0"
1902 | },
1903 | "engines": {
1904 | "node": ">=8"
1905 | }
1906 | },
1907 | "node_modules/espree": {
1908 | "version": "9.6.0",
1909 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz",
1910 | "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==",
1911 | "dev": true,
1912 | "dependencies": {
1913 | "acorn": "^8.9.0",
1914 | "acorn-jsx": "^5.3.2",
1915 | "eslint-visitor-keys": "^3.4.1"
1916 | },
1917 | "engines": {
1918 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1919 | },
1920 | "funding": {
1921 | "url": "https://opencollective.com/eslint"
1922 | }
1923 | },
1924 | "node_modules/esquery": {
1925 | "version": "1.5.0",
1926 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
1927 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
1928 | "dev": true,
1929 | "dependencies": {
1930 | "estraverse": "^5.1.0"
1931 | },
1932 | "engines": {
1933 | "node": ">=0.10"
1934 | }
1935 | },
1936 | "node_modules/esrecurse": {
1937 | "version": "4.3.0",
1938 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1939 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1940 | "dev": true,
1941 | "dependencies": {
1942 | "estraverse": "^5.2.0"
1943 | },
1944 | "engines": {
1945 | "node": ">=4.0"
1946 | }
1947 | },
1948 | "node_modules/estraverse": {
1949 | "version": "5.3.0",
1950 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1951 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1952 | "dev": true,
1953 | "engines": {
1954 | "node": ">=4.0"
1955 | }
1956 | },
1957 | "node_modules/esutils": {
1958 | "version": "2.0.3",
1959 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1960 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1961 | "dev": true,
1962 | "engines": {
1963 | "node": ">=0.10.0"
1964 | }
1965 | },
1966 | "node_modules/fast-deep-equal": {
1967 | "version": "3.1.3",
1968 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1969 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1970 | "dev": true
1971 | },
1972 | "node_modules/fast-glob": {
1973 | "version": "3.3.0",
1974 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz",
1975 | "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==",
1976 | "dev": true,
1977 | "dependencies": {
1978 | "@nodelib/fs.stat": "^2.0.2",
1979 | "@nodelib/fs.walk": "^1.2.3",
1980 | "glob-parent": "^5.1.2",
1981 | "merge2": "^1.3.0",
1982 | "micromatch": "^4.0.4"
1983 | },
1984 | "engines": {
1985 | "node": ">=8.6.0"
1986 | }
1987 | },
1988 | "node_modules/fast-glob/node_modules/glob-parent": {
1989 | "version": "5.1.2",
1990 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1991 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1992 | "dev": true,
1993 | "dependencies": {
1994 | "is-glob": "^4.0.1"
1995 | },
1996 | "engines": {
1997 | "node": ">= 6"
1998 | }
1999 | },
2000 | "node_modules/fast-json-stable-stringify": {
2001 | "version": "2.1.0",
2002 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
2003 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
2004 | "dev": true
2005 | },
2006 | "node_modules/fast-levenshtein": {
2007 | "version": "2.0.6",
2008 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
2009 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
2010 | "dev": true
2011 | },
2012 | "node_modules/fastq": {
2013 | "version": "1.15.0",
2014 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
2015 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
2016 | "dev": true,
2017 | "dependencies": {
2018 | "reusify": "^1.0.4"
2019 | }
2020 | },
2021 | "node_modules/file-entry-cache": {
2022 | "version": "6.0.1",
2023 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
2024 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
2025 | "dev": true,
2026 | "dependencies": {
2027 | "flat-cache": "^3.0.4"
2028 | },
2029 | "engines": {
2030 | "node": "^10.12.0 || >=12.0.0"
2031 | }
2032 | },
2033 | "node_modules/fill-range": {
2034 | "version": "7.0.1",
2035 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
2036 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
2037 | "dev": true,
2038 | "dependencies": {
2039 | "to-regex-range": "^5.0.1"
2040 | },
2041 | "engines": {
2042 | "node": ">=8"
2043 | }
2044 | },
2045 | "node_modules/find-up": {
2046 | "version": "5.0.0",
2047 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
2048 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
2049 | "dev": true,
2050 | "dependencies": {
2051 | "locate-path": "^6.0.0",
2052 | "path-exists": "^4.0.0"
2053 | },
2054 | "engines": {
2055 | "node": ">=10"
2056 | },
2057 | "funding": {
2058 | "url": "https://github.com/sponsors/sindresorhus"
2059 | }
2060 | },
2061 | "node_modules/flat-cache": {
2062 | "version": "3.0.4",
2063 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
2064 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
2065 | "dev": true,
2066 | "dependencies": {
2067 | "flatted": "^3.1.0",
2068 | "rimraf": "^3.0.2"
2069 | },
2070 | "engines": {
2071 | "node": "^10.12.0 || >=12.0.0"
2072 | }
2073 | },
2074 | "node_modules/flatted": {
2075 | "version": "3.2.7",
2076 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
2077 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
2078 | "dev": true
2079 | },
2080 | "node_modules/for-each": {
2081 | "version": "0.3.3",
2082 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
2083 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
2084 | "dev": true,
2085 | "dependencies": {
2086 | "is-callable": "^1.1.3"
2087 | }
2088 | },
2089 | "node_modules/fraction.js": {
2090 | "version": "4.2.0",
2091 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
2092 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
2093 | "dev": true,
2094 | "engines": {
2095 | "node": "*"
2096 | },
2097 | "funding": {
2098 | "type": "patreon",
2099 | "url": "https://www.patreon.com/infusion"
2100 | }
2101 | },
2102 | "node_modules/fs.realpath": {
2103 | "version": "1.0.0",
2104 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
2105 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
2106 | "dev": true
2107 | },
2108 | "node_modules/fsevents": {
2109 | "version": "2.3.2",
2110 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
2111 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
2112 | "dev": true,
2113 | "hasInstallScript": true,
2114 | "optional": true,
2115 | "os": [
2116 | "darwin"
2117 | ],
2118 | "engines": {
2119 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
2120 | }
2121 | },
2122 | "node_modules/function-bind": {
2123 | "version": "1.1.1",
2124 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
2125 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
2126 | "dev": true
2127 | },
2128 | "node_modules/function.prototype.name": {
2129 | "version": "1.1.5",
2130 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
2131 | "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
2132 | "dev": true,
2133 | "dependencies": {
2134 | "call-bind": "^1.0.2",
2135 | "define-properties": "^1.1.3",
2136 | "es-abstract": "^1.19.0",
2137 | "functions-have-names": "^1.2.2"
2138 | },
2139 | "engines": {
2140 | "node": ">= 0.4"
2141 | },
2142 | "funding": {
2143 | "url": "https://github.com/sponsors/ljharb"
2144 | }
2145 | },
2146 | "node_modules/functions-have-names": {
2147 | "version": "1.2.3",
2148 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
2149 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
2150 | "dev": true,
2151 | "funding": {
2152 | "url": "https://github.com/sponsors/ljharb"
2153 | }
2154 | },
2155 | "node_modules/gensync": {
2156 | "version": "1.0.0-beta.2",
2157 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
2158 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
2159 | "dev": true,
2160 | "engines": {
2161 | "node": ">=6.9.0"
2162 | }
2163 | },
2164 | "node_modules/get-intrinsic": {
2165 | "version": "1.2.1",
2166 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
2167 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
2168 | "dev": true,
2169 | "dependencies": {
2170 | "function-bind": "^1.1.1",
2171 | "has": "^1.0.3",
2172 | "has-proto": "^1.0.1",
2173 | "has-symbols": "^1.0.3"
2174 | },
2175 | "funding": {
2176 | "url": "https://github.com/sponsors/ljharb"
2177 | }
2178 | },
2179 | "node_modules/get-symbol-description": {
2180 | "version": "1.0.0",
2181 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
2182 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
2183 | "dev": true,
2184 | "dependencies": {
2185 | "call-bind": "^1.0.2",
2186 | "get-intrinsic": "^1.1.1"
2187 | },
2188 | "engines": {
2189 | "node": ">= 0.4"
2190 | },
2191 | "funding": {
2192 | "url": "https://github.com/sponsors/ljharb"
2193 | }
2194 | },
2195 | "node_modules/glob": {
2196 | "version": "7.2.3",
2197 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
2198 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
2199 | "dev": true,
2200 | "dependencies": {
2201 | "fs.realpath": "^1.0.0",
2202 | "inflight": "^1.0.4",
2203 | "inherits": "2",
2204 | "minimatch": "^3.1.1",
2205 | "once": "^1.3.0",
2206 | "path-is-absolute": "^1.0.0"
2207 | },
2208 | "engines": {
2209 | "node": "*"
2210 | },
2211 | "funding": {
2212 | "url": "https://github.com/sponsors/isaacs"
2213 | }
2214 | },
2215 | "node_modules/glob-parent": {
2216 | "version": "6.0.2",
2217 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
2218 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
2219 | "dev": true,
2220 | "dependencies": {
2221 | "is-glob": "^4.0.3"
2222 | },
2223 | "engines": {
2224 | "node": ">=10.13.0"
2225 | }
2226 | },
2227 | "node_modules/globals": {
2228 | "version": "11.12.0",
2229 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
2230 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
2231 | "dev": true,
2232 | "engines": {
2233 | "node": ">=4"
2234 | }
2235 | },
2236 | "node_modules/globalthis": {
2237 | "version": "1.0.3",
2238 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
2239 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
2240 | "dev": true,
2241 | "dependencies": {
2242 | "define-properties": "^1.1.3"
2243 | },
2244 | "engines": {
2245 | "node": ">= 0.4"
2246 | },
2247 | "funding": {
2248 | "url": "https://github.com/sponsors/ljharb"
2249 | }
2250 | },
2251 | "node_modules/gopd": {
2252 | "version": "1.0.1",
2253 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
2254 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
2255 | "dev": true,
2256 | "dependencies": {
2257 | "get-intrinsic": "^1.1.3"
2258 | },
2259 | "funding": {
2260 | "url": "https://github.com/sponsors/ljharb"
2261 | }
2262 | },
2263 | "node_modules/graphemer": {
2264 | "version": "1.4.0",
2265 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
2266 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
2267 | "dev": true
2268 | },
2269 | "node_modules/has": {
2270 | "version": "1.0.3",
2271 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
2272 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
2273 | "dev": true,
2274 | "dependencies": {
2275 | "function-bind": "^1.1.1"
2276 | },
2277 | "engines": {
2278 | "node": ">= 0.4.0"
2279 | }
2280 | },
2281 | "node_modules/has-bigints": {
2282 | "version": "1.0.2",
2283 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
2284 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
2285 | "dev": true,
2286 | "funding": {
2287 | "url": "https://github.com/sponsors/ljharb"
2288 | }
2289 | },
2290 | "node_modules/has-flag": {
2291 | "version": "3.0.0",
2292 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
2293 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
2294 | "dev": true,
2295 | "engines": {
2296 | "node": ">=4"
2297 | }
2298 | },
2299 | "node_modules/has-property-descriptors": {
2300 | "version": "1.0.0",
2301 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
2302 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
2303 | "dev": true,
2304 | "dependencies": {
2305 | "get-intrinsic": "^1.1.1"
2306 | },
2307 | "funding": {
2308 | "url": "https://github.com/sponsors/ljharb"
2309 | }
2310 | },
2311 | "node_modules/has-proto": {
2312 | "version": "1.0.1",
2313 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
2314 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
2315 | "dev": true,
2316 | "engines": {
2317 | "node": ">= 0.4"
2318 | },
2319 | "funding": {
2320 | "url": "https://github.com/sponsors/ljharb"
2321 | }
2322 | },
2323 | "node_modules/has-symbols": {
2324 | "version": "1.0.3",
2325 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
2326 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
2327 | "dev": true,
2328 | "engines": {
2329 | "node": ">= 0.4"
2330 | },
2331 | "funding": {
2332 | "url": "https://github.com/sponsors/ljharb"
2333 | }
2334 | },
2335 | "node_modules/has-tostringtag": {
2336 | "version": "1.0.0",
2337 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
2338 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
2339 | "dev": true,
2340 | "dependencies": {
2341 | "has-symbols": "^1.0.2"
2342 | },
2343 | "engines": {
2344 | "node": ">= 0.4"
2345 | },
2346 | "funding": {
2347 | "url": "https://github.com/sponsors/ljharb"
2348 | }
2349 | },
2350 | "node_modules/ignore": {
2351 | "version": "5.2.4",
2352 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
2353 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
2354 | "dev": true,
2355 | "engines": {
2356 | "node": ">= 4"
2357 | }
2358 | },
2359 | "node_modules/import-fresh": {
2360 | "version": "3.3.0",
2361 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
2362 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
2363 | "dev": true,
2364 | "dependencies": {
2365 | "parent-module": "^1.0.0",
2366 | "resolve-from": "^4.0.0"
2367 | },
2368 | "engines": {
2369 | "node": ">=6"
2370 | },
2371 | "funding": {
2372 | "url": "https://github.com/sponsors/sindresorhus"
2373 | }
2374 | },
2375 | "node_modules/imurmurhash": {
2376 | "version": "0.1.4",
2377 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
2378 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
2379 | "dev": true,
2380 | "engines": {
2381 | "node": ">=0.8.19"
2382 | }
2383 | },
2384 | "node_modules/inflight": {
2385 | "version": "1.0.6",
2386 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
2387 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
2388 | "dev": true,
2389 | "dependencies": {
2390 | "once": "^1.3.0",
2391 | "wrappy": "1"
2392 | }
2393 | },
2394 | "node_modules/inherits": {
2395 | "version": "2.0.4",
2396 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2397 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
2398 | "dev": true
2399 | },
2400 | "node_modules/internal-slot": {
2401 | "version": "1.0.5",
2402 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
2403 | "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
2404 | "dev": true,
2405 | "dependencies": {
2406 | "get-intrinsic": "^1.2.0",
2407 | "has": "^1.0.3",
2408 | "side-channel": "^1.0.4"
2409 | },
2410 | "engines": {
2411 | "node": ">= 0.4"
2412 | }
2413 | },
2414 | "node_modules/is-array-buffer": {
2415 | "version": "3.0.2",
2416 | "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
2417 | "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
2418 | "dev": true,
2419 | "dependencies": {
2420 | "call-bind": "^1.0.2",
2421 | "get-intrinsic": "^1.2.0",
2422 | "is-typed-array": "^1.1.10"
2423 | },
2424 | "funding": {
2425 | "url": "https://github.com/sponsors/ljharb"
2426 | }
2427 | },
2428 | "node_modules/is-bigint": {
2429 | "version": "1.0.4",
2430 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
2431 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
2432 | "dev": true,
2433 | "dependencies": {
2434 | "has-bigints": "^1.0.1"
2435 | },
2436 | "funding": {
2437 | "url": "https://github.com/sponsors/ljharb"
2438 | }
2439 | },
2440 | "node_modules/is-binary-path": {
2441 | "version": "2.1.0",
2442 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
2443 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
2444 | "dev": true,
2445 | "dependencies": {
2446 | "binary-extensions": "^2.0.0"
2447 | },
2448 | "engines": {
2449 | "node": ">=8"
2450 | }
2451 | },
2452 | "node_modules/is-boolean-object": {
2453 | "version": "1.1.2",
2454 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
2455 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
2456 | "dev": true,
2457 | "dependencies": {
2458 | "call-bind": "^1.0.2",
2459 | "has-tostringtag": "^1.0.0"
2460 | },
2461 | "engines": {
2462 | "node": ">= 0.4"
2463 | },
2464 | "funding": {
2465 | "url": "https://github.com/sponsors/ljharb"
2466 | }
2467 | },
2468 | "node_modules/is-callable": {
2469 | "version": "1.2.7",
2470 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
2471 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
2472 | "dev": true,
2473 | "engines": {
2474 | "node": ">= 0.4"
2475 | },
2476 | "funding": {
2477 | "url": "https://github.com/sponsors/ljharb"
2478 | }
2479 | },
2480 | "node_modules/is-core-module": {
2481 | "version": "2.12.1",
2482 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
2483 | "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
2484 | "dev": true,
2485 | "dependencies": {
2486 | "has": "^1.0.3"
2487 | },
2488 | "funding": {
2489 | "url": "https://github.com/sponsors/ljharb"
2490 | }
2491 | },
2492 | "node_modules/is-date-object": {
2493 | "version": "1.0.5",
2494 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
2495 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
2496 | "dev": true,
2497 | "dependencies": {
2498 | "has-tostringtag": "^1.0.0"
2499 | },
2500 | "engines": {
2501 | "node": ">= 0.4"
2502 | },
2503 | "funding": {
2504 | "url": "https://github.com/sponsors/ljharb"
2505 | }
2506 | },
2507 | "node_modules/is-extglob": {
2508 | "version": "2.1.1",
2509 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2510 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
2511 | "dev": true,
2512 | "engines": {
2513 | "node": ">=0.10.0"
2514 | }
2515 | },
2516 | "node_modules/is-glob": {
2517 | "version": "4.0.3",
2518 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
2519 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2520 | "dev": true,
2521 | "dependencies": {
2522 | "is-extglob": "^2.1.1"
2523 | },
2524 | "engines": {
2525 | "node": ">=0.10.0"
2526 | }
2527 | },
2528 | "node_modules/is-negative-zero": {
2529 | "version": "2.0.2",
2530 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
2531 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
2532 | "dev": true,
2533 | "engines": {
2534 | "node": ">= 0.4"
2535 | },
2536 | "funding": {
2537 | "url": "https://github.com/sponsors/ljharb"
2538 | }
2539 | },
2540 | "node_modules/is-number": {
2541 | "version": "7.0.0",
2542 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
2543 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
2544 | "dev": true,
2545 | "engines": {
2546 | "node": ">=0.12.0"
2547 | }
2548 | },
2549 | "node_modules/is-number-object": {
2550 | "version": "1.0.7",
2551 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
2552 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
2553 | "dev": true,
2554 | "dependencies": {
2555 | "has-tostringtag": "^1.0.0"
2556 | },
2557 | "engines": {
2558 | "node": ">= 0.4"
2559 | },
2560 | "funding": {
2561 | "url": "https://github.com/sponsors/ljharb"
2562 | }
2563 | },
2564 | "node_modules/is-path-inside": {
2565 | "version": "3.0.3",
2566 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
2567 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
2568 | "dev": true,
2569 | "engines": {
2570 | "node": ">=8"
2571 | }
2572 | },
2573 | "node_modules/is-regex": {
2574 | "version": "1.1.4",
2575 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
2576 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
2577 | "dev": true,
2578 | "dependencies": {
2579 | "call-bind": "^1.0.2",
2580 | "has-tostringtag": "^1.0.0"
2581 | },
2582 | "engines": {
2583 | "node": ">= 0.4"
2584 | },
2585 | "funding": {
2586 | "url": "https://github.com/sponsors/ljharb"
2587 | }
2588 | },
2589 | "node_modules/is-shared-array-buffer": {
2590 | "version": "1.0.2",
2591 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
2592 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
2593 | "dev": true,
2594 | "dependencies": {
2595 | "call-bind": "^1.0.2"
2596 | },
2597 | "funding": {
2598 | "url": "https://github.com/sponsors/ljharb"
2599 | }
2600 | },
2601 | "node_modules/is-string": {
2602 | "version": "1.0.7",
2603 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
2604 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
2605 | "dev": true,
2606 | "dependencies": {
2607 | "has-tostringtag": "^1.0.0"
2608 | },
2609 | "engines": {
2610 | "node": ">= 0.4"
2611 | },
2612 | "funding": {
2613 | "url": "https://github.com/sponsors/ljharb"
2614 | }
2615 | },
2616 | "node_modules/is-symbol": {
2617 | "version": "1.0.4",
2618 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
2619 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
2620 | "dev": true,
2621 | "dependencies": {
2622 | "has-symbols": "^1.0.2"
2623 | },
2624 | "engines": {
2625 | "node": ">= 0.4"
2626 | },
2627 | "funding": {
2628 | "url": "https://github.com/sponsors/ljharb"
2629 | }
2630 | },
2631 | "node_modules/is-typed-array": {
2632 | "version": "1.1.10",
2633 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
2634 | "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
2635 | "dev": true,
2636 | "dependencies": {
2637 | "available-typed-arrays": "^1.0.5",
2638 | "call-bind": "^1.0.2",
2639 | "for-each": "^0.3.3",
2640 | "gopd": "^1.0.1",
2641 | "has-tostringtag": "^1.0.0"
2642 | },
2643 | "engines": {
2644 | "node": ">= 0.4"
2645 | },
2646 | "funding": {
2647 | "url": "https://github.com/sponsors/ljharb"
2648 | }
2649 | },
2650 | "node_modules/is-weakref": {
2651 | "version": "1.0.2",
2652 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
2653 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
2654 | "dev": true,
2655 | "dependencies": {
2656 | "call-bind": "^1.0.2"
2657 | },
2658 | "funding": {
2659 | "url": "https://github.com/sponsors/ljharb"
2660 | }
2661 | },
2662 | "node_modules/isexe": {
2663 | "version": "2.0.0",
2664 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2665 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
2666 | "dev": true
2667 | },
2668 | "node_modules/jiti": {
2669 | "version": "1.19.1",
2670 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz",
2671 | "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==",
2672 | "dev": true,
2673 | "bin": {
2674 | "jiti": "bin/jiti.js"
2675 | }
2676 | },
2677 | "node_modules/js-tokens": {
2678 | "version": "4.0.0",
2679 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
2680 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
2681 | },
2682 | "node_modules/js-yaml": {
2683 | "version": "4.1.0",
2684 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
2685 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
2686 | "dev": true,
2687 | "dependencies": {
2688 | "argparse": "^2.0.1"
2689 | },
2690 | "bin": {
2691 | "js-yaml": "bin/js-yaml.js"
2692 | }
2693 | },
2694 | "node_modules/jsesc": {
2695 | "version": "2.5.2",
2696 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
2697 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
2698 | "dev": true,
2699 | "bin": {
2700 | "jsesc": "bin/jsesc"
2701 | },
2702 | "engines": {
2703 | "node": ">=4"
2704 | }
2705 | },
2706 | "node_modules/json-schema-traverse": {
2707 | "version": "0.4.1",
2708 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2709 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
2710 | "dev": true
2711 | },
2712 | "node_modules/json-stable-stringify-without-jsonify": {
2713 | "version": "1.0.1",
2714 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
2715 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
2716 | "dev": true
2717 | },
2718 | "node_modules/json5": {
2719 | "version": "2.2.3",
2720 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
2721 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
2722 | "dev": true,
2723 | "bin": {
2724 | "json5": "lib/cli.js"
2725 | },
2726 | "engines": {
2727 | "node": ">=6"
2728 | }
2729 | },
2730 | "node_modules/jsx-ast-utils": {
2731 | "version": "3.3.4",
2732 | "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz",
2733 | "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==",
2734 | "dev": true,
2735 | "dependencies": {
2736 | "array-includes": "^3.1.6",
2737 | "array.prototype.flat": "^1.3.1",
2738 | "object.assign": "^4.1.4",
2739 | "object.values": "^1.1.6"
2740 | },
2741 | "engines": {
2742 | "node": ">=4.0"
2743 | }
2744 | },
2745 | "node_modules/levn": {
2746 | "version": "0.4.1",
2747 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
2748 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
2749 | "dev": true,
2750 | "dependencies": {
2751 | "prelude-ls": "^1.2.1",
2752 | "type-check": "~0.4.0"
2753 | },
2754 | "engines": {
2755 | "node": ">= 0.8.0"
2756 | }
2757 | },
2758 | "node_modules/lilconfig": {
2759 | "version": "2.1.0",
2760 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
2761 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
2762 | "dev": true,
2763 | "engines": {
2764 | "node": ">=10"
2765 | }
2766 | },
2767 | "node_modules/lines-and-columns": {
2768 | "version": "1.2.4",
2769 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
2770 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
2771 | "dev": true
2772 | },
2773 | "node_modules/locate-path": {
2774 | "version": "6.0.0",
2775 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
2776 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
2777 | "dev": true,
2778 | "dependencies": {
2779 | "p-locate": "^5.0.0"
2780 | },
2781 | "engines": {
2782 | "node": ">=10"
2783 | },
2784 | "funding": {
2785 | "url": "https://github.com/sponsors/sindresorhus"
2786 | }
2787 | },
2788 | "node_modules/lodash.merge": {
2789 | "version": "4.6.2",
2790 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
2791 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
2792 | "dev": true
2793 | },
2794 | "node_modules/loose-envify": {
2795 | "version": "1.4.0",
2796 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
2797 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
2798 | "dependencies": {
2799 | "js-tokens": "^3.0.0 || ^4.0.0"
2800 | },
2801 | "bin": {
2802 | "loose-envify": "cli.js"
2803 | }
2804 | },
2805 | "node_modules/lru-cache": {
2806 | "version": "5.1.1",
2807 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
2808 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
2809 | "dev": true,
2810 | "dependencies": {
2811 | "yallist": "^3.0.2"
2812 | }
2813 | },
2814 | "node_modules/merge2": {
2815 | "version": "1.4.1",
2816 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
2817 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
2818 | "dev": true,
2819 | "engines": {
2820 | "node": ">= 8"
2821 | }
2822 | },
2823 | "node_modules/micromatch": {
2824 | "version": "4.0.5",
2825 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
2826 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
2827 | "dev": true,
2828 | "dependencies": {
2829 | "braces": "^3.0.2",
2830 | "picomatch": "^2.3.1"
2831 | },
2832 | "engines": {
2833 | "node": ">=8.6"
2834 | }
2835 | },
2836 | "node_modules/minimatch": {
2837 | "version": "3.1.2",
2838 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2839 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2840 | "dev": true,
2841 | "dependencies": {
2842 | "brace-expansion": "^1.1.7"
2843 | },
2844 | "engines": {
2845 | "node": "*"
2846 | }
2847 | },
2848 | "node_modules/ms": {
2849 | "version": "2.1.2",
2850 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2851 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
2852 | "dev": true
2853 | },
2854 | "node_modules/mz": {
2855 | "version": "2.7.0",
2856 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
2857 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
2858 | "dev": true,
2859 | "dependencies": {
2860 | "any-promise": "^1.0.0",
2861 | "object-assign": "^4.0.1",
2862 | "thenify-all": "^1.0.0"
2863 | }
2864 | },
2865 | "node_modules/nanoid": {
2866 | "version": "3.3.6",
2867 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
2868 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
2869 | "dev": true,
2870 | "funding": [
2871 | {
2872 | "type": "github",
2873 | "url": "https://github.com/sponsors/ai"
2874 | }
2875 | ],
2876 | "bin": {
2877 | "nanoid": "bin/nanoid.cjs"
2878 | },
2879 | "engines": {
2880 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
2881 | }
2882 | },
2883 | "node_modules/natural-compare": {
2884 | "version": "1.4.0",
2885 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2886 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
2887 | "dev": true
2888 | },
2889 | "node_modules/node-releases": {
2890 | "version": "2.0.13",
2891 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
2892 | "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
2893 | "dev": true
2894 | },
2895 | "node_modules/normalize-path": {
2896 | "version": "3.0.0",
2897 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
2898 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
2899 | "dev": true,
2900 | "engines": {
2901 | "node": ">=0.10.0"
2902 | }
2903 | },
2904 | "node_modules/normalize-range": {
2905 | "version": "0.1.2",
2906 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
2907 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
2908 | "dev": true,
2909 | "engines": {
2910 | "node": ">=0.10.0"
2911 | }
2912 | },
2913 | "node_modules/object-assign": {
2914 | "version": "4.1.1",
2915 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2916 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
2917 | "dev": true,
2918 | "engines": {
2919 | "node": ">=0.10.0"
2920 | }
2921 | },
2922 | "node_modules/object-hash": {
2923 | "version": "3.0.0",
2924 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
2925 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
2926 | "dev": true,
2927 | "engines": {
2928 | "node": ">= 6"
2929 | }
2930 | },
2931 | "node_modules/object-inspect": {
2932 | "version": "1.12.3",
2933 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
2934 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
2935 | "dev": true,
2936 | "funding": {
2937 | "url": "https://github.com/sponsors/ljharb"
2938 | }
2939 | },
2940 | "node_modules/object-keys": {
2941 | "version": "1.1.1",
2942 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
2943 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
2944 | "dev": true,
2945 | "engines": {
2946 | "node": ">= 0.4"
2947 | }
2948 | },
2949 | "node_modules/object.assign": {
2950 | "version": "4.1.4",
2951 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
2952 | "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
2953 | "dev": true,
2954 | "dependencies": {
2955 | "call-bind": "^1.0.2",
2956 | "define-properties": "^1.1.4",
2957 | "has-symbols": "^1.0.3",
2958 | "object-keys": "^1.1.1"
2959 | },
2960 | "engines": {
2961 | "node": ">= 0.4"
2962 | },
2963 | "funding": {
2964 | "url": "https://github.com/sponsors/ljharb"
2965 | }
2966 | },
2967 | "node_modules/object.entries": {
2968 | "version": "1.1.6",
2969 | "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
2970 | "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
2971 | "dev": true,
2972 | "dependencies": {
2973 | "call-bind": "^1.0.2",
2974 | "define-properties": "^1.1.4",
2975 | "es-abstract": "^1.20.4"
2976 | },
2977 | "engines": {
2978 | "node": ">= 0.4"
2979 | }
2980 | },
2981 | "node_modules/object.fromentries": {
2982 | "version": "2.0.6",
2983 | "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
2984 | "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
2985 | "dev": true,
2986 | "dependencies": {
2987 | "call-bind": "^1.0.2",
2988 | "define-properties": "^1.1.4",
2989 | "es-abstract": "^1.20.4"
2990 | },
2991 | "engines": {
2992 | "node": ">= 0.4"
2993 | },
2994 | "funding": {
2995 | "url": "https://github.com/sponsors/ljharb"
2996 | }
2997 | },
2998 | "node_modules/object.hasown": {
2999 | "version": "1.1.2",
3000 | "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz",
3001 | "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==",
3002 | "dev": true,
3003 | "dependencies": {
3004 | "define-properties": "^1.1.4",
3005 | "es-abstract": "^1.20.4"
3006 | },
3007 | "funding": {
3008 | "url": "https://github.com/sponsors/ljharb"
3009 | }
3010 | },
3011 | "node_modules/object.values": {
3012 | "version": "1.1.6",
3013 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
3014 | "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
3015 | "dev": true,
3016 | "dependencies": {
3017 | "call-bind": "^1.0.2",
3018 | "define-properties": "^1.1.4",
3019 | "es-abstract": "^1.20.4"
3020 | },
3021 | "engines": {
3022 | "node": ">= 0.4"
3023 | },
3024 | "funding": {
3025 | "url": "https://github.com/sponsors/ljharb"
3026 | }
3027 | },
3028 | "node_modules/once": {
3029 | "version": "1.4.0",
3030 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
3031 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
3032 | "dev": true,
3033 | "dependencies": {
3034 | "wrappy": "1"
3035 | }
3036 | },
3037 | "node_modules/optionator": {
3038 | "version": "0.9.3",
3039 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
3040 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
3041 | "dev": true,
3042 | "dependencies": {
3043 | "@aashutoshrathi/word-wrap": "^1.2.3",
3044 | "deep-is": "^0.1.3",
3045 | "fast-levenshtein": "^2.0.6",
3046 | "levn": "^0.4.1",
3047 | "prelude-ls": "^1.2.1",
3048 | "type-check": "^0.4.0"
3049 | },
3050 | "engines": {
3051 | "node": ">= 0.8.0"
3052 | }
3053 | },
3054 | "node_modules/p-limit": {
3055 | "version": "3.1.0",
3056 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
3057 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
3058 | "dev": true,
3059 | "dependencies": {
3060 | "yocto-queue": "^0.1.0"
3061 | },
3062 | "engines": {
3063 | "node": ">=10"
3064 | },
3065 | "funding": {
3066 | "url": "https://github.com/sponsors/sindresorhus"
3067 | }
3068 | },
3069 | "node_modules/p-locate": {
3070 | "version": "5.0.0",
3071 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
3072 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
3073 | "dev": true,
3074 | "dependencies": {
3075 | "p-limit": "^3.0.2"
3076 | },
3077 | "engines": {
3078 | "node": ">=10"
3079 | },
3080 | "funding": {
3081 | "url": "https://github.com/sponsors/sindresorhus"
3082 | }
3083 | },
3084 | "node_modules/parent-module": {
3085 | "version": "1.0.1",
3086 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
3087 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
3088 | "dev": true,
3089 | "dependencies": {
3090 | "callsites": "^3.0.0"
3091 | },
3092 | "engines": {
3093 | "node": ">=6"
3094 | }
3095 | },
3096 | "node_modules/path-exists": {
3097 | "version": "4.0.0",
3098 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
3099 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
3100 | "dev": true,
3101 | "engines": {
3102 | "node": ">=8"
3103 | }
3104 | },
3105 | "node_modules/path-is-absolute": {
3106 | "version": "1.0.1",
3107 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
3108 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
3109 | "dev": true,
3110 | "engines": {
3111 | "node": ">=0.10.0"
3112 | }
3113 | },
3114 | "node_modules/path-key": {
3115 | "version": "3.1.1",
3116 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
3117 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
3118 | "dev": true,
3119 | "engines": {
3120 | "node": ">=8"
3121 | }
3122 | },
3123 | "node_modules/path-parse": {
3124 | "version": "1.0.7",
3125 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
3126 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
3127 | "dev": true
3128 | },
3129 | "node_modules/picocolors": {
3130 | "version": "1.0.0",
3131 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
3132 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
3133 | "dev": true
3134 | },
3135 | "node_modules/picomatch": {
3136 | "version": "2.3.1",
3137 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
3138 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
3139 | "dev": true,
3140 | "engines": {
3141 | "node": ">=8.6"
3142 | },
3143 | "funding": {
3144 | "url": "https://github.com/sponsors/jonschlinkert"
3145 | }
3146 | },
3147 | "node_modules/pify": {
3148 | "version": "2.3.0",
3149 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
3150 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
3151 | "dev": true,
3152 | "engines": {
3153 | "node": ">=0.10.0"
3154 | }
3155 | },
3156 | "node_modules/pirates": {
3157 | "version": "4.0.6",
3158 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
3159 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
3160 | "dev": true,
3161 | "engines": {
3162 | "node": ">= 6"
3163 | }
3164 | },
3165 | "node_modules/postcss": {
3166 | "version": "8.4.25",
3167 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz",
3168 | "integrity": "sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==",
3169 | "dev": true,
3170 | "funding": [
3171 | {
3172 | "type": "opencollective",
3173 | "url": "https://opencollective.com/postcss/"
3174 | },
3175 | {
3176 | "type": "tidelift",
3177 | "url": "https://tidelift.com/funding/github/npm/postcss"
3178 | },
3179 | {
3180 | "type": "github",
3181 | "url": "https://github.com/sponsors/ai"
3182 | }
3183 | ],
3184 | "dependencies": {
3185 | "nanoid": "^3.3.6",
3186 | "picocolors": "^1.0.0",
3187 | "source-map-js": "^1.0.2"
3188 | },
3189 | "engines": {
3190 | "node": "^10 || ^12 || >=14"
3191 | }
3192 | },
3193 | "node_modules/postcss-import": {
3194 | "version": "15.1.0",
3195 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
3196 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
3197 | "dev": true,
3198 | "dependencies": {
3199 | "postcss-value-parser": "^4.0.0",
3200 | "read-cache": "^1.0.0",
3201 | "resolve": "^1.1.7"
3202 | },
3203 | "engines": {
3204 | "node": ">=14.0.0"
3205 | },
3206 | "peerDependencies": {
3207 | "postcss": "^8.0.0"
3208 | }
3209 | },
3210 | "node_modules/postcss-import/node_modules/resolve": {
3211 | "version": "1.22.2",
3212 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
3213 | "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
3214 | "dev": true,
3215 | "dependencies": {
3216 | "is-core-module": "^2.11.0",
3217 | "path-parse": "^1.0.7",
3218 | "supports-preserve-symlinks-flag": "^1.0.0"
3219 | },
3220 | "bin": {
3221 | "resolve": "bin/resolve"
3222 | },
3223 | "funding": {
3224 | "url": "https://github.com/sponsors/ljharb"
3225 | }
3226 | },
3227 | "node_modules/postcss-js": {
3228 | "version": "4.0.1",
3229 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
3230 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
3231 | "dev": true,
3232 | "dependencies": {
3233 | "camelcase-css": "^2.0.1"
3234 | },
3235 | "engines": {
3236 | "node": "^12 || ^14 || >= 16"
3237 | },
3238 | "funding": {
3239 | "type": "opencollective",
3240 | "url": "https://opencollective.com/postcss/"
3241 | },
3242 | "peerDependencies": {
3243 | "postcss": "^8.4.21"
3244 | }
3245 | },
3246 | "node_modules/postcss-load-config": {
3247 | "version": "4.0.1",
3248 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
3249 | "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
3250 | "dev": true,
3251 | "dependencies": {
3252 | "lilconfig": "^2.0.5",
3253 | "yaml": "^2.1.1"
3254 | },
3255 | "engines": {
3256 | "node": ">= 14"
3257 | },
3258 | "funding": {
3259 | "type": "opencollective",
3260 | "url": "https://opencollective.com/postcss/"
3261 | },
3262 | "peerDependencies": {
3263 | "postcss": ">=8.0.9",
3264 | "ts-node": ">=9.0.0"
3265 | },
3266 | "peerDependenciesMeta": {
3267 | "postcss": {
3268 | "optional": true
3269 | },
3270 | "ts-node": {
3271 | "optional": true
3272 | }
3273 | }
3274 | },
3275 | "node_modules/postcss-nested": {
3276 | "version": "6.0.1",
3277 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
3278 | "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
3279 | "dev": true,
3280 | "dependencies": {
3281 | "postcss-selector-parser": "^6.0.11"
3282 | },
3283 | "engines": {
3284 | "node": ">=12.0"
3285 | },
3286 | "funding": {
3287 | "type": "opencollective",
3288 | "url": "https://opencollective.com/postcss/"
3289 | },
3290 | "peerDependencies": {
3291 | "postcss": "^8.2.14"
3292 | }
3293 | },
3294 | "node_modules/postcss-selector-parser": {
3295 | "version": "6.0.13",
3296 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
3297 | "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
3298 | "dev": true,
3299 | "dependencies": {
3300 | "cssesc": "^3.0.0",
3301 | "util-deprecate": "^1.0.2"
3302 | },
3303 | "engines": {
3304 | "node": ">=4"
3305 | }
3306 | },
3307 | "node_modules/postcss-value-parser": {
3308 | "version": "4.2.0",
3309 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
3310 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
3311 | "dev": true
3312 | },
3313 | "node_modules/prelude-ls": {
3314 | "version": "1.2.1",
3315 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
3316 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
3317 | "dev": true,
3318 | "engines": {
3319 | "node": ">= 0.8.0"
3320 | }
3321 | },
3322 | "node_modules/prop-types": {
3323 | "version": "15.8.1",
3324 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
3325 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
3326 | "dev": true,
3327 | "dependencies": {
3328 | "loose-envify": "^1.4.0",
3329 | "object-assign": "^4.1.1",
3330 | "react-is": "^16.13.1"
3331 | }
3332 | },
3333 | "node_modules/punycode": {
3334 | "version": "2.3.0",
3335 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
3336 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
3337 | "dev": true,
3338 | "engines": {
3339 | "node": ">=6"
3340 | }
3341 | },
3342 | "node_modules/queue-microtask": {
3343 | "version": "1.2.3",
3344 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
3345 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
3346 | "dev": true,
3347 | "funding": [
3348 | {
3349 | "type": "github",
3350 | "url": "https://github.com/sponsors/feross"
3351 | },
3352 | {
3353 | "type": "patreon",
3354 | "url": "https://www.patreon.com/feross"
3355 | },
3356 | {
3357 | "type": "consulting",
3358 | "url": "https://feross.org/support"
3359 | }
3360 | ]
3361 | },
3362 | "node_modules/react": {
3363 | "version": "18.2.0",
3364 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
3365 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
3366 | "dependencies": {
3367 | "loose-envify": "^1.1.0"
3368 | },
3369 | "engines": {
3370 | "node": ">=0.10.0"
3371 | }
3372 | },
3373 | "node_modules/react-dom": {
3374 | "version": "18.2.0",
3375 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
3376 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
3377 | "dependencies": {
3378 | "loose-envify": "^1.1.0",
3379 | "scheduler": "^0.23.0"
3380 | },
3381 | "peerDependencies": {
3382 | "react": "^18.2.0"
3383 | }
3384 | },
3385 | "node_modules/react-icons": {
3386 | "version": "4.10.1",
3387 | "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz",
3388 | "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==",
3389 | "peerDependencies": {
3390 | "react": "*"
3391 | }
3392 | },
3393 | "node_modules/react-is": {
3394 | "version": "16.13.1",
3395 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
3396 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
3397 | "dev": true
3398 | },
3399 | "node_modules/react-refresh": {
3400 | "version": "0.14.0",
3401 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
3402 | "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
3403 | "dev": true,
3404 | "engines": {
3405 | "node": ">=0.10.0"
3406 | }
3407 | },
3408 | "node_modules/read-cache": {
3409 | "version": "1.0.0",
3410 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
3411 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
3412 | "dev": true,
3413 | "dependencies": {
3414 | "pify": "^2.3.0"
3415 | }
3416 | },
3417 | "node_modules/readdirp": {
3418 | "version": "3.6.0",
3419 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
3420 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
3421 | "dev": true,
3422 | "dependencies": {
3423 | "picomatch": "^2.2.1"
3424 | },
3425 | "engines": {
3426 | "node": ">=8.10.0"
3427 | }
3428 | },
3429 | "node_modules/regexp.prototype.flags": {
3430 | "version": "1.5.0",
3431 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
3432 | "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
3433 | "dev": true,
3434 | "dependencies": {
3435 | "call-bind": "^1.0.2",
3436 | "define-properties": "^1.2.0",
3437 | "functions-have-names": "^1.2.3"
3438 | },
3439 | "engines": {
3440 | "node": ">= 0.4"
3441 | },
3442 | "funding": {
3443 | "url": "https://github.com/sponsors/ljharb"
3444 | }
3445 | },
3446 | "node_modules/resolve": {
3447 | "version": "2.0.0-next.4",
3448 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
3449 | "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
3450 | "dev": true,
3451 | "dependencies": {
3452 | "is-core-module": "^2.9.0",
3453 | "path-parse": "^1.0.7",
3454 | "supports-preserve-symlinks-flag": "^1.0.0"
3455 | },
3456 | "bin": {
3457 | "resolve": "bin/resolve"
3458 | },
3459 | "funding": {
3460 | "url": "https://github.com/sponsors/ljharb"
3461 | }
3462 | },
3463 | "node_modules/resolve-from": {
3464 | "version": "4.0.0",
3465 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
3466 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
3467 | "dev": true,
3468 | "engines": {
3469 | "node": ">=4"
3470 | }
3471 | },
3472 | "node_modules/reusify": {
3473 | "version": "1.0.4",
3474 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
3475 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
3476 | "dev": true,
3477 | "engines": {
3478 | "iojs": ">=1.0.0",
3479 | "node": ">=0.10.0"
3480 | }
3481 | },
3482 | "node_modules/rimraf": {
3483 | "version": "3.0.2",
3484 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
3485 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
3486 | "dev": true,
3487 | "dependencies": {
3488 | "glob": "^7.1.3"
3489 | },
3490 | "bin": {
3491 | "rimraf": "bin.js"
3492 | },
3493 | "funding": {
3494 | "url": "https://github.com/sponsors/isaacs"
3495 | }
3496 | },
3497 | "node_modules/rollup": {
3498 | "version": "3.26.2",
3499 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.2.tgz",
3500 | "integrity": "sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==",
3501 | "dev": true,
3502 | "bin": {
3503 | "rollup": "dist/bin/rollup"
3504 | },
3505 | "engines": {
3506 | "node": ">=14.18.0",
3507 | "npm": ">=8.0.0"
3508 | },
3509 | "optionalDependencies": {
3510 | "fsevents": "~2.3.2"
3511 | }
3512 | },
3513 | "node_modules/run-parallel": {
3514 | "version": "1.2.0",
3515 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
3516 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
3517 | "dev": true,
3518 | "funding": [
3519 | {
3520 | "type": "github",
3521 | "url": "https://github.com/sponsors/feross"
3522 | },
3523 | {
3524 | "type": "patreon",
3525 | "url": "https://www.patreon.com/feross"
3526 | },
3527 | {
3528 | "type": "consulting",
3529 | "url": "https://feross.org/support"
3530 | }
3531 | ],
3532 | "dependencies": {
3533 | "queue-microtask": "^1.2.2"
3534 | }
3535 | },
3536 | "node_modules/safe-regex-test": {
3537 | "version": "1.0.0",
3538 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
3539 | "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
3540 | "dev": true,
3541 | "dependencies": {
3542 | "call-bind": "^1.0.2",
3543 | "get-intrinsic": "^1.1.3",
3544 | "is-regex": "^1.1.4"
3545 | },
3546 | "funding": {
3547 | "url": "https://github.com/sponsors/ljharb"
3548 | }
3549 | },
3550 | "node_modules/scheduler": {
3551 | "version": "0.23.0",
3552 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
3553 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
3554 | "dependencies": {
3555 | "loose-envify": "^1.1.0"
3556 | }
3557 | },
3558 | "node_modules/semver": {
3559 | "version": "6.3.0",
3560 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
3561 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
3562 | "dev": true,
3563 | "bin": {
3564 | "semver": "bin/semver.js"
3565 | }
3566 | },
3567 | "node_modules/shebang-command": {
3568 | "version": "2.0.0",
3569 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
3570 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
3571 | "dev": true,
3572 | "dependencies": {
3573 | "shebang-regex": "^3.0.0"
3574 | },
3575 | "engines": {
3576 | "node": ">=8"
3577 | }
3578 | },
3579 | "node_modules/shebang-regex": {
3580 | "version": "3.0.0",
3581 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
3582 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
3583 | "dev": true,
3584 | "engines": {
3585 | "node": ">=8"
3586 | }
3587 | },
3588 | "node_modules/side-channel": {
3589 | "version": "1.0.4",
3590 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
3591 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
3592 | "dev": true,
3593 | "dependencies": {
3594 | "call-bind": "^1.0.0",
3595 | "get-intrinsic": "^1.0.2",
3596 | "object-inspect": "^1.9.0"
3597 | },
3598 | "funding": {
3599 | "url": "https://github.com/sponsors/ljharb"
3600 | }
3601 | },
3602 | "node_modules/source-map-js": {
3603 | "version": "1.0.2",
3604 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
3605 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
3606 | "dev": true,
3607 | "engines": {
3608 | "node": ">=0.10.0"
3609 | }
3610 | },
3611 | "node_modules/string.prototype.matchall": {
3612 | "version": "4.0.8",
3613 | "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
3614 | "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
3615 | "dev": true,
3616 | "dependencies": {
3617 | "call-bind": "^1.0.2",
3618 | "define-properties": "^1.1.4",
3619 | "es-abstract": "^1.20.4",
3620 | "get-intrinsic": "^1.1.3",
3621 | "has-symbols": "^1.0.3",
3622 | "internal-slot": "^1.0.3",
3623 | "regexp.prototype.flags": "^1.4.3",
3624 | "side-channel": "^1.0.4"
3625 | },
3626 | "funding": {
3627 | "url": "https://github.com/sponsors/ljharb"
3628 | }
3629 | },
3630 | "node_modules/string.prototype.trim": {
3631 | "version": "1.2.7",
3632 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
3633 | "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
3634 | "dev": true,
3635 | "dependencies": {
3636 | "call-bind": "^1.0.2",
3637 | "define-properties": "^1.1.4",
3638 | "es-abstract": "^1.20.4"
3639 | },
3640 | "engines": {
3641 | "node": ">= 0.4"
3642 | },
3643 | "funding": {
3644 | "url": "https://github.com/sponsors/ljharb"
3645 | }
3646 | },
3647 | "node_modules/string.prototype.trimend": {
3648 | "version": "1.0.6",
3649 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
3650 | "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
3651 | "dev": true,
3652 | "dependencies": {
3653 | "call-bind": "^1.0.2",
3654 | "define-properties": "^1.1.4",
3655 | "es-abstract": "^1.20.4"
3656 | },
3657 | "funding": {
3658 | "url": "https://github.com/sponsors/ljharb"
3659 | }
3660 | },
3661 | "node_modules/string.prototype.trimstart": {
3662 | "version": "1.0.6",
3663 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
3664 | "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
3665 | "dev": true,
3666 | "dependencies": {
3667 | "call-bind": "^1.0.2",
3668 | "define-properties": "^1.1.4",
3669 | "es-abstract": "^1.20.4"
3670 | },
3671 | "funding": {
3672 | "url": "https://github.com/sponsors/ljharb"
3673 | }
3674 | },
3675 | "node_modules/strip-ansi": {
3676 | "version": "6.0.1",
3677 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
3678 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
3679 | "dev": true,
3680 | "dependencies": {
3681 | "ansi-regex": "^5.0.1"
3682 | },
3683 | "engines": {
3684 | "node": ">=8"
3685 | }
3686 | },
3687 | "node_modules/strip-json-comments": {
3688 | "version": "3.1.1",
3689 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
3690 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
3691 | "dev": true,
3692 | "engines": {
3693 | "node": ">=8"
3694 | },
3695 | "funding": {
3696 | "url": "https://github.com/sponsors/sindresorhus"
3697 | }
3698 | },
3699 | "node_modules/sucrase": {
3700 | "version": "3.32.0",
3701 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
3702 | "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
3703 | "dev": true,
3704 | "dependencies": {
3705 | "@jridgewell/gen-mapping": "^0.3.2",
3706 | "commander": "^4.0.0",
3707 | "glob": "7.1.6",
3708 | "lines-and-columns": "^1.1.6",
3709 | "mz": "^2.7.0",
3710 | "pirates": "^4.0.1",
3711 | "ts-interface-checker": "^0.1.9"
3712 | },
3713 | "bin": {
3714 | "sucrase": "bin/sucrase",
3715 | "sucrase-node": "bin/sucrase-node"
3716 | },
3717 | "engines": {
3718 | "node": ">=8"
3719 | }
3720 | },
3721 | "node_modules/sucrase/node_modules/glob": {
3722 | "version": "7.1.6",
3723 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
3724 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
3725 | "dev": true,
3726 | "dependencies": {
3727 | "fs.realpath": "^1.0.0",
3728 | "inflight": "^1.0.4",
3729 | "inherits": "2",
3730 | "minimatch": "^3.0.4",
3731 | "once": "^1.3.0",
3732 | "path-is-absolute": "^1.0.0"
3733 | },
3734 | "engines": {
3735 | "node": "*"
3736 | },
3737 | "funding": {
3738 | "url": "https://github.com/sponsors/isaacs"
3739 | }
3740 | },
3741 | "node_modules/supports-color": {
3742 | "version": "5.5.0",
3743 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
3744 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
3745 | "dev": true,
3746 | "dependencies": {
3747 | "has-flag": "^3.0.0"
3748 | },
3749 | "engines": {
3750 | "node": ">=4"
3751 | }
3752 | },
3753 | "node_modules/supports-preserve-symlinks-flag": {
3754 | "version": "1.0.0",
3755 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
3756 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
3757 | "dev": true,
3758 | "engines": {
3759 | "node": ">= 0.4"
3760 | },
3761 | "funding": {
3762 | "url": "https://github.com/sponsors/ljharb"
3763 | }
3764 | },
3765 | "node_modules/tailwindcss": {
3766 | "version": "3.3.2",
3767 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz",
3768 | "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==",
3769 | "dev": true,
3770 | "dependencies": {
3771 | "@alloc/quick-lru": "^5.2.0",
3772 | "arg": "^5.0.2",
3773 | "chokidar": "^3.5.3",
3774 | "didyoumean": "^1.2.2",
3775 | "dlv": "^1.1.3",
3776 | "fast-glob": "^3.2.12",
3777 | "glob-parent": "^6.0.2",
3778 | "is-glob": "^4.0.3",
3779 | "jiti": "^1.18.2",
3780 | "lilconfig": "^2.1.0",
3781 | "micromatch": "^4.0.5",
3782 | "normalize-path": "^3.0.0",
3783 | "object-hash": "^3.0.0",
3784 | "picocolors": "^1.0.0",
3785 | "postcss": "^8.4.23",
3786 | "postcss-import": "^15.1.0",
3787 | "postcss-js": "^4.0.1",
3788 | "postcss-load-config": "^4.0.1",
3789 | "postcss-nested": "^6.0.1",
3790 | "postcss-selector-parser": "^6.0.11",
3791 | "postcss-value-parser": "^4.2.0",
3792 | "resolve": "^1.22.2",
3793 | "sucrase": "^3.32.0"
3794 | },
3795 | "bin": {
3796 | "tailwind": "lib/cli.js",
3797 | "tailwindcss": "lib/cli.js"
3798 | },
3799 | "engines": {
3800 | "node": ">=14.0.0"
3801 | }
3802 | },
3803 | "node_modules/tailwindcss/node_modules/resolve": {
3804 | "version": "1.22.2",
3805 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
3806 | "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
3807 | "dev": true,
3808 | "dependencies": {
3809 | "is-core-module": "^2.11.0",
3810 | "path-parse": "^1.0.7",
3811 | "supports-preserve-symlinks-flag": "^1.0.0"
3812 | },
3813 | "bin": {
3814 | "resolve": "bin/resolve"
3815 | },
3816 | "funding": {
3817 | "url": "https://github.com/sponsors/ljharb"
3818 | }
3819 | },
3820 | "node_modules/text-table": {
3821 | "version": "0.2.0",
3822 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
3823 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
3824 | "dev": true
3825 | },
3826 | "node_modules/thenify": {
3827 | "version": "3.3.1",
3828 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
3829 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
3830 | "dev": true,
3831 | "dependencies": {
3832 | "any-promise": "^1.0.0"
3833 | }
3834 | },
3835 | "node_modules/thenify-all": {
3836 | "version": "1.6.0",
3837 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
3838 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
3839 | "dev": true,
3840 | "dependencies": {
3841 | "thenify": ">= 3.1.0 < 4"
3842 | },
3843 | "engines": {
3844 | "node": ">=0.8"
3845 | }
3846 | },
3847 | "node_modules/to-fast-properties": {
3848 | "version": "2.0.0",
3849 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
3850 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
3851 | "dev": true,
3852 | "engines": {
3853 | "node": ">=4"
3854 | }
3855 | },
3856 | "node_modules/to-regex-range": {
3857 | "version": "5.0.1",
3858 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
3859 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
3860 | "dev": true,
3861 | "dependencies": {
3862 | "is-number": "^7.0.0"
3863 | },
3864 | "engines": {
3865 | "node": ">=8.0"
3866 | }
3867 | },
3868 | "node_modules/ts-interface-checker": {
3869 | "version": "0.1.13",
3870 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
3871 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
3872 | "dev": true
3873 | },
3874 | "node_modules/type-check": {
3875 | "version": "0.4.0",
3876 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
3877 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
3878 | "dev": true,
3879 | "dependencies": {
3880 | "prelude-ls": "^1.2.1"
3881 | },
3882 | "engines": {
3883 | "node": ">= 0.8.0"
3884 | }
3885 | },
3886 | "node_modules/type-fest": {
3887 | "version": "0.20.2",
3888 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
3889 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
3890 | "dev": true,
3891 | "engines": {
3892 | "node": ">=10"
3893 | },
3894 | "funding": {
3895 | "url": "https://github.com/sponsors/sindresorhus"
3896 | }
3897 | },
3898 | "node_modules/typed-array-length": {
3899 | "version": "1.0.4",
3900 | "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
3901 | "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
3902 | "dev": true,
3903 | "dependencies": {
3904 | "call-bind": "^1.0.2",
3905 | "for-each": "^0.3.3",
3906 | "is-typed-array": "^1.1.9"
3907 | },
3908 | "funding": {
3909 | "url": "https://github.com/sponsors/ljharb"
3910 | }
3911 | },
3912 | "node_modules/unbox-primitive": {
3913 | "version": "1.0.2",
3914 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
3915 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
3916 | "dev": true,
3917 | "dependencies": {
3918 | "call-bind": "^1.0.2",
3919 | "has-bigints": "^1.0.2",
3920 | "has-symbols": "^1.0.3",
3921 | "which-boxed-primitive": "^1.0.2"
3922 | },
3923 | "funding": {
3924 | "url": "https://github.com/sponsors/ljharb"
3925 | }
3926 | },
3927 | "node_modules/update-browserslist-db": {
3928 | "version": "1.0.11",
3929 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
3930 | "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
3931 | "dev": true,
3932 | "funding": [
3933 | {
3934 | "type": "opencollective",
3935 | "url": "https://opencollective.com/browserslist"
3936 | },
3937 | {
3938 | "type": "tidelift",
3939 | "url": "https://tidelift.com/funding/github/npm/browserslist"
3940 | },
3941 | {
3942 | "type": "github",
3943 | "url": "https://github.com/sponsors/ai"
3944 | }
3945 | ],
3946 | "dependencies": {
3947 | "escalade": "^3.1.1",
3948 | "picocolors": "^1.0.0"
3949 | },
3950 | "bin": {
3951 | "update-browserslist-db": "cli.js"
3952 | },
3953 | "peerDependencies": {
3954 | "browserslist": ">= 4.21.0"
3955 | }
3956 | },
3957 | "node_modules/uri-js": {
3958 | "version": "4.4.1",
3959 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
3960 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
3961 | "dev": true,
3962 | "dependencies": {
3963 | "punycode": "^2.1.0"
3964 | }
3965 | },
3966 | "node_modules/util-deprecate": {
3967 | "version": "1.0.2",
3968 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3969 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
3970 | "dev": true
3971 | },
3972 | "node_modules/vite": {
3973 | "version": "4.4.2",
3974 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.2.tgz",
3975 | "integrity": "sha512-zUcsJN+UvdSyHhYa277UHhiJ3iq4hUBwHavOpsNUGsTgjBeoBlK8eDt+iT09pBq0h9/knhG/SPrZiM7cGmg7NA==",
3976 | "dev": true,
3977 | "dependencies": {
3978 | "esbuild": "^0.18.10",
3979 | "postcss": "^8.4.24",
3980 | "rollup": "^3.25.2"
3981 | },
3982 | "bin": {
3983 | "vite": "bin/vite.js"
3984 | },
3985 | "engines": {
3986 | "node": "^14.18.0 || >=16.0.0"
3987 | },
3988 | "funding": {
3989 | "url": "https://github.com/vitejs/vite?sponsor=1"
3990 | },
3991 | "optionalDependencies": {
3992 | "fsevents": "~2.3.2"
3993 | },
3994 | "peerDependencies": {
3995 | "@types/node": ">= 14",
3996 | "less": "*",
3997 | "lightningcss": "^1.21.0",
3998 | "sass": "*",
3999 | "stylus": "*",
4000 | "sugarss": "*",
4001 | "terser": "^5.4.0"
4002 | },
4003 | "peerDependenciesMeta": {
4004 | "@types/node": {
4005 | "optional": true
4006 | },
4007 | "less": {
4008 | "optional": true
4009 | },
4010 | "lightningcss": {
4011 | "optional": true
4012 | },
4013 | "sass": {
4014 | "optional": true
4015 | },
4016 | "stylus": {
4017 | "optional": true
4018 | },
4019 | "sugarss": {
4020 | "optional": true
4021 | },
4022 | "terser": {
4023 | "optional": true
4024 | }
4025 | }
4026 | },
4027 | "node_modules/which": {
4028 | "version": "2.0.2",
4029 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
4030 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
4031 | "dev": true,
4032 | "dependencies": {
4033 | "isexe": "^2.0.0"
4034 | },
4035 | "bin": {
4036 | "node-which": "bin/node-which"
4037 | },
4038 | "engines": {
4039 | "node": ">= 8"
4040 | }
4041 | },
4042 | "node_modules/which-boxed-primitive": {
4043 | "version": "1.0.2",
4044 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
4045 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
4046 | "dev": true,
4047 | "dependencies": {
4048 | "is-bigint": "^1.0.1",
4049 | "is-boolean-object": "^1.1.0",
4050 | "is-number-object": "^1.0.4",
4051 | "is-string": "^1.0.5",
4052 | "is-symbol": "^1.0.3"
4053 | },
4054 | "funding": {
4055 | "url": "https://github.com/sponsors/ljharb"
4056 | }
4057 | },
4058 | "node_modules/which-typed-array": {
4059 | "version": "1.1.9",
4060 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
4061 | "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
4062 | "dev": true,
4063 | "dependencies": {
4064 | "available-typed-arrays": "^1.0.5",
4065 | "call-bind": "^1.0.2",
4066 | "for-each": "^0.3.3",
4067 | "gopd": "^1.0.1",
4068 | "has-tostringtag": "^1.0.0",
4069 | "is-typed-array": "^1.1.10"
4070 | },
4071 | "engines": {
4072 | "node": ">= 0.4"
4073 | },
4074 | "funding": {
4075 | "url": "https://github.com/sponsors/ljharb"
4076 | }
4077 | },
4078 | "node_modules/wrappy": {
4079 | "version": "1.0.2",
4080 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
4081 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
4082 | "dev": true
4083 | },
4084 | "node_modules/yallist": {
4085 | "version": "3.1.1",
4086 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
4087 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
4088 | "dev": true
4089 | },
4090 | "node_modules/yaml": {
4091 | "version": "2.3.1",
4092 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz",
4093 | "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==",
4094 | "dev": true,
4095 | "engines": {
4096 | "node": ">= 14"
4097 | }
4098 | },
4099 | "node_modules/yocto-queue": {
4100 | "version": "0.1.0",
4101 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
4102 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
4103 | "dev": true,
4104 | "engines": {
4105 | "node": ">=10"
4106 | },
4107 | "funding": {
4108 | "url": "https://github.com/sponsors/sindresorhus"
4109 | }
4110 | }
4111 | }
4112 | }
4113 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frontend",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "lint": "eslint src --ext js,jsx --report-unused-disable-directives --max-warnings 0",
10 | "preview": "vite preview"
11 | },
12 | "dependencies": {
13 | "react": "^18.2.0",
14 | "react-dom": "^18.2.0",
15 | "react-icons": "^4.10.1"
16 | },
17 | "devDependencies": {
18 | "@types/react": "^18.2.14",
19 | "@types/react-dom": "^18.2.6",
20 | "@vitejs/plugin-react": "^4.0.1",
21 | "autoprefixer": "^10.4.14",
22 | "eslint": "^8.44.0",
23 | "eslint-plugin-react": "^7.32.2",
24 | "eslint-plugin-react-hooks": "^4.6.0",
25 | "eslint-plugin-react-refresh": "^0.4.1",
26 | "postcss": "^8.4.25",
27 | "tailwindcss": "^3.3.2",
28 | "vite": "^4.4.0"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/frontend/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/frontend/public/images/background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Coding-Crashkurse/Langchain-Production-Project/ece6dfa35393552a684992929f873e32e434c685/frontend/public/images/background.jpg
--------------------------------------------------------------------------------
/frontend/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/src/App.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { FaSpinner } from "react-icons/fa";
3 |
4 | const App = () => {
5 | const [conversation, setConversation] = useState({ conversation: [] });
6 | const [userMessage, setUserMessage] = useState("");
7 | const [isLoading, setIsLoading] = useState(false);
8 |
9 | useEffect(() => {
10 | const fetchConversation = async () => {
11 | const conversationId = localStorage.getItem("conversationId");
12 | if (conversationId) {
13 | const response = await fetch(
14 | `http://localhost:5000/service2/${conversationId}`
15 | );
16 | const data = await response.json();
17 | if (!data.error) {
18 | setConversation(data);
19 | }
20 | }
21 | };
22 |
23 | fetchConversation();
24 | }, []);
25 |
26 | const generateConversationId = () =>
27 | "_" + Math.random().toString(36).slice(2, 11);
28 |
29 | const handleInputChange = (event) => {
30 | setUserMessage(event.target.value);
31 | };
32 |
33 | const handleNewSession = () => {
34 | localStorage.removeItem("conversationId");
35 | setConversation({ conversation: [] });
36 | };
37 |
38 | const handleSubmit = async () => {
39 | setIsLoading(true);
40 | let conversationId = localStorage.getItem("conversationId");
41 | if (!conversationId) {
42 | conversationId = generateConversationId();
43 | localStorage.setItem("conversationId", conversationId);
44 | }
45 |
46 | const newConversation = [
47 | ...conversation.conversation,
48 | { role: "user", content: userMessage },
49 | ];
50 |
51 | const response = await fetch(
52 | `http://localhost:5000/service2/${conversationId}`,
53 | {
54 | method: "POST",
55 | headers: { "Content-Type": "application/json" },
56 | body: JSON.stringify({ conversation: newConversation }),
57 | }
58 | );
59 |
60 | const data = await response.json();
61 | setConversation(data);
62 | setUserMessage("");
63 | setIsLoading(false);
64 | };
65 |
66 | return (
67 |
76 |
Restaurant Chatbot
77 | {conversation.conversation.length > 0 && (
78 |
79 | {conversation.conversation
80 | .filter((message) => message.role !== "system")
81 | .map((message, index) => (
82 |
88 |
89 | {message.role}:
90 |
91 | {message.content}
92 |
93 | ))}
94 |
95 | )}
96 |
97 | {
102 | if (event.key === "Enter") {
103 | event.preventDefault();
104 | handleSubmit();
105 | }
106 | }}
107 | className="flex-grow mr-2 p-2 rounded border-gray-300"
108 | placeholder={isLoading ? "Processing..." : "Type your message here"}
109 | />
110 |
117 |
118 | {isLoading && (
119 |
120 |
121 | Loading...
122 |
123 | )}
124 |
130 |
131 | );
132 | };
133 |
134 | export default App;
135 |
--------------------------------------------------------------------------------
/frontend/src/assets/react.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/frontend/src/main.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom/client'
3 | import App from './App.jsx'
4 | import './index.css'
5 |
6 | ReactDOM.createRoot(document.getElementById('root')).render(
7 |
8 |
9 | ,
10 | )
11 |
--------------------------------------------------------------------------------
/frontend/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | export default {
3 | content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
4 | theme: {
5 | extend: {},
6 | },
7 | plugins: [],
8 | };
9 |
--------------------------------------------------------------------------------
/frontend/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import react from "@vitejs/plugin-react";
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | server: {
7 | host: "0.0.0.0",
8 | port: 3000,
9 | },
10 | plugins: [react()],
11 | });
12 |
--------------------------------------------------------------------------------
/insert_data.py:
--------------------------------------------------------------------------------
1 | from dotenv import find_dotenv, load_dotenv
2 | from langchain.embeddings import OpenAIEmbeddings
3 | from langchain.text_splitter import CharacterTextSplitter
4 | from langchain.vectorstores.pgvector import PGVector
5 | from langchain.document_loaders import DirectoryLoader, TextLoader
6 |
7 | load_dotenv(find_dotenv())
8 |
9 | embeddings = OpenAIEmbeddings()
10 | loader = DirectoryLoader(
11 | "./FAQ", glob="**/*.txt", loader_cls=TextLoader, show_progress=True
12 | )
13 | documents = loader.load()
14 | text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
15 | docs = text_splitter.split_documents(documents)
16 |
17 | # PGVector needs the connection string to the database.
18 | CONNECTION_STRING = "postgresql+psycopg2://admin:admin@127.0.0.1:5433/vectordb"
19 | COLLECTION_NAME = "vectordb"
20 |
21 |
22 | PGVector.from_documents(
23 | docs,
24 | embeddings,
25 | collection_name=COLLECTION_NAME,
26 | connection_string=CONNECTION_STRING
27 | )
28 |
--------------------------------------------------------------------------------
/postgres/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM postgres:13
2 |
3 | RUN apt-get update && apt-get upgrade -y && \
4 | apt-get install -y wget build-essential postgresql-server-dev-13
5 |
6 | RUN wget https://github.com/pgvector/pgvector/archive/v0.4.4.tar.gz && \
7 | tar -xzvf v0.4.4.tar.gz && \
8 | cd pgvector-0.4.4 && \
9 | make && \
10 | make install
11 |
12 | COPY ./init.sql /docker-entrypoint-initdb.d/
--------------------------------------------------------------------------------
/postgres/init.sql:
--------------------------------------------------------------------------------
1 | CREATE EXTENSION vector;
--------------------------------------------------------------------------------
/service2/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.10-slim-buster
2 |
3 | WORKDIR /app
4 |
5 | COPY . /app
6 |
7 | RUN pip install --no-cache-dir fastapi uvicorn redis requests openai
8 |
9 | EXPOSE 80
10 |
11 | CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "80"]
12 |
--------------------------------------------------------------------------------
/service2/app.py:
--------------------------------------------------------------------------------
1 | from typing import List
2 | from fastapi import FastAPI
3 | from fastapi.middleware.cors import CORSMiddleware
4 | from pydantic import BaseModel
5 | import redis
6 | import requests
7 | import json
8 | import logging
9 |
10 | logging.basicConfig(level=logging.INFO)
11 | logger = logging.getLogger(__name__)
12 |
13 | r = redis.Redis(host='redis', port=6379, db=0)
14 |
15 | app = FastAPI()
16 | app.add_middleware(
17 | CORSMiddleware,
18 | allow_origins=["*"],
19 | allow_credentials=True,
20 | allow_methods=["*"],
21 | allow_headers=["*"],
22 | )
23 |
24 | class Message(BaseModel):
25 | role: str
26 | content: str
27 |
28 | class Conversation(BaseModel):
29 | conversation: List[Message]
30 |
31 |
32 |
33 | @app.get("/service2/{conversation_id}")
34 | async def get_conversation(conversation_id: str):
35 | logger.info(f"Retrieving initial id {conversation_id}")
36 | existing_conversation_json = r.get(conversation_id)
37 | if existing_conversation_json:
38 | existing_conversation = json.loads(existing_conversation_json)
39 | return existing_conversation
40 | else:
41 | return {"error": "Conversation not found"}
42 |
43 |
44 |
45 | @app.post("/service2/{conversation_id}")
46 | async def service2(conversation_id: str, conversation: Conversation):
47 | logger.info(f"Sending Conversation with ID {conversation_id} to OpenAI")
48 | existing_conversation_json = r.get(conversation_id)
49 | if existing_conversation_json:
50 | existing_conversation = json.loads(existing_conversation_json)
51 | else:
52 | existing_conversation = {"conversation": [{"role": "system", "content": "You are a helpful assistant."}]}
53 |
54 | existing_conversation["conversation"].append(conversation.dict()["conversation"][-1])
55 |
56 | response = requests.post(f"http://service3:80/service3/{conversation_id}", json=existing_conversation)
57 | response.raise_for_status()
58 | assistant_message = response.json()["reply"]
59 |
60 | existing_conversation["conversation"].append({"role": "assistant", "content": assistant_message})
61 |
62 | r.set(conversation_id, json.dumps(existing_conversation))
63 |
64 | return existing_conversation
65 |
66 |
67 |
--------------------------------------------------------------------------------
/service3/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.9-slim-buster
2 |
3 | WORKDIR /app
4 |
5 | COPY . /app
6 |
7 | RUN pip install --no-cache-dir fastapi uvicorn redis requests openai langchain python-dotenv postgres psycopg2-binary pgvector
8 |
9 | # install postgresql client
10 | RUN apt-get update && apt-get install -y postgresql-client && rm -rf /var/lib/apt/lists/*
11 |
12 | # Copy wait-for-postgres.sh and make it executable
13 | COPY ./wait-for-postgres.sh /wait-for-postgres.sh
14 | RUN chmod +x /wait-for-postgres.sh
15 |
16 | EXPOSE 80
17 |
18 | CMD ["/wait-for-postgres.sh", "postgres", "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "80"]
19 |
--------------------------------------------------------------------------------
/service3/app.py:
--------------------------------------------------------------------------------
1 | from typing import List
2 | from fastapi import FastAPI
3 | from pydantic import BaseModel
4 | import os
5 | from fastapi.middleware.cors import CORSMiddleware
6 | import openai
7 | from langchain.prompts import PromptTemplate
8 | import logging
9 | from dotenv import find_dotenv, load_dotenv
10 | from langchain.embeddings.openai import OpenAIEmbeddings
11 | from langchain.vectorstores.pgvector import PGVector
12 | from langchain.chat_models import ChatOpenAI
13 | from langchain.embeddings import OpenAIEmbeddings
14 | from langchain.vectorstores.pgvector import PGVector
15 | from langchain.schema import (
16 | AIMessage,
17 | HumanMessage,
18 | SystemMessage
19 | )
20 | from langchain.prompts import (
21 | PromptTemplate,
22 | SystemMessagePromptTemplate,
23 | )
24 |
25 | ROLE_CLASS_MAP = {
26 | "assistant": AIMessage,
27 | "user": HumanMessage,
28 | "system": SystemMessage
29 | }
30 |
31 | load_dotenv(find_dotenv())
32 | openai.api_key = os.getenv("OPENAI_API_KEY")
33 | CONNECTION_STRING = "postgresql+psycopg2://admin:admin@postgres:5432/vectordb"
34 | COLLECTION_NAME="vectordb"
35 |
36 | logging.basicConfig(level=logging.INFO)
37 | logger = logging.getLogger(__name__)
38 |
39 | class Message(BaseModel):
40 | role: str
41 | content: str
42 |
43 | class Conversation(BaseModel):
44 | conversation: List[Message]
45 |
46 | embeddings = OpenAIEmbeddings()
47 | chat = ChatOpenAI(temperature=0)
48 | store = PGVector(
49 | collection_name=COLLECTION_NAME,
50 | connection_string=CONNECTION_STRING,
51 | embedding_function=embeddings,
52 | )
53 | retriever = store.as_retriever()
54 |
55 | prompt_template = """As a FAQ Bot for our restaurant, you have the following information about our restaurant:
56 |
57 | {context}
58 |
59 | Please provide the most suitable response for the users question.
60 | Answer:"""
61 |
62 | prompt = PromptTemplate(
63 | template=prompt_template, input_variables=["context"]
64 | )
65 | system_message_prompt = SystemMessagePromptTemplate(prompt=prompt)
66 |
67 |
68 | def create_messages(conversation):
69 | return [ROLE_CLASS_MAP[message.role](content=message.content) for message in conversation]
70 |
71 |
72 | def format_docs(docs):
73 | formatted_docs = []
74 | for doc in docs:
75 | formatted_doc = "Source: " + doc.metadata['source']
76 | formatted_docs.append(formatted_doc)
77 | return '\n'.join(formatted_docs)
78 |
79 | app = FastAPI()
80 | app.add_middleware(
81 | CORSMiddleware,
82 | allow_origins=["*"],
83 | allow_credentials=True,
84 | allow_methods=["*"],
85 | allow_headers=["*"],
86 | )
87 |
88 | @app.post("/service3/{conversation_id}")
89 | async def service3(conversation_id: str, conversation: Conversation):
90 |
91 | query = conversation.conversation[-1].content
92 |
93 | docs = retriever.get_relevant_documents(query=query)
94 | docs = format_docs(docs=docs)
95 |
96 | prompt = system_message_prompt.format(context=docs)
97 | messages = [prompt] + create_messages(conversation=conversation.conversation)
98 |
99 | result = chat(messages)
100 |
101 | return {"id": conversation_id, "reply": result.content}
102 |
--------------------------------------------------------------------------------
/service3/wait-for-postgres.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # wait-for-postgres.sh
3 |
4 | set -e
5 |
6 | host="$1"
7 | shift
8 | cmd="$@"
9 |
10 | until PGPASSWORD=admin psql -h postgres -U admin -d vectordb -c '\q'; do
11 | >&2 echo "Postgres is unavailable - sleeping"
12 | sleep 1
13 | done
14 |
15 | >&2 echo "Postgres is up - executing command"
16 | exec $cmd
17 |
--------------------------------------------------------------------------------