diff --git a/.gitattributes copy b/.gitattributes copy
new file mode 100644
index 0000000000000000000000000000000000000000..c7d9f3332a950355d5a77d85000f05e6f45435ea
--- /dev/null
+++ b/.gitattributes copy
@@ -0,0 +1,34 @@
+*.7z filter=lfs diff=lfs merge=lfs -text
+*.arrow filter=lfs diff=lfs merge=lfs -text
+*.bin filter=lfs diff=lfs merge=lfs -text
+*.bz2 filter=lfs diff=lfs merge=lfs -text
+*.ckpt filter=lfs diff=lfs merge=lfs -text
+*.ftz filter=lfs diff=lfs merge=lfs -text
+*.gz filter=lfs diff=lfs merge=lfs -text
+*.h5 filter=lfs diff=lfs merge=lfs -text
+*.joblib filter=lfs diff=lfs merge=lfs -text
+*.lfs.* filter=lfs diff=lfs merge=lfs -text
+*.mlmodel filter=lfs diff=lfs merge=lfs -text
+*.model filter=lfs diff=lfs merge=lfs -text
+*.msgpack filter=lfs diff=lfs merge=lfs -text
+*.npy filter=lfs diff=lfs merge=lfs -text
+*.npz filter=lfs diff=lfs merge=lfs -text
+*.onnx filter=lfs diff=lfs merge=lfs -text
+*.ot filter=lfs diff=lfs merge=lfs -text
+*.parquet filter=lfs diff=lfs merge=lfs -text
+*.pb filter=lfs diff=lfs merge=lfs -text
+*.pickle filter=lfs diff=lfs merge=lfs -text
+*.pkl filter=lfs diff=lfs merge=lfs -text
+*.pt filter=lfs diff=lfs merge=lfs -text
+*.pth filter=lfs diff=lfs merge=lfs -text
+*.rar filter=lfs diff=lfs merge=lfs -text
+*.safetensors filter=lfs diff=lfs merge=lfs -text
+saved_model/**/* filter=lfs diff=lfs merge=lfs -text
+*.tar.* filter=lfs diff=lfs merge=lfs -text
+*.tflite filter=lfs diff=lfs merge=lfs -text
+*.tgz filter=lfs diff=lfs merge=lfs -text
+*.wasm filter=lfs diff=lfs merge=lfs -text
+*.xz filter=lfs diff=lfs merge=lfs -text
+*.zip filter=lfs diff=lfs merge=lfs -text
+*.zst filter=lfs diff=lfs merge=lfs -text
+*tfevents* filter=lfs diff=lfs merge=lfs -text
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..01f7055ab6142f33e788c2055775ce348db8686c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+input_image.jpg
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..f0adac83805535fcb3c4a2f59223d598b1a30b2e
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,14 @@
+FROM python:3.9
+WORKDIR /app
+
+COPY ./requirements.txt /app/requirements.txt
+RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
+
+ENV HOME=/home/user \
+ PATH=/home/user/.local/bin:$PATH \
+ PORT=7860 \
+ URL_GRADIO=https://rgres-drawing2map.hf.space/
+
+COPY ./static/ ./
+
+CMD ["python", "app.py"]
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..873ad912545b7b86b29c573cdd63dd407c300d2a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,24 @@
+install-node:
+ ./install-node.sh
+
+build-client:
+ cd frontend && npm install && npm run build && rm -rf ../static && cp -r build/ ../static/
+
+build-dev:
+ cd frontend && npm install && NODE_ENV=development npm run build && rm -rf ../static 2>&1 && cp -rv build/ ../static/
+
+run-dev:
+ FLASK_DEBUG=development python app.py
+
+run-prod:
+ python app.py & python gradio-app.py
+
+run-mock:
+ python app.py & python gradio-mock-app.py
+
+stop-server:
+ killall python
+
+all: run-prod
+
+mock: run-mock
diff --git a/README copy.md b/README copy.md
new file mode 100644
index 0000000000000000000000000000000000000000..c0f233ef003912bd4f2559f5f69a11824b906c26
--- /dev/null
+++ b/README copy.md
@@ -0,0 +1,10 @@
+---
+title: Drawing2Map
+emoji: 🌍
+colorFrom: red
+colorTo: red
+sdk: docker
+pinned: false
+---
+
+Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
diff --git a/app.py b/app.py
new file mode 100644
index 0000000000000000000000000000000000000000..31afa06050f205c782a1ede9bce0beb039d6cc26
--- /dev/null
+++ b/app.py
@@ -0,0 +1,55 @@
+import os
+from flask import Flask, request
+import requests
+from gradio_client import Client
+import base64
+
+
+base_gradio_url = os.getenv('URL_GRADIO', 'http://localhost:7860')
+client = None
+
+app = Flask(__name__, static_url_path='/static')
+
+@app.route('/')
+def index():
+ return app.send_static_file('index.html')
+
+def save_base64_image(base64Image):
+ image_data = base64.b64decode(base64Image)
+ path = "input_image.jpg"
+ with open(path, 'wb') as f:
+ f.write(image_data)
+ return path
+
+def encode_image_to_base64(filepath):
+ with open(filepath, "rb") as image_file:
+ encoded_image = base64.b64encode(image_file.read()).decode("utf-8")
+ return encoded_image
+
+@app.route('/predict', methods=['POST'])
+def predict():
+ global client
+ if not client:
+ client = Client(base_gradio_url)
+
+ data = request.get_json()
+
+ base64Image = data['data'][0]
+ prompt = data['data'][1]
+ steps = data['data'][2]
+ seed = data['data'][3]
+
+ b64meta, b64_data = base64Image.split(',')
+
+ image_path = save_base64_image(b64_data)
+
+ result = client.predict(
+ image_path, prompt, steps, seed, fn_index=0
+ )
+
+ return b64meta + ',' + encode_image_to_base64(result)
+
+
+if __name__ == '__main__':
+ app.run(host='0.0.0.0', port=int(
+ os.environ.get('PORT', 8000)), debug=True)
diff --git a/frontend/.svelte-kit/build/hooks.js b/frontend/.svelte-kit/build/hooks.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/frontend/.svelte-kit/build/index.js b/frontend/.svelte-kit/build/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..1afac9d36bca6ed38ebc4b610043af75827dd2d6
--- /dev/null
+++ b/frontend/.svelte-kit/build/index.js
@@ -0,0 +1,81 @@
+
+import root from '__GENERATED__/root.svelte';
+import { respond } from '/workspaces/Drawing2Map-hfspace/frontend/.svelte-kit/runtime/server/index.js';
+import { set_paths, assets, base } from '/workspaces/Drawing2Map-hfspace/frontend/.svelte-kit/runtime/paths.js';
+import { set_prerendering } from '/workspaces/Drawing2Map-hfspace/frontend/.svelte-kit/runtime/env.js';
+
+const template = ({ head, body, assets, nonce }) => "\n\n\t
\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t" + head + "\n\t\n\t\n\t\t" + body + "\n\t\t\n\n";
+
+let read = null;
+
+set_paths({"base":"/static","assets":""});
+
+let default_protocol = 'https';
+
+// allow paths to be globally overridden
+// in svelte-kit preview and in prerendering
+export function override(settings) {
+ default_protocol = settings.protocol || default_protocol;
+ set_paths(settings.paths);
+ set_prerendering(settings.prerendering);
+ read = settings.read;
+}
+
+export class Server {
+ constructor(manifest) {
+ this.options = {
+ csp: {"mode":"auto","directives":{"upgrade-insecure-requests":false,"block-all-mixed-content":false}},
+ dev: false,
+ floc: false,
+ get_stack: error => String(error), // for security
+ handle_error: (error, event) => {
+ this.options.hooks.handleError({
+ error,
+ event,
+
+ // TODO remove for 1.0
+ // @ts-expect-error
+ get request() {
+ throw new Error('request in handleError has been replaced with event. See https://github.com/sveltejs/kit/pull/3384 for details');
+ }
+ });
+ error.stack = this.options.get_stack(error);
+ },
+ hooks: null,
+ hydrate: true,
+ manifest,
+ method_override: {"parameter":"_method","allowed":[]},
+ paths: { base, assets },
+ prefix: assets + '/_app/immutable/',
+ prerender: {
+ default: true,
+ enabled: true
+ },
+ read,
+ root,
+ service_worker: null,
+ router: true,
+ template,
+ template_contains_nonce: false,
+ trailing_slash: "never"
+ };
+ }
+
+ async respond(request, options = {}) {
+ if (!(request instanceof Request)) {
+ throw new Error('The first argument to server.respond must be a Request object. See https://github.com/sveltejs/kit/pull/3384 for details');
+ }
+
+ if (!this.options.hooks) {
+ const module = await import("./hooks.js");
+ this.options.hooks = {
+ getSession: module.getSession || (() => ({})),
+ handle: module.handle || (({ event, resolve }) => resolve(event)),
+ handleError: module.handleError || (({ error }) => console.error(error.stack)),
+ externalFetch: module.externalFetch || fetch
+ };
+ }
+
+ return respond(request, this.options, options);
+ }
+}
diff --git a/frontend/.svelte-kit/generated/client-manifest.js b/frontend/.svelte-kit/generated/client-manifest.js
new file mode 100644
index 0000000000000000000000000000000000000000..8635adf5d10b0aeb60f7376fae6dbe8fcf17bc9c
--- /dev/null
+++ b/frontend/.svelte-kit/generated/client-manifest.js
@@ -0,0 +1,11 @@
+export { matchers } from './client-matchers.js';
+
+export const components = [
+ () => import("../../src/routes/__layout.svelte"),
+ () => import("../runtime/components/error.svelte"),
+ () => import("../../src/routes/index.svelte")
+];
+
+export const dictionary = {
+ "": [[0, 2], [1]]
+};
\ No newline at end of file
diff --git a/frontend/.svelte-kit/generated/client-matchers.js b/frontend/.svelte-kit/generated/client-matchers.js
new file mode 100644
index 0000000000000000000000000000000000000000..f6bd30a4eb679f78dfe9f8947afe362bb30c4b5a
--- /dev/null
+++ b/frontend/.svelte-kit/generated/client-matchers.js
@@ -0,0 +1 @@
+export const matchers = {};
\ No newline at end of file
diff --git a/frontend/.svelte-kit/generated/root.svelte b/frontend/.svelte-kit/generated/root.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..d07e155804d159d69b775f7c265b0d75b803803b
--- /dev/null
+++ b/frontend/.svelte-kit/generated/root.svelte
@@ -0,0 +1,56 @@
+
+
+
+{#if components[1]}
+
+ {#if components[2]}
+
+
+
+ {:else}
+
+ {/if}
+
+{:else}
+
+{/if}
+
+{#if mounted}
+
+ {#if navigated}
+ {title}
+ {/if}
+
+{/if}
\ No newline at end of file
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/__layout.svelte-dcfcba4b.css b/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/__layout.svelte-dcfcba4b.css
new file mode 100644
index 0000000000000000000000000000000000000000..3649d9d937b6bf3a9cb392a569134b81db80736a
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/__layout.svelte-dcfcba4b.css
@@ -0,0 +1 @@
+@import"https://fonts.googleapis.com/css2?family=Open+Sans:wght@100;200;300;400;500;600;700;800&display=swap";*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}html{font-family:Open Sans,sans-serif}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where([class~="lead"]):not(:where([class~="not-prose"] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~="not-prose"] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~="not-prose"] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(ol):not(:where([class~="not-prose"] *)){list-style-type:decimal;padding-left:1.625em}.prose :where(ol[type="A"]):not(:where([class~="not-prose"] *)){list-style-type:upper-alpha}.prose :where(ol[type="a"]):not(:where([class~="not-prose"] *)){list-style-type:lower-alpha}.prose :where(ol[type="A" s]):not(:where([class~="not-prose"] *)){list-style-type:upper-alpha}.prose :where(ol[type="a" s]):not(:where([class~="not-prose"] *)){list-style-type:lower-alpha}.prose :where(ol[type="I"]):not(:where([class~="not-prose"] *)){list-style-type:upper-roman}.prose :where(ol[type="i"]):not(:where([class~="not-prose"] *)){list-style-type:lower-roman}.prose :where(ol[type="I" s]):not(:where([class~="not-prose"] *)){list-style-type:upper-roman}.prose :where(ol[type="i" s]):not(:where([class~="not-prose"] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~="not-prose"] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~="not-prose"] *)){list-style-type:disc;padding-left:1.625em}.prose :where(ol > li):not(:where([class~="not-prose"] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul > li):not(:where([class~="not-prose"] *))::marker{color:var(--tw-prose-bullets)}.prose :where(hr):not(:where([class~="not-prose"] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~="not-prose"] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"\201c""\201d""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose :where(h1):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~="not-prose"] *)){font-weight:900}.prose :where(h2):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~="not-prose"] *)){font-weight:800}.prose :where(h3):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~="not-prose"] *)){font-weight:700}.prose :where(h4):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~="not-prose"] *)){font-weight:700}.prose :where(figure > *):not(:where([class~="not-prose"] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~="not-prose"] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose :where(a code):not(:where([class~="not-prose"] *)){color:var(--tw-prose-links)}.prose :where(pre code):not(:where([class~="not-prose"] *)):before{content:none}.prose :where(pre code):not(:where([class~="not-prose"] *)):after{content:none}.prose :where(table):not(:where([class~="not-prose"] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~="not-prose"] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~="not-prose"] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~="not-prose"] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~="not-prose"] *)){vertical-align:baseline;padding:.5714286em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(p):not(:where([class~="not-prose"] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(img):not(:where([class~="not-prose"] *)){margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~="not-prose"] *)){margin-top:2em;margin-bottom:2em}.prose :where(figure):not(:where([class~="not-prose"] *)){margin-top:2em;margin-bottom:2em}.prose :where(h2 code):not(:where([class~="not-prose"] *)){font-size:.875em}.prose :where(h3 code):not(:where([class~="not-prose"] *)){font-size:.9em}.prose :where(li):not(:where([class~="not-prose"] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol > li):not(:where([class~="not-prose"] *)){padding-left:.375em}.prose :where(ul > li):not(:where([class~="not-prose"] *)){padding-left:.375em}.prose>:where(ul > li p):not(:where([class~="not-prose"] *)){margin-top:.75em;margin-bottom:.75em}.prose>:where(ul > li > *:first-child):not(:where([class~="not-prose"] *)){margin-top:1.25em}.prose>:where(ul > li > *:last-child):not(:where([class~="not-prose"] *)){margin-bottom:1.25em}.prose>:where(ol > li > *:first-child):not(:where([class~="not-prose"] *)){margin-top:1.25em}.prose>:where(ol > li > *:last-child):not(:where([class~="not-prose"] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~="not-prose"] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(hr + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(h2 + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(h3 + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(h4 + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~="not-prose"] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~="not-prose"] *)){padding-right:0}.prose :where(tbody td:first-child):not(:where([class~="not-prose"] *)){padding-left:0}.prose :where(tbody td:last-child):not(:where([class~="not-prose"] *)){padding-right:0}.prose>:where(:first-child):not(:where([class~="not-prose"] *)){margin-top:0}.prose>:where(:last-child):not(:where([class~="not-prose"] *)){margin-bottom:0}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0px}.left-0{left:0px}.top-0{top:0px}.right-0{right:0px}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.mt-6{margin-top:1.5rem}.mb-2{margin-bottom:.5rem}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.aspect-\[512\/512\]{aspect-ratio:512/512}.h-0{height:0px}.h-full{height:100%}.max-h-\[9rem\]{max-height:9rem}.max-h-24{max-height:6rem}.w-0{width:0px}.w-full{width:100%}.max-w-full{max-width:100%}.max-w-\[3rem\]{max-width:3rem}.max-w-screen-md{max-width:768px}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes spin{to{transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-y{scroll-snap-type:y var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness: mandatory}.snap-start{scroll-snap-align:start}.snap-always{scroll-snap-stop:always}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[2fr_1\.5fr\]{grid-template-columns:2fr 1.5fr}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-1{gap:.25rem}.overflow-hidden{overflow:hidden}.overflow-clip{overflow:clip}.overflow-scroll{overflow:scroll}.overflow-x-scroll{overflow-x:scroll}.whitespace-nowrap{white-space:nowrap}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-gray-500{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.bg-\[rgb\(11\,15\,25\)\]{--tw-bg-opacity: 1;background-color:rgb(11 15 25 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.p-3{padding:.75rem}.p-1{padding:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pl-2{padding-left:.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.leading-6{line-height:1.5rem}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-30{opacity:.3}.outline{outline-style:solid}.outline-2{outline-width:2px}.outline-offset-\[-2px\]{outline-offset:-2px}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:outline:hover{outline-style:solid}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}.disabled\:opacity-50:disabled{opacity:.5}@media (prefers-color-scheme: dark){.dark\:prose-invert{--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}.dark\:border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.dark\:border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.dark\:bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:placeholder-gray-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}}@media (min-width: 530px){.sm\:max-h-\[none\]{max-height:none}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}}
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/index.svelte-65a37285.css b/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/index.svelte-65a37285.css
new file mode 100644
index 0000000000000000000000000000000000000000..8c631f3862d39e418f6ef1b2c088e27e45050194
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/index.svelte-65a37285.css
@@ -0,0 +1 @@
+form.svelte-1gwcbp.svelte-1gwcbp{width:100%;overflow:hidden}.samples.svelte-1gwcbp.svelte-1gwcbp{display:flex;scroll-snap-type:x var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;flex-wrap:nowrap;gap:.25rem;overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none}.samples.svelte-1gwcbp.svelte-1gwcbp::-webkit-scrollbar{display:none}input[type=radio].svelte-1gwcbp.svelte-1gwcbp{position:absolute;display:none;height:0px;width:0px;opacity:0}input[type=radio].svelte-1gwcbp.svelte-1gwcbp:disabled{opacity:.5}input[type=radio].svelte-1gwcbp:checked~label.svelte-1gwcbp{outline-style:solid;outline-width:2px;outline-color:#eab308}input[type=radio].svelte-1gwcbp:disabled+label.svelte-1gwcbp{opacity:.5}label.svelte-1gwcbp.svelte-1gwcbp{display:flex;cursor:pointer;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}label.svelte-1gwcbp.svelte-1gwcbp:hover{outline-style:solid}img.svelte-1gwcbp.svelte-1gwcbp{max-height:6rem;max-width:none}.colors.svelte-1oy4poo.svelte-1oy4poo{display:grid;max-height:9rem;scroll-snap-type:y var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;overflow:scroll}@media (min-width: 530px){.colors.svelte-1oy4poo.svelte-1oy4poo{max-height:none;grid-template-columns:repeat(3,minmax(0,1fr))}}.colors.svelte-1oy4poo span.svelte-1oy4poo{margin-left:.5rem}.colors.svelte-1oy4poo svg.svelte-1oy4poo{display:block}input[type=radio].svelte-1oy4poo.svelte-1oy4poo{position:absolute;display:none;height:0px;width:0px;opacity:0}input[type=radio].svelte-1oy4poo:checked~label.svelte-1oy4poo{outline-style:solid;outline-width:2px;outline-color:#eab308}label.svelte-1oy4poo.svelte-1oy4poo{display:flex;cursor:pointer;white-space:nowrap;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}label.svelte-1oy4poo.svelte-1oy4poo:hover{outline-style:solid}.brush.svelte-1oy4poo.svelte-1oy4poo{display:flex}select.svelte-uoay71.svelte-uoay71,button.svelte-uoay71.svelte-uoay71,input.svelte-uoay71.svelte-uoay71{border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))}select.svelte-uoay71.svelte-uoay71:focus,button.svelte-uoay71.svelte-uoay71:focus,input.svelte-uoay71.svelte-uoay71:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity)) }select.svelte-uoay71.svelte-uoay71:disabled,button.svelte-uoay71.svelte-uoay71:disabled,input.svelte-uoay71.svelte-uoay71:disabled{opacity:.5}@media (prefers-color-scheme: dark){select.svelte-uoay71.svelte-uoay71,button.svelte-uoay71.svelte-uoay71,input.svelte-uoay71.svelte-uoay71{--tw-border-opacity:1;border-color:rgb(75 85 99 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(55 65 81 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}select.svelte-uoay71.svelte-uoay71::-moz-placeholder,button.svelte-uoay71.svelte-uoay71::-moz-placeholder,input.svelte-uoay71.svelte-uoay71::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}select.svelte-uoay71.svelte-uoay71::placeholder,button.svelte-uoay71.svelte-uoay71::placeholder,input.svelte-uoay71.svelte-uoay71::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}select.svelte-uoay71.svelte-uoay71:focus,button.svelte-uoay71.svelte-uoay71:focus,input.svelte-uoay71.svelte-uoay71:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity)) }}input.svelte-uoay71:disabled+label.svelte-uoay71{opacity:.5}input.svelte-uoay71.svelte-uoay71{padding-left:.75rem}.canvas.svelte-pr47cz{z-index:0;aspect-ratio:512/512;width:100%;max-width:100%;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}@media (prefers-color-scheme: dark){.canvas.svelte-pr47cz{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}}.brush.svelte-pr47cz{pointer-events:none;position:absolute;z-index:10;--tw-translate-x:-50%;--tw-translate-y:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.label.svelte-pr47cz{pointer-events:none;position:absolute;top:0px;left:0px;z-index:20;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-left:.5rem;padding-right:.5rem;font-size:1rem;line-height:1.5rem;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity));color:#fff;font-weight:bolder;-webkit-text-stroke:1px black;-webkit-text-fill-color:white}.image.svelte-1t0h0rs{z-index:0;box-sizing:border-box;aspect-ratio:512/512;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}@media (prefers-color-scheme: dark){.image.svelte-1t0h0rs{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}}.loading.svelte-1t0h0rs{position:absolute;top:0px;left:0px;right:0px;bottom:0px;display:flex;flex-direction:column;align-items:center;justify-content:center}.drawings.svelte-237ry5{display:grid;grid-template-columns:2fr 1.5fr;place-items:center}@media (min-width: 530px){.drawings.svelte-237ry5{grid-template-columns:repeat(2,minmax(0,1fr))}}button.svelte-237ry5{border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))}button.svelte-237ry5:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity)) }button.svelte-237ry5:disabled{opacity:.5}@media (prefers-color-scheme: dark){button.svelte-237ry5{--tw-border-opacity:1;border-color:rgb(75 85 99 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(55 65 81 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}button.svelte-237ry5::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}button.svelte-237ry5::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}button.svelte-237ry5:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity)) }}
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/index-bcf2726a.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/index-bcf2726a.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d47b275bdcb23c7324444798fdc9687822aeb28
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/index-bcf2726a.js
@@ -0,0 +1 @@
+function N(){}function H(t,n){for(const e in n)t[e]=n[e];return t}function B(t){return t()}function M(){return Object.create(null)}function p(t){t.forEach(B)}function I(t){return typeof t=="function"}function lt(t,n){return t!=t?n==n:t!==n||t&&typeof t=="object"||typeof t=="function"}let g;function ot(t,n){return g||(g=document.createElement("a")),g.href=n,t===g.href}function W(t){return Object.keys(t).length===0}function G(t,...n){if(t==null)return N;const e=t.subscribe(...n);return e.unsubscribe?()=>e.unsubscribe():e}function st(t,n,e){t.$$.on_destroy.push(G(n,e))}function at(t,n,e,i){if(t){const c=L(t,n,e,i);return t[0](c)}}function L(t,n,e,i){return t[1]&&i?H(e.ctx.slice(),t[1](i(n))):e.ctx}function ft(t,n,e,i){if(t[2]&&i){const c=t[2](i(e));if(n.dirty===void 0)return c;if(typeof c=="object"){const s=[],u=Math.max(n.dirty.length,c.length);for(let l=0;l32){const n=[],e=t.ctx.length/32;for(let i=0;i>1);e(c)<=i?t=c+1:n=c}return t}function R(t){if(t.hydrate_init)return;t.hydrate_init=!0;let n=t.childNodes;if(t.nodeName==="HEAD"){const r=[];for(let o=0;o0&&n[e[c]].claim_order<=o?c+1:Q(1,c,y=>n[e[y]].claim_order,o))-1;i[r]=e[f]+1;const a=f+1;e[a]=r,c=Math.max(a,c)}const s=[],u=[];let l=n.length-1;for(let r=e[c]+1;r!=0;r=i[r-1]){for(s.push(n[r-1]);l>=r;l--)u.push(n[l]);l--}for(;l>=0;l--)u.push(n[l]);s.reverse(),u.sort((r,o)=>r.claim_order-o.claim_order);for(let r=0,o=0;r=s[o].claim_order;)o++;const f=ot.removeEventListener(n,e,i)}function xt(t){return function(n){return n.preventDefault(),t.call(this,n)}}function $t(t,n,e){e==null?t.removeAttribute(n):t.getAttribute(n)!==e&&t.setAttribute(n,e)}function wt(t){return t===""?null:+t}function Z(t){return Array.from(t.childNodes)}function tt(t){t.claim_info===void 0&&(t.claim_info={last_index:0,total_claimed:0})}function O(t,n,e,i,c=!1){tt(t);const s=(()=>{for(let u=t.claim_info.last_index;u=0;u--){const l=t[u];if(n(l)){const r=e(l);return r===void 0?t.splice(u,1):t[u]=r,c?r===void 0&&t.claim_info.last_index--:t.claim_info.last_index=u,l}}return i()})();return s.claim_order=t.claim_info.total_claimed,t.claim_info.total_claimed+=1,s}function P(t,n,e,i){return O(t,c=>c.nodeName===n,c=>{const s=[];for(let u=0;uc.removeAttribute(u))},()=>i(n))}function vt(t,n,e){return P(t,n,e,X)}function Et(t,n,e){return P(t,n,e,Y)}function nt(t,n){return O(t,e=>e.nodeType===3,e=>{const i=""+n;if(e.data.startsWith(i)){if(e.data.length!==i.length)return e.splitText(i.length)}else e.data=i},()=>j(n),!0)}function kt(t){return nt(t," ")}function Nt(t,n){n=""+n,t.wholeText!==n&&(t.data=n)}function jt(t,n){t.value=n==null?"":n}function St(t,n,e,i){e===null?t.style.removeProperty(n):t.style.setProperty(n,e,i?"important":"")}let m;function h(t){m=t}function S(){if(!m)throw new Error("Function called outside component initialization");return m}function At(t){S().$$.on_mount.push(t)}function Ct(t){S().$$.after_update.push(t)}function Mt(t,n){return S().$$.context.set(t,n),n}const d=[],T=[],x=[],q=[],D=Promise.resolve();let E=!1;function z(){E||(E=!0,D.then(F))}function Tt(){return z(),D}function k(t){x.push(t)}const v=new Set;let b=0;function F(){const t=m;do{for(;b{$.delete(t),i&&(e&&t.d(1),i())}),t.o(n)}}function Ot(t,n){const e={},i={},c={$$scope:1};let s=t.length;for(;s--;){const u=t[s],l=n[s];if(l){for(const r in u)r in l||(i[r]=1);for(const r in l)c[r]||(e[r]=l[r],c[r]=1);t[s]=l}else for(const r in u)c[r]=1}for(const u in i)u in e||(e[u]=void 0);return e}function Pt(t){return typeof t=="object"&&t!==null?t:{}}function Dt(t){t&&t.c()}function zt(t,n){t&&t.l(n)}function rt(t,n,e,i){const{fragment:c,on_mount:s,on_destroy:u,after_update:l}=t.$$;c&&c.m(n,e),i||k(()=>{const r=s.map(B).filter(I);u?u.push(...r):p(r),t.$$.on_mount=[]}),l.forEach(k)}function ct(t,n){const e=t.$$;e.fragment!==null&&(p(e.on_destroy),e.fragment&&e.fragment.d(n),e.on_destroy=e.fragment=null,e.ctx=[])}function ut(t,n){t.$$.dirty[0]===-1&&(d.push(t),z(),t.$$.dirty.fill(0)),t.$$.dirty[n/31|0]|=1<{const C=A.length?A[0]:y;return o.ctx&&c(o.ctx[a],o.ctx[a]=C)&&(!o.skip_bound&&o.bound[a]&&o.bound[a](C),f&&ut(t,a)),y}):[],o.update(),f=!0,p(o.before_update),o.fragment=i?i(o.ctx):!1,n.target){if(n.hydrate){J();const a=Z(n.target);o.fragment&&o.fragment.l(a),a.forEach(V)}else o.fragment&&o.fragment.c();n.intro&&it(t.$$.fragment),rt(t,n.target,n.anchor,n.customElement),K(),F()}h(r)}class Ht{$destroy(){ct(this,1),this.$destroy=N}$on(n,e){const i=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return i.push(e),()=>{const c=i.indexOf(e);c!==-1&&i.splice(c,1)}}$set(n){this.$$set&&!W(n)&&(this.$$.skip_bound=!0,this.$$set(n),this.$$.skip_bound=!1)}}export{Pt as A,ct as B,H as C,Tt as D,N as E,at as F,_t as G,dt as H,ft as I,U as J,ot as K,bt as L,pt as M,st as N,ht as O,Y as P,Et as Q,jt as R,Ht as S,xt as T,p as U,wt as V,T as W,Z as a,$t as b,vt as c,V as d,X as e,St as f,mt as g,nt as h,Ft as i,Nt as j,yt as k,gt as l,kt as m,qt as n,Lt as o,Bt as p,it as q,Mt as r,lt as s,j as t,Ct as u,At as v,Dt as w,zt as x,rt as y,Ot as z};
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/paths-d3bcbd10.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/paths-d3bcbd10.js
new file mode 100644
index 0000000000000000000000000000000000000000..0911f4acc85b0ac94f242f9bc4ab5effba088495
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/paths-d3bcbd10.js
@@ -0,0 +1 @@
+import{E as f,s as p}from"./index-bcf2726a.js";const n=[];function _(t,b=f){let o;const i=new Set;function r(e){if(p(t,e)&&(t=e,o)){const c=!n.length;for(const s of i)s[1](),n.push(s,t);if(c){for(let s=0;s{i.delete(s),i.size===0&&(o(),o=null)}}return{set:r,update:a,subscribe:l}}let u="",d="";function g(t){u=t.base,d=t.assets||u}export{d as a,u as b,g as s,_ as w};
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/error.svelte-d9523301.js b/frontend/.svelte-kit/output/client/_app/immutable/error.svelte-d9523301.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c200845989d5bbde3173a928c2ca48d13743a81
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/error.svelte-d9523301.js
@@ -0,0 +1 @@
+import{S as w,i as y,s as z,e as E,t as v,c as d,a as b,h as P,d as o,g as u,J as R,j as N,k as S,l as C,m as j,E as H}from"./chunks/index-bcf2726a.js";function J(r){let l,t=r[1].frame+"",a;return{c(){l=E("pre"),a=v(t)},l(f){l=d(f,"PRE",{});var s=b(l);a=P(s,t),s.forEach(o)},m(f,s){u(f,l,s),R(l,a)},p(f,s){s&2&&t!==(t=f[1].frame+"")&&N(a,t)},d(f){f&&o(l)}}}function h(r){let l,t=r[1].stack+"",a;return{c(){l=E("pre"),a=v(t)},l(f){l=d(f,"PRE",{});var s=b(l);a=P(s,t),s.forEach(o)},m(f,s){u(f,l,s),R(l,a)},p(f,s){s&2&&t!==(t=f[1].stack+"")&&N(a,t)},d(f){f&&o(l)}}}function A(r){let l,t,a,f,s=r[1].message+"",c,k,n,p,i=r[1].frame&&J(r),_=r[1].stack&&h(r);return{c(){l=E("h1"),t=v(r[0]),a=S(),f=E("pre"),c=v(s),k=S(),i&&i.c(),n=S(),_&&_.c(),p=C()},l(e){l=d(e,"H1",{});var m=b(l);t=P(m,r[0]),m.forEach(o),a=j(e),f=d(e,"PRE",{});var q=b(f);c=P(q,s),q.forEach(o),k=j(e),i&&i.l(e),n=j(e),_&&_.l(e),p=C()},m(e,m){u(e,l,m),R(l,t),u(e,a,m),u(e,f,m),R(f,c),u(e,k,m),i&&i.m(e,m),u(e,n,m),_&&_.m(e,m),u(e,p,m)},p(e,[m]){m&1&&N(t,e[0]),m&2&&s!==(s=e[1].message+"")&&N(c,s),e[1].frame?i?i.p(e,m):(i=J(e),i.c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null),e[1].stack?_?_.p(e,m):(_=h(e),_.c(),_.m(p.parentNode,p)):_&&(_.d(1),_=null)},i:H,o:H,d(e){e&&o(l),e&&o(a),e&&o(f),e&&o(k),i&&i.d(e),e&&o(n),_&&_.d(e),e&&o(p)}}}function F({error:r,status:l}){return{props:{error:r,status:l}}}function B(r,l,t){let{status:a}=l,{error:f}=l;return r.$$set=s=>{"status"in s&&t(0,a=s.status),"error"in s&&t(1,f=s.error)},[a,f]}class G extends w{constructor(l){super(),y(this,l,B,A,z,{status:0,error:1})}}export{G as default,F as load};
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/manifest.json b/frontend/.svelte-kit/output/client/_app/immutable/manifest.json
new file mode 100644
index 0000000000000000000000000000000000000000..1e0d274788a5e1c1c28f55078d90195bc994d4a1
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/manifest.json
@@ -0,0 +1,59 @@
+{
+ ".svelte-kit/runtime/client/start.js": {
+ "file": "start-a60c2789.js",
+ "src": ".svelte-kit/runtime/client/start.js",
+ "isEntry": true,
+ "imports": [
+ "_index-bcf2726a.js",
+ "_paths-d3bcbd10.js"
+ ],
+ "dynamicImports": [
+ "src/routes/__layout.svelte",
+ ".svelte-kit/runtime/components/error.svelte",
+ "src/routes/index.svelte"
+ ]
+ },
+ "src/routes/__layout.svelte": {
+ "file": "pages/__layout.svelte-0c386344.js",
+ "src": "src/routes/__layout.svelte",
+ "isEntry": true,
+ "isDynamicEntry": true,
+ "imports": [
+ "_index-bcf2726a.js"
+ ],
+ "css": [
+ "assets/pages/__layout.svelte-dcfcba4b.css"
+ ]
+ },
+ ".svelte-kit/runtime/components/error.svelte": {
+ "file": "error.svelte-d9523301.js",
+ "src": ".svelte-kit/runtime/components/error.svelte",
+ "isEntry": true,
+ "isDynamicEntry": true,
+ "imports": [
+ "_index-bcf2726a.js"
+ ]
+ },
+ "src/routes/index.svelte": {
+ "file": "pages/index.svelte-6350336a.js",
+ "src": "src/routes/index.svelte",
+ "isEntry": true,
+ "isDynamicEntry": true,
+ "imports": [
+ "_index-bcf2726a.js",
+ "_paths-d3bcbd10.js"
+ ],
+ "css": [
+ "assets/pages/index.svelte-65a37285.css"
+ ]
+ },
+ "_index-bcf2726a.js": {
+ "file": "chunks/index-bcf2726a.js"
+ },
+ "_paths-d3bcbd10.js": {
+ "file": "chunks/paths-d3bcbd10.js",
+ "imports": [
+ "_index-bcf2726a.js"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/pages/__layout.svelte-0c386344.js b/frontend/.svelte-kit/output/client/_app/immutable/pages/__layout.svelte-0c386344.js
new file mode 100644
index 0000000000000000000000000000000000000000..5bd9fff7700f9fb724b4381621fa70e18b5e4368
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/pages/__layout.svelte-0c386344.js
@@ -0,0 +1 @@
+import{S as n,i,s as p,F as l,G as w,H as c,I as d,q as h,o as m}from"../chunks/index-bcf2726a.js";function g(s){let r;const a=s[1].default,t=l(a,s,s[0],null);return{c(){t&&t.c()},l(e){t&&t.l(e)},m(e,o){t&&t.m(e,o),r=!0},p(e,[o]){t&&t.p&&(!r||o&1)&&w(t,a,e,e[0],r?d(a,e[0],o,null):c(e[0]),null)},i(e){r||(h(t,e),r=!0)},o(e){m(t,e),r=!1},d(e){t&&t.d(e)}}}function b(s,r,a){let{$$slots:t={},$$scope:e}=r;return s.$$set=o=>{"$$scope"in o&&a(0,e=o.$$scope)},[e,t]}class u extends n{constructor(r){super(),i(this,r,b,g,p,{})}}export{u as default};
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/pages/index.svelte-6350336a.js b/frontend/.svelte-kit/output/client/_app/immutable/pages/index.svelte-6350336a.js
new file mode 100644
index 0000000000000000000000000000000000000000..3fc84fa99915ac7e57070f34bdb44e517babb1f7
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/pages/index.svelte-6350336a.js
@@ -0,0 +1 @@
+import{S as W,i as ee,s as te,e as M,k as D,c as O,a as T,m as j,d as E,b as c,K as ke,g as $,J as d,t as V,h as F,L as N,E as Y,M as Oe,N as G,O as J,P as pe,Q as de,j as Te,f as tt,R as ae,T as ge,U as Be,V as rt,W as Ee,w as oe,x as se,y as ne,q as ie,o as ce,B as ue,v as lt}from"../chunks/index-bcf2726a.js";import{w as Q,b as Ze}from"../chunks/paths-d3bcbd10.js";const ye=[{color:[219,14,154],label:"building"},{color:[147,142,123],label:"pervious surface"},{color:[248,12,0],label:"impervious surface"},{color:[169,113,1],label:"bare soil"},{color:[21,83,174],label:"water"},{color:[25,74,38],label:"coniferous"},{color:[70,228,131],label:"deciduous"},{color:[243,166,13],label:"brushwood"},{color:[102,0,130],label:"vineyard"},{color:[85,255,0],label:"herbaceous vegetation"},{color:[255,243,13],label:"agricultural land"},{color:[228,223,124],label:"plowed land"},{color:[61,230,235],label:"swimming pool"},{color:[255,255,255],label:"snow"},{color:[138,179,160],label:"clear cut"},{color:[107,113,79],label:"mixed"},{color:[197,220,66],label:"ligneous"},{color:[153,153,255],label:"greenhouse"},{color:[0,0,0],label:"other"}],Ie=["/samples/example0.png","/samples/example1.png","/samples/example2.png","/samples/example3.png","/samples/example4.png","/samples/example5.png"],Se=[["Aerial view, France. High resolution image, 4K, ultra detailed","Realistic"],["Aerial view, France. Colorful lego bricks","Lego brick"],["Aerial view, France. Black and white paper pencil drawing","Pencil"],["Aerial view, France. Oil on canvas painting","Painting"]];function Qe(){return BigInt(0xb7dd73e137d20800&((1<<63)-1)*Math.random())}const ve=Q(new Map),ze=Q(),Pe=Q(),Ce=Q(),me=Q(),Me=Q({prompt:Se[0][0],seed:Qe(),steps:20}),he=Q(!1),we=Q(!1);function Ne(l,e,t){const r=l.slice();return r[3]=e[t],r[5]=t,r}function Ue(l){let e,t,r,s,a,i,p,n,m,k,g,C;return{c(){e=M("div"),t=M("input"),i=D(),p=M("label"),n=M("img"),C=D(),this.h()},l(h){e=O(h,"DIV",{class:!0});var w=T(e);t=O(w,"INPUT",{type:!0,name:!0,id:!0,class:!0}),i=j(w),p=O(w,"LABEL",{for:!0,class:!0});var S=T(p);n=O(S,"IMG",{src:!0,alt:!0,class:!0}),S.forEach(E),C=j(w),w.forEach(E),this.h()},h(){c(t,"type","radio"),c(t,"name","samples"),c(t,"id",r="sample-"+l[5]),t.value=s=l[5],t.disabled=a=l[0]===!0,c(t,"class","svelte-1gwcbp"),ke(n.src,m=Ze+l[3])||c(n,"src",m),c(n,"alt",k=l[3]),c(n,"class","svelte-1gwcbp"),c(p,"for",g="sample-"+l[5]),c(p,"class","svelte-1gwcbp"),c(e,"class","snap-always snap-start")},m(h,w){$(h,e,w),d(e,t),d(e,i),d(e,p),d(p,n),d(e,C)},p(h,w){w&1&&a!==(a=h[0]===!0)&&(t.disabled=a)},d(h){h&&E(e)}}}function at(l){let e,t,r,s,a,i,p,n,m=Ie,k=[];for(let g=0;g{const r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),e(r)},r.onerror=s=>{t(s)},r.src=URL.createObjectURL(l)})}function st(l,e,t){let r,s;return G(l,Ce,i=>t(2,r=i)),G(l,he,i=>t(0,s=i)),[s,async i=>{i.preventDefault();const p=Ie[parseInt(i.target.value)];if(p){const n=await fetch(Ze+p).then(k=>k.blob()),m=await ot(n);J(Ce,r=m,r)}}]}class nt extends W{constructor(e){super(),ee(this,e,st,at,te,{})}}function Ve(l,e,t){const r=l.slice();return r[2]=e[t],r[7]=t,r}function Fe(l){let e,t,r,s,a,i,p,n,m,k,g,C,h=l[2].label+"",w,S,o;return{c(){e=M("div"),t=M("input"),i=D(),p=M("label"),n=pe("svg"),m=pe("rect"),g=D(),C=M("span"),w=V(h),o=D(),this.h()},l(f){e=O(f,"DIV",{class:!0});var b=T(e);t=O(b,"INPUT",{name:!0,type:!0,id:!0,class:!0}),i=j(b),p=O(b,"LABEL",{for:!0,class:!0});var u=T(p);n=de(u,"svg",{width:!0,height:!0,viewBox:!0,class:!0});var v=T(n);m=de(v,"rect",{x:!0,y:!0,width:!0,height:!0,fill:!0}),T(m).forEach(E),v.forEach(E),g=j(u),C=O(u,"SPAN",{class:!0});var y=T(C);w=F(y,h),y.forEach(E),u.forEach(E),o=j(b),b.forEach(E),this.h()},h(){c(t,"name","color"),t.checked=r=l[7]==We,c(t,"type","radio"),c(t,"id",s="color-"+l[7]),t.value=a=l[7],c(t,"class","svelte-1oy4poo"),c(m,"x","0"),c(m,"y","0"),c(m,"width","20"),c(m,"height","20"),c(m,"fill",k="rgb("+l[2].color.join(",")+")"),c(n,"width","20"),c(n,"height","20"),c(n,"viewBox","0 0 20 20"),c(n,"class","svelte-1oy4poo"),c(C,"class","svelte-1oy4poo"),c(p,"for",S="color-"+l[7]),c(p,"class","svelte-1oy4poo"),c(e,"class","snap-always snap-start")},m(f,b){$(f,e,b),d(e,t),d(e,i),d(e,p),d(p,n),d(n,m),d(p,g),d(p,C),d(C,w),d(e,o)},p:Y,d(f){f&&E(e)}}}function it(l){let e,t,r,s,a,i,p,n,m,k,g,C,h,w=l[0].size+"",S,o,f,b=ye,u=[];for(let v=0;vt(0,r=m));const{color:s,label:a}=ye[We];let i=`rgb(${s.join(",")})`,p=40;return J(me,r={color:i,size:p,label:a},r),[r,async m=>{const k=m.target;if(k.name==="color"){const g=parseInt(k.value),{color:C,label:h}=ye[g];i=`rgb(${C.join(",")})`,J(me,r={color:i,size:p,label:h},r)}else k.name==="brush"&&(p=parseInt(k.value),J(me,r={color:i,size:p,label:a},r))},s]}class ut extends W{constructor(e){super(),ee(this,e,ct,it,te,{})}}function Ge(l,e,t){const r=l.slice();return r[13]=e[t],r}function qe(l){let e,t=l[13][1]+"",r,s,a;return{c(){e=M("option"),r=V(t),a=V("`"),this.h()},l(i){e=O(i,"OPTION",{});var p=T(e);r=F(p,t),p.forEach(E),a=F(i,"`"),this.h()},h(){e.__value=s=l[13][0],e.value=e.__value},m(i,p){$(i,e,p),d(e,r),$(i,a,p)},p:Y,d(i){i&&E(e),i&&E(a)}}}function pt(l){let e,t,r,s,a,i,p,n,m,k,g,C,h,w,S,o,f,b,u,v,y,x,z,_,P,B,I,R,K,H,X,Z,fe,re=Se,q=[];for(let L=0;Lt(12,r=o)),G(l,he,o=>t(4,s=o));function a(){const o=i.elements;J(Me,r={prompt:o.prompt.value,seed:BigInt(o.seed.value),steps:parseInt(o.steps.value)},r)}let i,p=r.seed,n=r.steps,m=r.prompt;function k(){m=this.value,t(3,m)}const g=o=>{t(3,m=o.currentTarget.value)};function C(){p=this.value,t(1,p)}const h=()=>{t(1,p=Qe()),a()};function w(){n=rt(this.value),t(2,n)}function S(o){Ee[o?"unshift":"push"](()=>{i=o,t(0,i)})}return[i,p,n,m,s,a,k,g,C,h,w,S]}class ht extends W{constructor(e){super(),ee(this,e,dt,pt,te,{})}}let ft=(l=21)=>crypto.getRandomValues(new Uint8Array(l)).reduce((e,t)=>(t&=63,t<36?e+=t.toString(36):t<62?e+=(t-26).toString(36).toUpperCase():t>62?e+="-":e+="_",e),"");var vt=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function mt(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}var et={exports:{}};(function(l,e){(function(t,r){l.exports=r()})(typeof self!="undefined"?self:vt,function(){return function(t){var r={};function s(a){if(r[a])return r[a].exports;var i=r[a]={i:a,l:!1,exports:{}};return t[a].call(i.exports,i,i.exports,s),i.l=!0,i.exports}return s.m=t,s.c=r,s.d=function(a,i,p){s.o(a,i)||Object.defineProperty(a,i,{enumerable:!0,get:p})},s.r=function(a){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},s.t=function(a,i){if(1&i&&(a=s(a)),8&i||4&i&&typeof a=="object"&&a&&a.__esModule)return a;var p=Object.create(null);if(s.r(p),Object.defineProperty(p,"default",{enumerable:!0,value:a}),2&i&&typeof a!="string")for(var n in a)s.d(p,n,function(m){return a[m]}.bind(null,n));return p},s.n=function(a){var i=a&&a.__esModule?function(){return a.default}:function(){return a};return s.d(i,"a",i),i},s.o=function(a,i){return Object.prototype.hasOwnProperty.call(a,i)},s.p="",s(s.s=0)}([function(t,r,s){function a(h,w){return function(S){if(Array.isArray(S))return S}(h)||function(S,o){if(Symbol.iterator in Object(S)||Object.prototype.toString.call(S)==="[object Arguments]"){var f=[],b=!0,u=!1,v=void 0;try{for(var y,x=S[Symbol.iterator]();!(b=(y=x.next()).done)&&(f.push(y.value),!o||f.length!==o);b=!0);}catch(z){u=!0,v=z}finally{try{b||x.return==null||x.return()}finally{if(u)throw v}}return f}}(h,w)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function i(h){return function(w){if(Array.isArray(w)){for(var S=0,o=new Array(w.length);S255?255:y,g:x=x>255?255:x,b:z=z>255?255:z}}}},{key:"make",value:function(o){var f=o.size,b=o.color;try{f*=window.devicePixelRatio;var u=this.parseColor(b),v=JSON.stringify(u);if(this.canvases[v]=this.canvases[v]||{},this.canvases[v][f]!=null)return this.canvases[v][f];var y=document.createElement("canvas");f+=f%2,y.width=f,y.height=f;for(var x=y.getContext("2d"),z=x.createImageData(f,f),_=0;_x||_>z)&&(_+=2*++x+1)}while(x<0)}},{key:"fillCircle",value:function(o,f){for(var b=4*o.width,u=1;u{"classNames"in s&&t(0,r=s.classNames)},[r]}class yt extends W{constructor(e){super(),ee(this,e,gt,bt,te,{classNames:0})}}function wt(l){var f;let e,t,r,s,a,i,p,n=((f=l[0])==null?void 0:f.label)+"",m,k,g,C,h,w,S,o;return C=new yt({}),{c(){e=M("div"),t=M("div"),r=M("canvas"),s=D(),a=M("canvas"),i=D(),p=M("span"),m=V(n),k=D(),g=M("button"),oe(C.$$.fragment),this.h()},l(b){e=O(b,"DIV",{});var u=T(e);t=O(u,"DIV",{class:!0});var v=T(t);r=O(v,"CANVAS",{class:!0,width:!0,height:!0}),T(r).forEach(E),s=j(v),a=O(v,"CANVAS",{class:!0,width:!0,height:!0}),T(a).forEach(E),i=j(v),p=O(v,"SPAN",{class:!0});var y=T(p);m=F(y,n),y.forEach(E),k=j(v),g=O(v,"BUTTON",{class:!0});var x=T(g);se(C.$$.fragment,x),x.forEach(E),v.forEach(E),u.forEach(E),this.h()},h(){c(r,"class","canvas svelte-pr47cz"),c(r,"width","512"),c(r,"height","512"),c(a,"class","brush svelte-pr47cz"),c(a,"width","10"),c(a,"height","10"),c(p,"class","label svelte-pr47cz"),c(g,"class","absolute bottom-0 left-0 p-3"),g.disabled=h=l[3].size<=0,c(t,"class","relative overflow-clip")},m(b,u){$(b,e,u),d(e,t),d(t,r),l[11](r),d(t,s),d(t,a),l[12](a),d(t,i),d(t,p),d(p,m),d(t,k),d(t,g),ne(C,g,null),w=!0,S||(o=[N(r,"touchmove",xt),N(r,"pointerenter",_t),N(r,"pointerup",l[4]),N(r,"pointerleave",l[4]),N(r,"pointercancel",l[4]),N(r,"pointerout",l[4]),N(r,"pointermove",l[6]),N(r,"pointerdown",l[5]),N(g,"click",ge(l[13]))],S=!0)},p(b,[u]){var v;(!w||u&1)&&n!==(n=((v=b[0])==null?void 0:v.label)+"")&&Te(m,n),(!w||u&8&&h!==(h=b[3].size<=0))&&(g.disabled=h)},i(b){w||(ie(C.$$.fragment,b),w=!0)},o(b){ce(C.$$.fragment,b),w=!1},d(b){b&&E(e),l[11](null),l[12](null),ue(C),S=!1,Be(o)}}}function _t(){}function $e(l,e){const t=l.getBoundingClientRect();return{x:(e.clientX-t.left)*(l.width/t.width),y:(e.clientY-t.top)*(l.height/t.height)}}function Ye(l){l.fillStyle="#000000",l.fillRect(0,0,l.canvas.width,l.canvas.height)}function xe(l,e){l.drawImage(e,0,0,l.canvas.width,l.canvas.height)}const xt=l=>l.preventDefault();function kt(l,e,t){let r,s,a,i;G(l,ve,_=>t(3,r=_)),G(l,Ce,_=>t(10,s=_)),G(l,me,_=>t(0,a=_)),G(l,Pe,_=>t(18,i=_));let p,n,m,k,g={x:0,y:0},C;lt(()=>{t(9,k=p.getContext("2d")),t(8,m=n.getContext("2d")),window.devicePixelRatio=1,C=new He(p),t(1,p.style.height="unset",p),t(1,p.style.width="unset",p),J(Pe,i=p,i),Ye(k)});let h=!1,w;function S(){t(2,n.style.top=`${10+a.size/2}px`,n),t(2,n.style.left=`${10+a.size/2}px`,n),h=!1}function o(_){h=!0,g=$e(p,_),C.draw({from:g,to:g,size:a.size,color:a.color}),w=ft(),ve.update(P=>(P.set(w,{brush:a,points:[{from:g,to:g}]}),P))}function f(_){const P=$e(p,_);t(2,n.style.top=`${_.offsetY}px`,n),t(2,n.style.left=`${_.offsetX}px`,n),h&&(C.draw({from:g,to:P,size:a.size,color:a.color}),ve.update(B=>{const I=B.get(w);return I==null||I.points.push({from:g,to:P}),B}),g=P)}function b(_){const{size:P,color:B}=_;t(2,n.width=P,n),t(2,n.height=P,n),t(8,m.fillStyle=B,m),m.arc(P/2,P/2,P/2,0,2*Math.PI),m.fill()}function u(){if(r.size<=0)return;const _=Array.from(r.keys());ve.update(P=>(P.delete(_[_.length-1]),P)),v(k)}function v(_){const P=document.createElement("canvas");P.width=512,P.height=512,window.devicePixelRatio=1;const B=new He(P);Ye(_),s&&xe(_,s),Array.from(r.values()).forEach(I=>{I.points.forEach((R,K)=>{B.draw({from:R.from,to:R.to,size:I.brush.size,color:I.brush.color})})}),requestAnimationFrame(()=>{xe(_,P)})}function y(_){Ee[_?"unshift":"push"](()=>{p=_,t(1,p)})}function x(_){Ee[_?"unshift":"push"](()=>{n=_,t(2,n),t(8,m),t(0,a)})}const z=()=>u();return l.$$.update=()=>{l.$$.dirty&257&&m&&a&&(b(a),t(2,n.style.top=`${10+a.size/2}px`,n),t(2,n.style.left=`${10+a.size/2}px`,n)),l.$$.dirty&1536&&s&&(xe(k,s),J(ve,r=new Map,r))},[a,p,n,r,S,o,f,u,m,k,s,y,x,z]}class Et extends W{constructor(e){super(),ee(this,e,kt,wt,te,{})}}function Je(l){let e,t,r;return{c(){e=M("img"),this.h()},l(s){e=O(s,"IMG",{class:!0,alt:!0,src:!0,width:!0,height:!0}),this.h()},h(){c(e,"class",t="image "+(l[1]?"opacity-30":"")+" svelte-1t0h0rs"),c(e,"alt","Generative Map Result"),ke(e.src,r=l[0])||c(e,"src",r),c(e,"width","512"),c(e,"height","512")},m(s,a){$(s,e,a)},p(s,a){a&2&&t!==(t="image "+(s[1]?"opacity-30":"")+" svelte-1t0h0rs")&&c(e,"class",t),a&1&&!ke(e.src,r=s[0])&&c(e,"src",r)},d(s){s&&E(e)}}}function Xe(l){let e,t,r,s,a,i;return{c(){e=M("div"),t=pe("svg"),r=pe("path"),s=D(),a=M("span"),i=V(Ke),this.h()},l(p){e=O(p,"DIV",{class:!0});var n=T(e);t=de(n,"svg",{xmlns:!0,fill:!0,viewBox:!0,class:!0});var m=T(t);r=de(m,"path",{fill:!0,d:!0}),T(r).forEach(E),m.forEach(E),s=j(n),a=O(n,"SPAN",{class:!0});var k=T(a);i=F(k,Ke),k.forEach(E),n.forEach(E),this.h()},h(){c(r,"fill","currentColor"),c(r,"d","M20 12a8 8 0 0 1-8 8v4a12 12 0 0 0 12-12h-4Zm-2-5.3a8 8 0 0 1 2 5.3h4c0-3-1.1-5.8-3-8l-3 2.7Z"),c(t,"xmlns","http://www.w3.org/2000/svg"),c(t,"fill","none"),c(t,"viewBox","0 0 24 24"),c(t,"class","animate-spin max-w-[3rem]"),c(a,"class","text-xs"),c(e,"class","loading svelte-1t0h0rs")},m(p,n){$(p,e,n),d(e,t),d(t,r),d(e,s),d(e,a),d(a,i)},p:Y,d(p){p&&E(e)}}}function It(l){let e,t,r=l[0]&&Je(l),s=l[1]&&Xe();return{c(){e=M("div"),r&&r.c(),t=D(),s&&s.c(),this.h()},l(a){e=O(a,"DIV",{class:!0});var i=T(e);r&&r.l(i),t=j(i),s&&s.l(i),i.forEach(E),this.h()},h(){c(e,"class","relative overflow-clip flex flex-col justify-center items-center w-full h-full")},m(a,i){$(a,e,i),r&&r.m(e,null),d(e,t),s&&s.m(e,null)},p(a,[i]){a[0]?r?r.p(a,i):(r=Je(a),r.c(),r.m(e,t)):r&&(r.d(1),r=null),a[1]?s?s.p(a,i):(s=Xe(),s.c(),s.m(e,null)):s&&(s.d(1),s=null)},i:Y,o:Y,d(a){a&&E(e),r&&r.d(),s&&s.d()}}}let Ke="";async function St(l){return new Promise((e,t)=>{try{const r=document.createElement("a");r.download=`sucess-${Date.now()}.png`,r.target="_self",r.onclick=async s=>{r.href&&URL.revokeObjectURL(r.href),r.href=l},requestAnimationFrame(()=>{console.log("Downloading image."),r.click(),e(null)})}catch{t()}})}async function zt(l,{prompt:e,steps:t,seed:r}){const s=await fetch("/predict",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:[l,e,t,r.toString()]})});if(!s.ok)throw new Error("Prediction request failed.");return await s.text()}function Pt(l,e,t){let r,s,a,i,p;return G(l,we,n=>t(2,r=n)),G(l,ze,n=>t(0,s=n)),G(l,he,n=>t(1,a=n)),G(l,Me,n=>t(3,i=n)),G(l,Pe,n=>t(4,p=n)),l.$$.update=()=>{l.$$.dirty&26&&(async()=>{if(a){const n=await zt(p.toDataURL(),i);J(ze,s=n,s),J(he,a=!1,a)}})(),l.$$.dirty&5&&(async()=>r&&(await St(s),J(we,r=!1,r)))()},[s,a,r,i,p]}class Ct extends W{constructor(e){super(),ee(this,e,Pt,It,te,{})}}function Mt(l){let e,t,r,s,a,i,p,n,m,k,g,C,h,w,S,o,f,b,u,v,y,x,z,_,P,B;return i=new ut({}),m=new Et({}),g=new Ct({}),y=new nt({}),z=new ht({}),{c(){e=M("div"),t=M("article"),r=M("h1"),s=V("Drawing to Map"),a=D(),oe(i.$$.fragment),p=D(),n=M("div"),oe(m.$$.fragment),k=D(),oe(g.$$.fragment),C=D(),h=M("button"),w=V("Generate Map"),o=D(),f=M("button"),b=V("Save Result"),v=D(),oe(y.$$.fragment),x=D(),oe(z.$$.fragment),this.h()},l(I){e=O(I,"DIV",{class:!0});var R=T(e);t=O(R,"ARTICLE",{class:!0});var K=T(t);r=O(K,"H1",{});var H=T(r);s=F(H,"Drawing to Map"),H.forEach(E),K.forEach(E),a=j(R),se(i.$$.fragment,R),p=j(R),n=O(R,"DIV",{class:!0});var X=T(n);se(m.$$.fragment,X),k=j(X),se(g.$$.fragment,X),X.forEach(E),C=j(R),h=O(R,"BUTTON",{class:!0});var Z=T(h);w=F(Z,"Generate Map"),Z.forEach(E),o=j(R),f=O(R,"BUTTON",{class:!0});var fe=T(f);b=F(fe,"Save Result"),fe.forEach(E),v=j(R),se(y.$$.fragment,R),x=j(R),se(z.$$.fragment,R),R.forEach(E),this.h()},h(){c(t,"class","prose dark:prose-invert"),c(n,"class","drawings py-3 -mx-3 svelte-237ry5"),h.disabled=S=l[0]===!0,c(h,"class","svelte-237ry5"),f.disabled=u=l[1]===!0||!l[2],c(f,"class","svelte-237ry5"),c(e,"class","max-w-screen-md mx-auto px-3 py-5 relative z-0")},m(I,R){$(I,e,R),d(e,t),d(t,r),d(r,s),d(e,a),ne(i,e,null),d(e,p),d(e,n),ne(m,n,null),d(n,k),ne(g,n,null),d(e,C),d(e,h),d(h,w),d(e,o),d(e,f),d(f,b),d(e,v),ne(y,e,null),d(e,x),ne(z,e,null),_=!0,P||(B=[N(h,"click",ge(l[3])),N(f,"click",ge(l[4]))],P=!0)},p(I,[R]){(!_||R&1&&S!==(S=I[0]===!0))&&(h.disabled=S),(!_||R&6&&u!==(u=I[1]===!0||!I[2]))&&(f.disabled=u)},i(I){_||(ie(i.$$.fragment,I),ie(m.$$.fragment,I),ie(g.$$.fragment,I),ie(y.$$.fragment,I),ie(z.$$.fragment,I),_=!0)},o(I){ce(i.$$.fragment,I),ce(m.$$.fragment,I),ce(g.$$.fragment,I),ce(y.$$.fragment,I),ce(z.$$.fragment,I),_=!1},d(I){I&&E(e),ue(i),ue(m),ue(g),ue(y),ue(z),P=!1,Be(B)}}}function Ot(l,e,t){let r,s,a;return G(l,he,n=>t(0,r=n)),G(l,we,n=>t(1,s=n)),G(l,ze,n=>t(2,a=n)),[r,s,a,()=>J(he,r=!0,r),()=>J(we,s=!0,s)]}class Rt extends W{constructor(e){super(),ee(this,e,Ot,Mt,te,{})}}export{Rt as default};
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/start-a60c2789.js b/frontend/.svelte-kit/output/client/_app/immutable/start-a60c2789.js
new file mode 100644
index 0000000000000000000000000000000000000000..fa05cd3c643f9092adf107dc9b90792559fde0b1
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/start-a60c2789.js
@@ -0,0 +1 @@
+import{S as Ye,i as Ge,s as Me,e as Fe,c as Xe,a as He,d as D,b as me,f as K,g as V,t as Ze,h as Qe,j as et,k as tt,l as P,m as nt,n as Y,o as C,p as G,q as T,r as st,u as rt,v as ye,w as z,x as ne,y as q,z as se,A as re,B as J,C as ie,D as Ce}from"./chunks/index-bcf2726a.js";import{s as it,w as ce,a as at}from"./chunks/paths-d3bcbd10.js";function ot(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={};for(let a=0;a{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ct(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={$$slots:{default:[dt]},$$scope:{ctx:n}};for(let a=0;a{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function lt(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={};for(let a=0;a{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ft(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={$$slots:{default:[ut]},$$scope:{ctx:n}};for(let a=0;a{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ut(s){let e,t,i;const l=[s[3]||{}];var c=s[0][2];function f(n){let r={};for(let a=0;a{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function dt(s){let e,t,i,l;const c=[ft,lt],f=[];function n(r,a){return r[0][2]?0:1}return e=n(s),t=f[e]=c[e](s),{c(){t.c(),i=P()},l(r){t.l(r),i=P()},m(r,a){f[e].m(r,a),V(r,i,a),l=!0},p(r,a){let d=e;e=n(r),e===d?f[e].p(r,a):(Y(),C(f[d],1,1,()=>{f[d]=null}),G(),t=f[e],t?t.p(r,a):(t=f[e]=c[e](r),t.c()),T(t,1),t.m(i.parentNode,i))},i(r){l||(T(t),l=!0)},o(r){C(t),l=!1},d(r){f[e].d(r),r&&D(i)}}}function Te(s){let e,t=s[5]&&je(s);return{c(){e=Fe("div"),t&&t.c(),this.h()},l(i){e=Xe(i,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var l=He(e);t&&t.l(l),l.forEach(D),this.h()},h(){me(e,"id","svelte-announcer"),me(e,"aria-live","assertive"),me(e,"aria-atomic","true"),K(e,"position","absolute"),K(e,"left","0"),K(e,"top","0"),K(e,"clip","rect(0 0 0 0)"),K(e,"clip-path","inset(50%)"),K(e,"overflow","hidden"),K(e,"white-space","nowrap"),K(e,"width","1px"),K(e,"height","1px")},m(i,l){V(i,e,l),t&&t.m(e,null)},p(i,l){i[5]?t?t.p(i,l):(t=je(i),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(i){i&&D(e),t&&t.d()}}}function je(s){let e;return{c(){e=Ze(s[6])},l(t){e=Qe(t,s[6])},m(t,i){V(t,e,i)},p(t,i){i&64&&et(e,t[6])},d(t){t&&D(e)}}}function pt(s){let e,t,i,l,c;const f=[ct,ot],n=[];function r(d,L){return d[0][1]?0:1}e=r(s),t=n[e]=f[e](s);let a=s[4]&&Te(s);return{c(){t.c(),i=tt(),a&&a.c(),l=P()},l(d){t.l(d),i=nt(d),a&&a.l(d),l=P()},m(d,L){n[e].m(d,L),V(d,i,L),a&&a.m(d,L),V(d,l,L),c=!0},p(d,[L]){let E=e;e=r(d),e===E?n[e].p(d,L):(Y(),C(n[E],1,1,()=>{n[E]=null}),G(),t=n[e],t?t.p(d,L):(t=n[e]=f[e](d),t.c()),T(t,1),t.m(i.parentNode,i)),d[4]?a?a.p(d,L):(a=Te(d),a.c(),a.m(l.parentNode,l)):a&&(a.d(1),a=null)},i(d){c||(T(t),c=!0)},o(d){C(t),c=!1},d(d){n[e].d(d),d&&D(i),a&&a.d(d),d&&D(l)}}}function ht(s,e,t){let{stores:i}=e,{page:l}=e,{components:c}=e,{props_0:f=null}=e,{props_1:n=null}=e,{props_2:r=null}=e;st("__svelte__",i),rt(i.page.notify);let a=!1,d=!1,L=null;return ye(()=>{const E=i.page.subscribe(()=>{a&&(t(5,d=!0),t(6,L=document.title||"untitled page"))});return t(4,a=!0),E}),s.$$set=E=>{"stores"in E&&t(7,i=E.stores),"page"in E&&t(8,l=E.page),"components"in E&&t(0,c=E.components),"props_0"in E&&t(1,f=E.props_0),"props_1"in E&&t(2,n=E.props_1),"props_2"in E&&t(3,r=E.props_2)},s.$$.update=()=>{s.$$.dirty&384&&i.page.set(l)},[c,f,n,r,a,d,L,i,l]}class _t extends Ye{constructor(e){super(),Ge(this,e,ht,pt,Me,{stores:7,page:8,components:0,props_0:1,props_1:2,props_2:3})}}const mt="modulepreload",Ie={},gt="/static/_app/immutable/",ge=function(e,t){return!t||t.length===0?e():Promise.all(t.map(i=>{if(i=`${gt}${i}`,i in Ie)return;Ie[i]=!0;const l=i.endsWith(".css"),c=l?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${i}"]${c}`))return;const f=document.createElement("link");if(f.rel=l?"stylesheet":mt,l||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),l)return new Promise((n,r)=>{f.addEventListener("load",n),f.addEventListener("error",()=>r(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>e())},wt={},le=[()=>ge(()=>import("./pages/__layout.svelte-0c386344.js"),["pages/__layout.svelte-0c386344.js","assets/pages/__layout.svelte-dcfcba4b.css","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./error.svelte-d9523301.js"),["error.svelte-d9523301.js","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./pages/index.svelte-6350336a.js"),["pages/index.svelte-6350336a.js","assets/pages/index.svelte-65a37285.css","chunks/index-bcf2726a.js","chunks/paths-d3bcbd10.js"])],bt={"":[[0,2],[1]]};function yt(s){s.client}function De(s){return s instanceof Error||s&&s.name&&s.message?s:new Error(JSON.stringify(s))}function Ve(s){if(s.fallthrough)throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");if("maxage"in s)throw new Error("maxage should be replaced with cache: { maxage }");const e=s.status&&s.status>=400&&s.status<=599&&!s.redirect;if(s.error||e){const t=s.status;if(!s.error&&e)return{status:t||500,error:new Error};const i=typeof s.error=="string"?new Error(s.error):s.error;return i instanceof Error?!t||t<400||t>599?(console.warn('"error" returned from load() without a valid status code \u2014 defaulting to 500'),{status:500,error:i}):{status:t,error:i}:{status:500,error:new Error(`"error" property returned from load() must be a string or instance of Error, received type "${typeof i}"`)}}if(s.redirect){if(!s.status||Math.floor(s.status/100)!==3)throw new Error('"redirect" property returned from load() must be accompanied by a 3xx status code');if(typeof s.redirect!="string")throw new Error('"redirect" property returned from load() must be a string')}if(s.dependencies&&(!Array.isArray(s.dependencies)||s.dependencies.some(t=>typeof t!="string")))throw new Error('"dependencies" property returned from load() must be of type string[]');if(s.context)throw new Error('You are returning "context" from a load function. "context" was renamed to "stuff", please adjust your code accordingly.');return s}function vt(s,e){return s==="/"||e==="ignore"?s:e==="never"?s.endsWith("/")?s.slice(0,-1):s:e==="always"&&!s.endsWith("/")?s+"/":s}class $t extends URL{get hash(){throw new Error("url.hash is inaccessible from load. Consider accessing hash from the page store within the script tag of your component.")}}function ze(s){let e=s.baseURI;if(!e){const t=s.getElementsByTagName("base");e=t.length?t[0].href:s.URL}return e}function ve(){return{x:pageXOffset,y:pageYOffset}}function qe(s){return s.composedPath().find(t=>t instanceof Node&&t.nodeName.toUpperCase()==="A")}function Je(s){return s instanceof SVGAElement?new URL(s.href.baseVal,document.baseURI):new URL(s.href)}function Ke(s){const e=ce(s);let t=!0;function i(){t=!0,e.update(f=>f)}function l(f){t=!1,e.set(f)}function c(f){let n;return e.subscribe(r=>{(n===void 0||t&&r!==n)&&f(n=r)})}return{notify:i,set:l,subscribe:c}}function kt(){const{set:s,subscribe:e}=ce(!1),t="1684956620534";let i;async function l(){clearTimeout(i);const f=await fetch(`${at}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(f.ok){const{version:n}=await f.json(),r=n!==t;return r&&(s(!0),clearTimeout(i)),r}else throw new Error(`Version check failed: ${f.status}`)}return{subscribe:e,check:l}}function Et(s){let e=5381,t=s.length;if(typeof s=="string")for(;t;)e=e*33^s.charCodeAt(--t);else for(;t;)e=e*33^s[--t];return(e>>>0).toString(36)}const $e=window.fetch;function Rt(s,e){let i=`script[sveltekit\\:data-type="data"][sveltekit\\:data-url=${JSON.stringify(typeof s=="string"?s:s.url)}]`;e&&typeof e.body=="string"&&(i+=`[sveltekit\\:data-body="${Et(e.body)}"]`);const l=document.querySelector(i);if(l&&l.textContent){const{body:c,...f}=JSON.parse(l.textContent);return Promise.resolve(new Response(c,f))}return $e(s,e)}const Lt=/^(\.\.\.)?(\w+)(?:=(\w+))?$/;function St(s){const e=[],t=[];let i=!0;return{pattern:s===""?/^\/$/:new RegExp(`^${decodeURIComponent(s).split(/(?:@[a-zA-Z0-9_-]+)?(?:\/|$)/).map((c,f,n)=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(c);if(r)return e.push(r[1]),t.push(r[2]),"(?:/(.*))?";const a=f===n.length-1;return c&&"/"+c.split(/\[(.+?)\]/).map((d,L)=>{if(L%2){const[,E,X,M]=Lt.exec(d);return e.push(X),t.push(M),E?"(.*?)":"([^/]+?)"}return a&&d.includes(".")&&(i=!1),d.normalize().replace(/%5[Bb]/g,"[").replace(/%5[Dd]/g,"]").replace(/#/g,"%23").replace(/\?/g,"%3F").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("")}).join("")}${i?"/?":""}$`),names:e,types:t}}function Ut(s,e,t,i){const l={};for(let c=0;c{const{pattern:r,names:a,types:d}=St(l);return{id:l,exec:L=>{const E=r.exec(L);if(E)return Ut(E,a,d,t)},a:c.map(L=>s[L]),b:f.map(L=>s[L]),has_shadow:!!n}})}const We="sveltekit:scroll",B="sveltekit:index",we=At(le,bt,wt),Nt=le[0](),Ot=le[1](),Be={};let te={};try{te=JSON.parse(sessionStorage[We])}catch{}function be(s){te[s]=ve()}function xt({target:s,session:e,base:t,trailing_slash:i}){var xe;const l=new Map,c=[],f={url:Ke({}),page:Ke({}),navigating:ce(null),session:ce(e),updated:kt()},n={id:null,promise:null},r={before_navigate:[],after_navigate:[]};let a={branch:[],error:null,session_id:0,stuff:Be,url:null},d=!1,L=!0,E=!1,X=1,M=null,ke,Ee,Re=!1;f.session.subscribe(async o=>{Ee=o,Re&&(X+=1,pe(new URL(location.href),[],!0))}),Re=!0;let F=!0,j=(xe=history.state)==null?void 0:xe[B];j||(j=Date.now(),history.replaceState({...history.state,[B]:j},"",location.href));const fe=te[j];fe&&(history.scrollRestoration="manual",scrollTo(fe.x,fe.y));let ue=!1,de,Le;async function Se(o,{noscroll:p=!1,replaceState:w=!1,keepfocus:u=!1,state:h={}},b){if(typeof o=="string"&&(o=new URL(o,ze(document))),F)return _e({url:o,scroll:p?ve():null,keepfocus:u,redirect_chain:b,details:{state:h,replaceState:w},accepted:()=>{},blocked:()=>{}});await Q(o)}async function Ue(o){const p=Oe(o);if(!p)throw new Error("Attempted to prefetch a URL that does not belong to this app");return n.promise=Ne(p,!1),n.id=p.id,n.promise}async function pe(o,p,w,u,h){var R,S,N;const b=Oe(o),v=Le={};let _=b&&await Ne(b,w);if(!_&&o.origin===location.origin&&o.pathname===location.pathname&&(_=await Z({status:404,error:new Error(`Not found: ${o.pathname}`),url:o,routeId:null})),!_)return await Q(o),!1;if(Le!==v)return!1;if(c.length=0,_.redirect)if(p.length>10||p.includes(o.pathname))_=await Z({status:500,error:new Error("Redirect loop"),url:o,routeId:null});else return F?Se(new URL(_.redirect,o).href,{},[...p,o.pathname]):await Q(new URL(_.redirect,location.href)),!1;else((S=(R=_.props)==null?void 0:R.page)==null?void 0:S.status)>=400&&await f.updated.check()&&await Q(o);if(E=!0,u&&u.details){const{details:$}=u,y=$.replaceState?0:1;$.state[B]=j+=y,history[$.replaceState?"replaceState":"pushState"]($.state,"",o)}if(d?(a=_.state,_.props.page&&(_.props.page.url=o),ke.$set(_.props)):Ae(_),u){const{scroll:$,keepfocus:y}=u;if(!y){const U=document.body,g=U.getAttribute("tabindex");(N=getSelection())==null||N.removeAllRanges(),U.tabIndex=-1,U.focus({preventScroll:!0}),g!==null?U.setAttribute("tabindex",g):U.removeAttribute("tabindex")}if(await Ce(),L){const U=o.hash&&document.getElementById(o.hash.slice(1));$?scrollTo($.x,$.y):U?U.scrollIntoView():scrollTo(0,0)}}else await Ce();n.promise=null,n.id=null,L=!0,_.props.page&&(de=_.props.page);const m=_.state.branch[_.state.branch.length-1];F=(m==null?void 0:m.module.router)!==!1,h&&h(),E=!1}function Ae(o){a=o.state;const p=document.querySelector("style[data-sveltekit]");if(p&&p.remove(),de=o.props.page,ke=new _t({target:s,props:{...o.props,stores:f},hydrate:!0}),F){const w={from:null,to:new URL(location.href)};r.after_navigate.forEach(u=>u(w))}d=!0}async function he({url:o,params:p,stuff:w,branch:u,status:h,error:b,routeId:v}){var y,U;const _=u.filter(Boolean),m=_.find(g=>{var O;return(O=g.loaded)==null?void 0:O.redirect}),R={redirect:(y=m==null?void 0:m.loaded)==null?void 0:y.redirect,state:{url:o,params:p,branch:u,error:b,stuff:w,session_id:X},props:{components:_.map(g=>g.module.default)}};for(let g=0;g<_.length;g+=1){const O=_[g].loaded;R.props[`props_${g}`]=O?await O.props:null}if(!a.url||o.href!==a.url.href||a.error!==b||a.stuff!==w){R.props.page={error:b,params:p,routeId:v,status:h,stuff:w,url:o};const g=(O,k)=>{Object.defineProperty(R.props.page,O,{get:()=>{throw new Error(`$page.${O} has been replaced by $page.url.${k}`)}})};g("origin","origin"),g("path","pathname"),g("query","searchParams")}const N=_[_.length-1],$=(U=N==null?void 0:N.loaded)==null?void 0:U.cache;if($){const g=o.pathname+o.search;let O=!1;const k=()=>{l.get(g)===R&&l.delete(g),x(),clearTimeout(A)},A=setTimeout(k,$.maxage*1e3),x=f.session.subscribe(()=>{O&&k()});O=!0,l.set(g,R)}return R}async function H({status:o,error:p,module:w,url:u,params:h,stuff:b,props:v,routeId:_}){const m={module:w,uses:{params:new Set,url:!1,session:!1,stuff:!1,dependencies:new Set},loaded:null,stuff:b};function R(y){const{href:U}=new URL(y,u);m.uses.dependencies.add(U)}v&&m.uses.dependencies.add(u.href);const S={};for(const y in h)Object.defineProperty(S,y,{get(){return m.uses.params.add(y),h[y]},enumerable:!0});const N=Ee,$=new $t(u);if(w.load){const y={routeId:_,params:S,props:v||{},get url(){return m.uses.url=!0,$},get session(){return m.uses.session=!0,N},get stuff(){return m.uses.stuff=!0,{...b}},async fetch(g,O){let k;typeof g=="string"?k=g:(k=g.url,O={body:g.method==="GET"||g.method==="HEAD"?void 0:await g.blob(),cache:g.cache,credentials:g.credentials,headers:g.headers,integrity:g.integrity,keepalive:g.keepalive,method:g.method,mode:g.mode,redirect:g.redirect,referrer:g.referrer,referrerPolicy:g.referrerPolicy,signal:g.signal,...O});const A=new URL(k,u).href;return R(A),d?$e(A,O):Rt(k,O)},status:o!=null?o:null,error:p!=null?p:null};let U;if(U=await w.load.call(null,y),!U)throw new Error("load function must return a value");m.loaded=Ve(U),m.loaded.stuff&&(m.stuff=m.loaded.stuff),m.loaded.dependencies&&m.loaded.dependencies.forEach(R)}else v&&(m.loaded=Ve({props:v}));return m}async function Ne({id:o,url:p,params:w,route:u},h){var U,g,O;if(n.id===o&&n.promise)return n.promise;if(!h){const k=l.get(o);if(k)return k}const{a:b,b:v,has_shadow:_}=u,m=a.url&&{url:o!==a.url.pathname+a.url.search,params:Object.keys(w).filter(k=>a.params[k]!==w[k]),session:X!==a.session_id};let R=[],S=Be,N=!1,$=200,y=null;b.forEach(k=>k().catch(()=>{}));e:for(let k=0;kI.uses.params.has(W))||m.session&&I.uses.session||Array.from(I.uses.dependencies).some(W=>c.some(oe=>oe(W)))||N&&I.uses.stuff){let W={};const oe=_&&k===b.length-1;if(oe){const ee=await $e(`${p.pathname}${p.pathname.endsWith("/")?"":"/"}__data.json${p.search}`,{headers:{"x-sveltekit-load":"true"}});if(ee.ok){const Pe=ee.headers.get("x-sveltekit-location");if(Pe)return{redirect:Pe,props:{},state:a};W=ee.status===204?{}:await ee.json()}else $=ee.status,y=new Error("Failed to load data")}if(y||(A=await H({module:x,url:p,params:w,props:W,stuff:S,routeId:u.id})),A&&(oe&&(A.uses.url=!0),A.loaded)){if(A.loaded.error&&($=A.loaded.status,y=A.loaded.error),A.loaded.redirect)return{redirect:A.loaded.redirect,props:{},state:a};A.loaded.stuff&&(N=!0)}}else A=I}catch(x){$=500,y=De(x)}if(y){for(;k--;)if(v[k]){let x,I,ae=k;for(;!(I=R[ae]);)ae-=1;try{if(x=await H({status:$,error:y,module:await v[k](),url:p,params:w,stuff:I.stuff,routeId:u.id}),(U=x==null?void 0:x.loaded)!=null&&U.error)continue;(g=x==null?void 0:x.loaded)!=null&&g.stuff&&(S={...S,...x.loaded.stuff}),R=R.slice(0,ae+1).concat(x);break e}catch{continue}}return await Z({status:$,error:y,url:p,routeId:u.id})}else(O=A==null?void 0:A.loaded)!=null&&O.stuff&&(S={...S,...A.loaded.stuff}),R.push(A)}return await he({url:p,params:w,stuff:S,branch:R,status:$,error:y,routeId:u.id})}async function Z({status:o,error:p,url:w,routeId:u}){var _,m;const h={},b=await H({module:await Nt,url:w,params:h,stuff:{},routeId:u}),v=await H({status:o,error:p,module:await Ot,url:w,params:h,stuff:b&&b.loaded&&b.loaded.stuff||{},routeId:u});return await he({url:w,params:h,stuff:{...(_=b==null?void 0:b.loaded)==null?void 0:_.stuff,...(m=v==null?void 0:v.loaded)==null?void 0:m.stuff},branch:[b,v],status:o,error:p,routeId:u})}function Oe(o){if(o.origin!==location.origin||!o.pathname.startsWith(t))return;const p=decodeURI(o.pathname.slice(t.length)||"/");for(const w of we){const u=w.exec(p);if(u)return{id:o.pathname+o.search,route:w,params:u,url:o}}}async function _e({url:o,scroll:p,keepfocus:w,redirect_chain:u,details:h,accepted:b,blocked:v}){const _=a.url;let m=!1;const R={from:_,to:o,cancel:()=>m=!0};if(r.before_navigate.forEach($=>$(R)),m){v();return}const S=vt(o.pathname,i),N=new URL(o.origin+S+o.search+o.hash);be(j),b(),d&&f.navigating.set({from:a.url,to:N}),await pe(N,u,!1,{scroll:p,keepfocus:w,details:h},()=>{const $={from:_,to:N};r.after_navigate.forEach(y=>y($)),f.navigating.set(null)})}function Q(o){return location.href=o.href,new Promise(()=>{})}return{after_navigate:o=>{ye(()=>(r.after_navigate.push(o),()=>{const p=r.after_navigate.indexOf(o);r.after_navigate.splice(p,1)}))},before_navigate:o=>{ye(()=>(r.before_navigate.push(o),()=>{const p=r.before_navigate.indexOf(o);r.before_navigate.splice(p,1)}))},disable_scroll_handling:()=>{(E||!d)&&(L=!1)},goto:(o,p={})=>Se(o,p,[]),invalidate:o=>{if(typeof o=="function")c.push(o);else{const{href:p}=new URL(o,location.href);c.push(w=>w===p)}return M||(M=Promise.resolve().then(async()=>{await pe(new URL(location.href),[],!0),M=null})),M},prefetch:async o=>{const p=new URL(o,ze(document));await Ue(p)},prefetch_routes:async o=>{const w=(o?we.filter(u=>o.some(h=>u.exec(h))):we).map(u=>Promise.all(u.a.map(h=>h())));await Promise.all(w)},_start_router:()=>{history.scrollRestoration="manual",addEventListener("beforeunload",u=>{let h=!1;const b={from:a.url,to:null,cancel:()=>h=!0};r.before_navigate.forEach(v=>v(b)),h?(u.preventDefault(),u.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"){be(j);try{sessionStorage[We]=JSON.stringify(te)}catch{}}});const o=u=>{const h=qe(u);h&&h.href&&h.hasAttribute("sveltekit:prefetch")&&Ue(Je(h))};let p;const w=u=>{clearTimeout(p),p=setTimeout(()=>{var h;(h=u.target)==null||h.dispatchEvent(new CustomEvent("sveltekit:trigger_prefetch",{bubbles:!0}))},20)};addEventListener("touchstart",o),addEventListener("mousemove",w),addEventListener("sveltekit:trigger_prefetch",o),addEventListener("click",u=>{if(!F||u.button||u.which!==1||u.metaKey||u.ctrlKey||u.shiftKey||u.altKey||u.defaultPrevented)return;const h=qe(u);if(!h||!h.href)return;const b=h instanceof SVGAElement,v=Je(h);if(!b&&v.origin==="null")return;const _=(h.getAttribute("rel")||"").split(/\s+/);if(h.hasAttribute("download")||_.includes("external")||h.hasAttribute("sveltekit:reload")||(b?h.target.baseVal:h.target))return;const[m,R]=v.href.split("#");if(R!==void 0&&m===location.href.split("#")[0]){ue=!0,be(j),f.page.set({...de,url:v}),f.page.notify();return}_e({url:v,scroll:h.hasAttribute("sveltekit:noscroll")?ve():null,keepfocus:!1,redirect_chain:[],details:{state:{},replaceState:v.href===location.href},accepted:()=>u.preventDefault(),blocked:()=>u.preventDefault()})}),addEventListener("popstate",u=>{if(u.state&&F){if(u.state[B]===j)return;_e({url:new URL(location.href),scroll:te[u.state[B]],keepfocus:!1,redirect_chain:[],details:null,accepted:()=>{j=u.state[B]},blocked:()=>{const h=j-u.state[B];history.go(h)}})}}),addEventListener("hashchange",()=>{ue&&(ue=!1,history.replaceState({...history.state,[B]:++j},"",location.href))})},_hydrate:async({status:o,error:p,nodes:w,params:u,routeId:h})=>{const b=new URL(location.href),v=[];let _={},m,R;try{for(let S=0;S
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/.svelte-kit/output/prerendered/pages/index.html b/frontend/.svelte-kit/output/prerendered/pages/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..eeaeb7ce73c0128271f97413fe5f1ba58b7ac75f
--- /dev/null
+++ b/frontend/.svelte-kit/output/prerendered/pages/index.html
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Drawing to Map
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/.svelte-kit/output/server/chunks/hooks-1c45ba0b.js b/frontend/.svelte-kit/output/server/chunks/hooks-1c45ba0b.js
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/chunks/hooks-1c45ba0b.js
@@ -0,0 +1 @@
+
diff --git a/frontend/.svelte-kit/output/server/chunks/index-445fd704.js b/frontend/.svelte-kit/output/server/chunks/index-445fd704.js
new file mode 100644
index 0000000000000000000000000000000000000000..f727e08d4c18d97d5ff37c6525f3d71c156ac5ab
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/chunks/index-445fd704.js
@@ -0,0 +1,112 @@
+function noop() {
+}
+function run(fn) {
+ return fn();
+}
+function blank_object() {
+ return /* @__PURE__ */ Object.create(null);
+}
+function run_all(fns) {
+ fns.forEach(run);
+}
+function safe_not_equal(a, b) {
+ return a != a ? b == b : a !== b || (a && typeof a === "object" || typeof a === "function");
+}
+function subscribe(store, ...callbacks) {
+ if (store == null) {
+ return noop;
+ }
+ const unsub = store.subscribe(...callbacks);
+ return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
+}
+function set_store_value(store, ret, value) {
+ store.set(value);
+ return ret;
+}
+let current_component;
+function set_current_component(component) {
+ current_component = component;
+}
+function get_current_component() {
+ if (!current_component)
+ throw new Error("Function called outside component initialization");
+ return current_component;
+}
+function setContext(key, context) {
+ get_current_component().$$.context.set(key, context);
+ return context;
+}
+Promise.resolve();
+const escaped = {
+ '"': """,
+ "'": "'",
+ "&": "&",
+ "<": "<",
+ ">": ">"
+};
+function escape(html) {
+ return String(html).replace(/["'&<>]/g, (match) => escaped[match]);
+}
+function escape_attribute_value(value) {
+ return typeof value === "string" ? escape(value) : value;
+}
+function each(items, fn) {
+ let str = "";
+ for (let i = 0; i < items.length; i += 1) {
+ str += fn(items[i], i);
+ }
+ return str;
+}
+const missing_component = {
+ $$render: () => ""
+};
+function validate_component(component, name) {
+ if (!component || !component.$$render) {
+ if (name === "svelte:component")
+ name += " this={...}";
+ throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);
+ }
+ return component;
+}
+let on_destroy;
+function create_ssr_component(fn) {
+ function $$render(result, props, bindings, slots, context) {
+ const parent_component = current_component;
+ const $$ = {
+ on_destroy,
+ context: new Map(context || (parent_component ? parent_component.$$.context : [])),
+ on_mount: [],
+ before_update: [],
+ after_update: [],
+ callbacks: blank_object()
+ };
+ set_current_component({ $$ });
+ const html = fn(result, props, bindings, slots);
+ set_current_component(parent_component);
+ return html;
+ }
+ return {
+ render: (props = {}, { $$slots = {}, context = /* @__PURE__ */ new Map() } = {}) => {
+ on_destroy = [];
+ const result = { title: "", head: "", css: /* @__PURE__ */ new Set() };
+ const html = $$render(result, props, {}, $$slots, context);
+ run_all(on_destroy);
+ return {
+ html,
+ css: {
+ code: Array.from(result.css).map((css) => css.code).join("\n"),
+ map: null
+ },
+ head: result.title + result.head
+ };
+ },
+ $$render
+ };
+}
+function add_attribute(name, value, boolean) {
+ if (value == null || boolean && !value)
+ return "";
+ const assignment = boolean && value === true ? "" : `="${escape_attribute_value(value.toString())}"`;
+ return ` ${name}${assignment}`;
+}
+export { safe_not_equal as a, subscribe as b, create_ssr_component as c, each as d, escape as e, add_attribute as f, set_store_value as g, missing_component as m, noop as n, setContext as s, validate_component as v };
diff --git a/frontend/.svelte-kit/output/server/chunks/paths-396f020f.js b/frontend/.svelte-kit/output/server/chunks/paths-396f020f.js
new file mode 100644
index 0000000000000000000000000000000000000000..f70164ed4de441e2a3cd51056913d8e9aea4f56b
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/chunks/paths-396f020f.js
@@ -0,0 +1,7 @@
+let base = "";
+let assets = "";
+function set_paths(paths) {
+ base = paths.base;
+ assets = paths.assets || base;
+}
+export { assets as a, base as b, set_paths as s };
diff --git a/frontend/.svelte-kit/output/server/entries/fallbacks/error.svelte.js b/frontend/.svelte-kit/output/server/entries/fallbacks/error.svelte.js
new file mode 100644
index 0000000000000000000000000000000000000000..5fc2e43da603772c8d72bfb31c7dec7021c834c3
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/entries/fallbacks/error.svelte.js
@@ -0,0 +1,21 @@
+import { c as create_ssr_component, e as escape } from "../../chunks/index-445fd704.js";
+function load({ error, status }) {
+ return { props: { error, status } };
+}
+const Error = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+ let { status } = $$props;
+ let { error } = $$props;
+ if ($$props.status === void 0 && $$bindings.status && status !== void 0)
+ $$bindings.status(status);
+ if ($$props.error === void 0 && $$bindings.error && error !== void 0)
+ $$bindings.error(error);
+ return `${escape(status)}
+
+${escape(error.message)}
+
+
+
+${error.frame ? `${escape(error.frame)}
` : ``}
+${error.stack ? `${escape(error.stack)}
` : ``}`;
+});
+export { Error as default, load };
diff --git a/frontend/.svelte-kit/output/server/entries/pages/__layout.svelte.js b/frontend/.svelte-kit/output/server/entries/pages/__layout.svelte.js
new file mode 100644
index 0000000000000000000000000000000000000000..78f1a3428fa6aa2d4e004b32dc2ba1d50d423833
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/entries/pages/__layout.svelte.js
@@ -0,0 +1,6 @@
+import { c as create_ssr_component } from "../../chunks/index-445fd704.js";
+var app = /* @__PURE__ */ (() => '@import url(\'https://fonts.googleapis.com/css2?family=Open+Sans:wght@100;200;300;400;500;600;700;800&display=swap\');\n/*\n! tailwindcss v3.1.4 | MIT License | https://tailwindcss.com\n*/\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n::before,\n::after {\n --tw-content: \'\';\n}\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user\'s configured `sans` font-family by default.\n*/\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n}\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n/*\nRemove the default font size and weight for headings.\n*/\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\na {\n color: inherit;\n text-decoration: inherit;\n}\n/*\nAdd the correct font weight in Edge and Safari.\n*/\nb,\nstrong {\n font-weight: bolder;\n}\n/*\n1. Use the user\'s configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n/*\nAdd the correct font size in all browsers.\n*/\nsmall {\n font-size: 80%;\n}\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\nbutton,\nselect {\n text-transform: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\nbutton,\n[type=\'button\'],\n[type=\'reset\'],\n[type=\'submit\'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n:-moz-focusring {\n outline: auto;\n}\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n:-moz-ui-invalid {\n box-shadow: none;\n}\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\nprogress {\n vertical-align: baseline;\n}\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n[type=\'search\'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n/*\nAdd the correct display in Chrome and Safari.\n*/\nsummary {\n display: list-item;\n}\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\nfieldset {\n margin: 0;\n padding: 0;\n}\nlegend {\n padding: 0;\n}\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n/*\nPrevent resizing textareas horizontally by default.\n*/\ntextarea {\n resize: vertical;\n}\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user\'s configured gray 400 color.\n*/\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n/*\nSet the default cursor for buttons.\n*/\nbutton,\n[role="button"] {\n cursor: pointer;\n}\n/*\nMake sure disabled buttons don\'t get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\nhtml {\n font-family: \'Open Sans\', sans-serif;\n }\n*, ::before, ::after{\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n::-webkit-backdrop{\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n::backdrop{\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.prose{\n color: var(--tw-prose-body);\n max-width: 65ch;\n}\n.prose :where([class~="lead"]):not(:where([class~="not-prose"] *)){\n color: var(--tw-prose-lead);\n font-size: 1.25em;\n line-height: 1.6;\n margin-top: 1.2em;\n margin-bottom: 1.2em;\n}\n.prose :where(a):not(:where([class~="not-prose"] *)){\n color: var(--tw-prose-links);\n text-decoration: underline;\n font-weight: 500;\n}\n.prose :where(strong):not(:where([class~="not-prose"] *)){\n color: var(--tw-prose-bold);\n font-weight: 600;\n}\n.prose :where(ol):not(:where([class~="not-prose"] *)){\n list-style-type: decimal;\n padding-left: 1.625em;\n}\n.prose :where(ol[type="A"]):not(:where([class~="not-prose"] *)){\n list-style-type: upper-alpha;\n}\n.prose :where(ol[type="a"]):not(:where([class~="not-prose"] *)){\n list-style-type: lower-alpha;\n}\n.prose :where(ol[type="A" s]):not(:where([class~="not-prose"] *)){\n list-style-type: upper-alpha;\n}\n.prose :where(ol[type="a" s]):not(:where([class~="not-prose"] *)){\n list-style-type: lower-alpha;\n}\n.prose :where(ol[type="I"]):not(:where([class~="not-prose"] *)){\n list-style-type: upper-roman;\n}\n.prose :where(ol[type="i"]):not(:where([class~="not-prose"] *)){\n list-style-type: lower-roman;\n}\n.prose :where(ol[type="I" s]):not(:where([class~="not-prose"] *)){\n list-style-type: upper-roman;\n}\n.prose :where(ol[type="i" s]):not(:where([class~="not-prose"] *)){\n list-style-type: lower-roman;\n}\n.prose :where(ol[type="1"]):not(:where([class~="not-prose"] *)){\n list-style-type: decimal;\n}\n.prose :where(ul):not(:where([class~="not-prose"] *)){\n list-style-type: disc;\n padding-left: 1.625em;\n}\n.prose :where(ol > li):not(:where([class~="not-prose"] *))::marker{\n font-weight: 400;\n color: var(--tw-prose-counters);\n}\n.prose :where(ul > li):not(:where([class~="not-prose"] *))::marker{\n color: var(--tw-prose-bullets);\n}\n.prose :where(hr):not(:where([class~="not-prose"] *)){\n border-color: var(--tw-prose-hr);\n border-top-width: 1px;\n margin-top: 3em;\n margin-bottom: 3em;\n}\n.prose :where(blockquote):not(:where([class~="not-prose"] *)){\n font-weight: 500;\n font-style: italic;\n color: var(--tw-prose-quotes);\n border-left-width: 0.25rem;\n border-left-color: var(--tw-prose-quote-borders);\n quotes: "\\201C""\\201D""\\2018""\\2019";\n margin-top: 1.6em;\n margin-bottom: 1.6em;\n padding-left: 1em;\n}\n.prose :where(h1):not(:where([class~="not-prose"] *)){\n color: var(--tw-prose-headings);\n font-weight: 800;\n font-size: 2.25em;\n margin-top: 0;\n margin-bottom: 0.8888889em;\n line-height: 1.1111111;\n}\n.prose :where(h1 strong):not(:where([class~="not-prose"] *)){\n font-weight: 900;\n}\n.prose :where(h2):not(:where([class~="not-prose"] *)){\n color: var(--tw-prose-headings);\n font-weight: 700;\n font-size: 1.5em;\n margin-top: 2em;\n margin-bottom: 1em;\n line-height: 1.3333333;\n}\n.prose :where(h2 strong):not(:where([class~="not-prose"] *)){\n font-weight: 800;\n}\n.prose :where(h3):not(:where([class~="not-prose"] *)){\n color: var(--tw-prose-headings);\n font-weight: 600;\n font-size: 1.25em;\n margin-top: 1.6em;\n margin-bottom: 0.6em;\n line-height: 1.6;\n}\n.prose :where(h3 strong):not(:where([class~="not-prose"] *)){\n font-weight: 700;\n}\n.prose :where(h4):not(:where([class~="not-prose"] *)){\n color: var(--tw-prose-headings);\n font-weight: 600;\n margin-top: 1.5em;\n margin-bottom: 0.5em;\n line-height: 1.5;\n}\n.prose :where(h4 strong):not(:where([class~="not-prose"] *)){\n font-weight: 700;\n}\n.prose :where(figure > *):not(:where([class~="not-prose"] *)){\n margin-top: 0;\n margin-bottom: 0;\n}\n.prose :where(figcaption):not(:where([class~="not-prose"] *)){\n color: var(--tw-prose-captions);\n font-size: 0.875em;\n line-height: 1.4285714;\n margin-top: 0.8571429em;\n}\n.prose :where(a code):not(:where([class~="not-prose"] *)){\n color: var(--tw-prose-links);\n}\n.prose :where(pre code):not(:where([class~="not-prose"] *))::before{\n content: none;\n}\n.prose :where(pre code):not(:where([class~="not-prose"] *))::after{\n content: none;\n}\n.prose :where(table):not(:where([class~="not-prose"] *)){\n width: 100%;\n table-layout: auto;\n text-align: left;\n margin-top: 2em;\n margin-bottom: 2em;\n font-size: 0.875em;\n line-height: 1.7142857;\n}\n.prose :where(thead):not(:where([class~="not-prose"] *)){\n border-bottom-width: 1px;\n border-bottom-color: var(--tw-prose-th-borders);\n}\n.prose :where(thead th):not(:where([class~="not-prose"] *)){\n color: var(--tw-prose-headings);\n font-weight: 600;\n vertical-align: bottom;\n padding-right: 0.5714286em;\n padding-bottom: 0.5714286em;\n padding-left: 0.5714286em;\n}\n.prose :where(tbody tr):not(:where([class~="not-prose"] *)){\n border-bottom-width: 1px;\n border-bottom-color: var(--tw-prose-td-borders);\n}\n.prose :where(tbody tr:last-child):not(:where([class~="not-prose"] *)){\n border-bottom-width: 0;\n}\n.prose :where(tbody td):not(:where([class~="not-prose"] *)){\n vertical-align: baseline;\n padding-top: 0.5714286em;\n padding-right: 0.5714286em;\n padding-bottom: 0.5714286em;\n padding-left: 0.5714286em;\n}\n.prose{\n --tw-prose-body: #374151;\n --tw-prose-headings: #111827;\n --tw-prose-lead: #4b5563;\n --tw-prose-links: #111827;\n --tw-prose-bold: #111827;\n --tw-prose-counters: #6b7280;\n --tw-prose-bullets: #d1d5db;\n --tw-prose-hr: #e5e7eb;\n --tw-prose-quotes: #111827;\n --tw-prose-quote-borders: #e5e7eb;\n --tw-prose-captions: #6b7280;\n --tw-prose-code: #111827;\n --tw-prose-pre-code: #e5e7eb;\n --tw-prose-pre-bg: #1f2937;\n --tw-prose-th-borders: #d1d5db;\n --tw-prose-td-borders: #e5e7eb;\n --tw-prose-invert-body: #d1d5db;\n --tw-prose-invert-headings: #fff;\n --tw-prose-invert-lead: #9ca3af;\n --tw-prose-invert-links: #fff;\n --tw-prose-invert-bold: #fff;\n --tw-prose-invert-counters: #9ca3af;\n --tw-prose-invert-bullets: #4b5563;\n --tw-prose-invert-hr: #374151;\n --tw-prose-invert-quotes: #f3f4f6;\n --tw-prose-invert-quote-borders: #374151;\n --tw-prose-invert-captions: #9ca3af;\n --tw-prose-invert-code: #fff;\n --tw-prose-invert-pre-code: #d1d5db;\n --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);\n --tw-prose-invert-th-borders: #4b5563;\n --tw-prose-invert-td-borders: #374151;\n font-size: 1rem;\n line-height: 1.75;\n}\n.prose :where(p):not(:where([class~="not-prose"] *)){\n margin-top: 1.25em;\n margin-bottom: 1.25em;\n}\n.prose :where(img):not(:where([class~="not-prose"] *)){\n margin-top: 2em;\n margin-bottom: 2em;\n}\n.prose :where(video):not(:where([class~="not-prose"] *)){\n margin-top: 2em;\n margin-bottom: 2em;\n}\n.prose :where(figure):not(:where([class~="not-prose"] *)){\n margin-top: 2em;\n margin-bottom: 2em;\n}\n.prose :where(h2 code):not(:where([class~="not-prose"] *)){\n font-size: 0.875em;\n}\n.prose :where(h3 code):not(:where([class~="not-prose"] *)){\n font-size: 0.9em;\n}\n.prose :where(li):not(:where([class~="not-prose"] *)){\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n.prose :where(ol > li):not(:where([class~="not-prose"] *)){\n padding-left: 0.375em;\n}\n.prose :where(ul > li):not(:where([class~="not-prose"] *)){\n padding-left: 0.375em;\n}\n.prose > :where(ul > li p):not(:where([class~="not-prose"] *)){\n margin-top: 0.75em;\n margin-bottom: 0.75em;\n}\n.prose > :where(ul > li > *:first-child):not(:where([class~="not-prose"] *)){\n margin-top: 1.25em;\n}\n.prose > :where(ul > li > *:last-child):not(:where([class~="not-prose"] *)){\n margin-bottom: 1.25em;\n}\n.prose > :where(ol > li > *:first-child):not(:where([class~="not-prose"] *)){\n margin-top: 1.25em;\n}\n.prose > :where(ol > li > *:last-child):not(:where([class~="not-prose"] *)){\n margin-bottom: 1.25em;\n}\n.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"] *)){\n margin-top: 0.75em;\n margin-bottom: 0.75em;\n}\n.prose :where(hr + *):not(:where([class~="not-prose"] *)){\n margin-top: 0;\n}\n.prose :where(h2 + *):not(:where([class~="not-prose"] *)){\n margin-top: 0;\n}\n.prose :where(h3 + *):not(:where([class~="not-prose"] *)){\n margin-top: 0;\n}\n.prose :where(h4 + *):not(:where([class~="not-prose"] *)){\n margin-top: 0;\n}\n.prose :where(thead th:first-child):not(:where([class~="not-prose"] *)){\n padding-left: 0;\n}\n.prose :where(thead th:last-child):not(:where([class~="not-prose"] *)){\n padding-right: 0;\n}\n.prose :where(tbody td:first-child):not(:where([class~="not-prose"] *)){\n padding-left: 0;\n}\n.prose :where(tbody td:last-child):not(:where([class~="not-prose"] *)){\n padding-right: 0;\n}\n.prose > :where(:first-child):not(:where([class~="not-prose"] *)){\n margin-top: 0;\n}\n.prose > :where(:last-child):not(:where([class~="not-prose"] *)){\n margin-bottom: 0;\n}\n.pointer-events-none{\n pointer-events: none;\n}\n.absolute{\n position: absolute;\n}\n.relative{\n position: relative;\n}\n.bottom-0{\n bottom: 0px;\n}\n.left-0{\n left: 0px;\n}\n.top-0{\n top: 0px;\n}\n.right-0{\n right: 0px;\n}\n.z-0{\n z-index: 0;\n}\n.z-10{\n z-index: 10;\n}\n.z-20{\n z-index: 20;\n}\n.my-3{\n margin-top: 0.75rem;\n margin-bottom: 0.75rem;\n}\n.my-6{\n margin-top: 1.5rem;\n margin-bottom: 1.5rem;\n}\n.mx-auto{\n margin-left: auto;\n margin-right: auto;\n}\n.-mx-3{\n margin-left: -0.75rem;\n margin-right: -0.75rem;\n}\n.mt-6{\n margin-top: 1.5rem;\n}\n.mb-2{\n margin-bottom: 0.5rem;\n}\n.box-border{\n box-sizing: border-box;\n}\n.block{\n display: block;\n}\n.flex{\n display: flex;\n}\n.grid{\n display: grid;\n}\n.hidden{\n display: none;\n}\n.aspect-\\[512\\/512\\]{\n aspect-ratio: 512/512;\n}\n.h-0{\n height: 0px;\n}\n.h-full{\n height: 100%;\n}\n.max-h-\\[9rem\\]{\n max-height: 9rem;\n}\n.max-h-24{\n max-height: 6rem;\n}\n.w-0{\n width: 0px;\n}\n.w-full{\n width: 100%;\n}\n.max-w-full{\n max-width: 100%;\n}\n.max-w-\\[3rem\\]{\n max-width: 3rem;\n}\n.max-w-screen-md{\n max-width: 768px;\n}\n.-translate-x-1\\/2{\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@-webkit-keyframes spin{\n to{\n transform: rotate(360deg);\n }\n}\n@keyframes spin{\n to{\n transform: rotate(360deg);\n }\n}\n.animate-spin{\n -webkit-animation: spin 1s linear infinite;\n animation: spin 1s linear infinite;\n}\n.cursor-pointer{\n cursor: pointer;\n}\n.snap-x{\n scroll-snap-type: x var(--tw-scroll-snap-strictness);\n}\n.snap-y{\n scroll-snap-type: y var(--tw-scroll-snap-strictness);\n}\n.snap-mandatory{\n --tw-scroll-snap-strictness: mandatory;\n}\n.snap-start{\n scroll-snap-align: start;\n}\n.snap-always{\n scroll-snap-stop: always;\n}\n.grid-cols-2{\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.grid-cols-\\[2fr_1\\.5fr\\]{\n grid-template-columns: 2fr 1.5fr;\n}\n.flex-col{\n flex-direction: column;\n}\n.flex-nowrap{\n flex-wrap: nowrap;\n}\n.items-center{\n align-items: center;\n}\n.justify-center{\n justify-content: center;\n}\n.gap-2{\n gap: 0.5rem;\n}\n.gap-1{\n gap: 0.25rem;\n}\n.overflow-hidden{\n overflow: hidden;\n}\n.overflow-clip{\n overflow: clip;\n}\n.overflow-scroll{\n overflow: scroll;\n}\n.overflow-x-scroll{\n overflow-x: scroll;\n}\n.whitespace-nowrap{\n white-space: nowrap;\n}\n.rounded-lg{\n border-radius: 0.5rem;\n}\n.border{\n border-width: 1px;\n}\n.border-gray-500{\n --tw-border-opacity: 1;\n border-color: rgb(107 114 128 / var(--tw-border-opacity));\n}\n.border-gray-300{\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity));\n}\n.bg-\\[rgb\\(11\\2c 15\\2c 25\\)\\]{\n --tw-bg-opacity: 1;\n background-color: rgb(11 15 25 / var(--tw-bg-opacity));\n}\n.bg-gray-50{\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.p-3{\n padding: 0.75rem;\n}\n.p-1{\n padding: 0.25rem;\n}\n.px-2{\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-3{\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.py-5{\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n}\n.py-3{\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.pl-2{\n padding-left: 0.5rem;\n}\n.text-base{\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-sm{\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xs{\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold{\n font-weight: 700;\n}\n.leading-6{\n line-height: 1.5rem;\n}\n.text-white{\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.text-gray-900{\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.opacity-0{\n opacity: 0;\n}\n.opacity-30{\n opacity: 0.3;\n}\n.outline{\n outline-style: solid;\n}\n.outline-2{\n outline-width: 2px;\n}\n.outline-offset-\\[-2px\\]{\n outline-offset: -2px;\n}\n.transition-all{\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-200{\n transition-duration: 200ms;\n}\n.ease-in-out{\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.hover\\:outline:hover{\n outline-style: solid;\n}\n.focus\\:border-blue-500:focus{\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity));\n}\n.focus\\:ring-blue-500:focus{\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));\n}\n.disabled\\:opacity-50:disabled{\n opacity: 0.5;\n}\n@media (prefers-color-scheme: dark){\n .dark\\:prose-invert{\n --tw-prose-body: var(--tw-prose-invert-body);\n --tw-prose-headings: var(--tw-prose-invert-headings);\n --tw-prose-lead: var(--tw-prose-invert-lead);\n --tw-prose-links: var(--tw-prose-invert-links);\n --tw-prose-bold: var(--tw-prose-invert-bold);\n --tw-prose-counters: var(--tw-prose-invert-counters);\n --tw-prose-bullets: var(--tw-prose-invert-bullets);\n --tw-prose-hr: var(--tw-prose-invert-hr);\n --tw-prose-quotes: var(--tw-prose-invert-quotes);\n --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);\n --tw-prose-captions: var(--tw-prose-invert-captions);\n --tw-prose-code: var(--tw-prose-invert-code);\n --tw-prose-pre-code: var(--tw-prose-invert-pre-code);\n --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);\n --tw-prose-th-borders: var(--tw-prose-invert-th-borders);\n --tw-prose-td-borders: var(--tw-prose-invert-td-borders);\n }\n .dark\\:border-gray-300{\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity));\n }\n .dark\\:border-gray-600{\n --tw-border-opacity: 1;\n border-color: rgb(75 85 99 / var(--tw-border-opacity));\n }\n .dark\\:bg-gray-700{\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity));\n }\n .dark\\:text-white{\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n }\n .dark\\:placeholder-gray-400::-moz-placeholder{\n --tw-placeholder-opacity: 1;\n color: rgb(156 163 175 / var(--tw-placeholder-opacity));\n }\n .dark\\:placeholder-gray-400::placeholder{\n --tw-placeholder-opacity: 1;\n color: rgb(156 163 175 / var(--tw-placeholder-opacity));\n }\n .dark\\:focus\\:ring-blue-500:focus{\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));\n }\n}\n@media (min-width: 530px){\n .sm\\:max-h-\\[none\\]{\n max-height: none;\n }\n .sm\\:grid-cols-3{\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n .sm\\:grid-cols-2{\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .sm\\:flex-row{\n flex-direction: row;\n }\n}\n')();
+const _layout = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+ return `${slots.default ? slots.default({}) : ``}`;
+});
+export { _layout as default };
diff --git a/frontend/.svelte-kit/output/server/entries/pages/index.svelte.js b/frontend/.svelte-kit/output/server/entries/pages/index.svelte.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b4726d4ec656b36dd1aabbdb69e4db2c55a19db
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/entries/pages/index.svelte.js
@@ -0,0 +1,340 @@
+import { n as noop, a as safe_not_equal, c as create_ssr_component, b as subscribe, d as each, e as escape, f as add_attribute, g as set_store_value, v as validate_component } from "../../chunks/index-445fd704.js";
+import { b as base } from "../../chunks/paths-396f020f.js";
+import "nanoid";
+import "px-brush";
+const COLOR_LIST = [
+ { color: [219, 14, 154], label: "building" },
+ { color: [147, 142, 123], label: "pervious surface" },
+ { color: [248, 12, 0], label: "impervious surface" },
+ { color: [169, 113, 1], label: "bare soil" },
+ { color: [21, 83, 174], label: "water" },
+ { color: [25, 74, 38], label: "coniferous" },
+ { color: [70, 228, 131], label: "deciduous" },
+ { color: [243, 166, 13], label: "brushwood" },
+ { color: [102, 0, 130], label: "vineyard" },
+ { color: [85, 255, 0], label: "herbaceous vegetation" },
+ { color: [255, 243, 13], label: "agricultural land" },
+ { color: [228, 223, 124], label: "plowed land" },
+ { color: [61, 230, 235], label: "swimming pool" },
+ { color: [255, 255, 255], label: "snow" },
+ { color: [138, 179, 160], label: "clear cut" },
+ { color: [107, 113, 79], label: "mixed" },
+ { color: [197, 220, 66], label: "ligneous" },
+ { color: [153, 153, 255], label: "greenhouse" },
+ { color: [0, 0, 0], label: "other" }
+];
+const IMAGES_LIST = [
+ "/samples/example0.png",
+ "/samples/example1.png",
+ "/samples/example2.png",
+ "/samples/example3.png",
+ "/samples/example4.png",
+ "/samples/example5.png"
+];
+const PRESETS = [
+ ["Aerial view, France. High resolution image, 4K, ultra detailed", "Realistic"],
+ ["Aerial view, France. Colorful lego bricks", "Lego brick"],
+ ["Aerial view, France. Black and white paper pencil drawing", "Pencil"],
+ ["Aerial view, France. Oil on canvas painting", "Painting"]
+];
+const subscriber_queue = [];
+function writable(value, start = noop) {
+ let stop;
+ const subscribers = /* @__PURE__ */ new Set();
+ function set(new_value) {
+ if (safe_not_equal(value, new_value)) {
+ value = new_value;
+ if (stop) {
+ const run_queue = !subscriber_queue.length;
+ for (const subscriber of subscribers) {
+ subscriber[1]();
+ subscriber_queue.push(subscriber, value);
+ }
+ if (run_queue) {
+ for (let i = 0; i < subscriber_queue.length; i += 2) {
+ subscriber_queue[i][0](subscriber_queue[i + 1]);
+ }
+ subscriber_queue.length = 0;
+ }
+ }
+ }
+ }
+ function update(fn) {
+ set(fn(value));
+ }
+ function subscribe2(run, invalidate = noop) {
+ const subscriber = [run, invalidate];
+ subscribers.add(subscriber);
+ if (subscribers.size === 1) {
+ stop = start(set) || noop;
+ }
+ run(value);
+ return () => {
+ subscribers.delete(subscriber);
+ if (subscribers.size === 0) {
+ stop();
+ stop = null;
+ }
+ };
+ }
+ return { set, update, subscribe: subscribe2 };
+}
+function randomSeed() {
+ return BigInt(13248873089935215e3 & ((1 << 63) - 1) * Math.random());
+}
+const drawingLayers = writable(/* @__PURE__ */ new Map());
+const resultImage = writable();
+const currentCanvas = writable();
+const selectedImage = writable();
+const selectedBrush = writable();
+const selectedParams = writable({
+ prompt: PRESETS[0][0],
+ seed: randomSeed(),
+ steps: 20
+});
+const generateMap = writable(false);
+const saveResult = writable(false);
+var TemplateGallery_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => "form.svelte-1gwcbp.svelte-1gwcbp{width:100%;overflow:hidden\n}.samples.svelte-1gwcbp.svelte-1gwcbp{display:flex;scroll-snap-type:x var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;flex-wrap:nowrap;gap:0.25rem;overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none\n}.samples.svelte-1gwcbp.svelte-1gwcbp::-webkit-scrollbar{display:none\n}input[type='radio'].svelte-1gwcbp.svelte-1gwcbp{position:absolute;display:none;height:0px;width:0px;opacity:0\n}input[type='radio'].svelte-1gwcbp.svelte-1gwcbp:disabled{opacity:0.5\n}input[type='radio'].svelte-1gwcbp:checked~label.svelte-1gwcbp{outline-style:solid;outline-width:2px;outline-color:#eab308\n}input[type='radio'].svelte-1gwcbp:disabled+label.svelte-1gwcbp{opacity:0.5\n}label.svelte-1gwcbp.svelte-1gwcbp{display:flex;cursor:pointer;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:200ms;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)\n}label.svelte-1gwcbp.svelte-1gwcbp:hover{outline-style:solid\n}img.svelte-1gwcbp.svelte-1gwcbp{max-height:6rem;max-width:none\n}")();
+const css$5 = {
+ code: "form.svelte-1gwcbp.svelte-1gwcbp{width:100%;overflow:hidden\n}.samples.svelte-1gwcbp.svelte-1gwcbp{display:flex;scroll-snap-type:x var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;flex-wrap:nowrap;gap:0.25rem;overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none\n}.samples.svelte-1gwcbp.svelte-1gwcbp::-webkit-scrollbar{display:none\n}input[type='radio'].svelte-1gwcbp.svelte-1gwcbp{position:absolute;display:none;height:0px;width:0px;opacity:0\n}input[type='radio'].svelte-1gwcbp.svelte-1gwcbp:disabled{opacity:0.5\n}input[type='radio'].svelte-1gwcbp:checked~label.svelte-1gwcbp{outline-style:solid;outline-width:2px;outline-color:#eab308\n}input[type='radio'].svelte-1gwcbp:disabled+label.svelte-1gwcbp{opacity:0.5\n}label.svelte-1gwcbp.svelte-1gwcbp{display:flex;cursor:pointer;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:200ms;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)\n}label.svelte-1gwcbp.svelte-1gwcbp:hover{outline-style:solid\n}img.svelte-1gwcbp.svelte-1gwcbp{max-height:6rem;max-width:none\n}",
+ map: null
+};
+const TemplateGallery = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+ let $$unsubscribe_selectedImage;
+ let $generateMap, $$unsubscribe_generateMap;
+ $$unsubscribe_selectedImage = subscribe(selectedImage, (value) => value);
+ $$unsubscribe_generateMap = subscribe(generateMap, (value) => $generateMap = value);
+ $$result.css.add(css$5);
+ $$unsubscribe_selectedImage();
+ $$unsubscribe_generateMap();
+ return ``;
+});
+var BrushSelector_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => ".colors.svelte-1oy4poo.svelte-1oy4poo{display:grid;max-height:9rem;scroll-snap-type:y var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;grid-template-columns:repeat(2, minmax(0, 1fr));gap:0.5rem;overflow:scroll\n}@media(min-width: 530px){.colors.svelte-1oy4poo.svelte-1oy4poo{max-height:none;grid-template-columns:repeat(3, minmax(0, 1fr))\n }}.colors.svelte-1oy4poo span.svelte-1oy4poo{margin-left:0.5rem\n}.colors.svelte-1oy4poo svg.svelte-1oy4poo{display:block\n}input[type='radio'].svelte-1oy4poo.svelte-1oy4poo{position:absolute;display:none;height:0px;width:0px;opacity:0\n}input[type='radio'].svelte-1oy4poo:checked~label.svelte-1oy4poo{outline-style:solid;outline-width:2px;outline-color:#eab308\n}label.svelte-1oy4poo.svelte-1oy4poo{display:flex;cursor:pointer;white-space:nowrap;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:200ms;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)\n}label.svelte-1oy4poo.svelte-1oy4poo:hover{outline-style:solid\n}.brush.svelte-1oy4poo.svelte-1oy4poo{display:flex\n}")();
+const css$4 = {
+ code: ".colors.svelte-1oy4poo.svelte-1oy4poo{display:grid;max-height:9rem;scroll-snap-type:y var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;grid-template-columns:repeat(2, minmax(0, 1fr));gap:0.5rem;overflow:scroll\n}@media(min-width: 530px){.colors.svelte-1oy4poo.svelte-1oy4poo{max-height:none;grid-template-columns:repeat(3, minmax(0, 1fr))\n }}.colors.svelte-1oy4poo span.svelte-1oy4poo{margin-left:0.5rem\n}.colors.svelte-1oy4poo svg.svelte-1oy4poo{display:block\n}input[type='radio'].svelte-1oy4poo.svelte-1oy4poo{position:absolute;display:none;height:0px;width:0px;opacity:0\n}input[type='radio'].svelte-1oy4poo:checked~label.svelte-1oy4poo{outline-style:solid;outline-width:2px;outline-color:#eab308\n}label.svelte-1oy4poo.svelte-1oy4poo{display:flex;cursor:pointer;white-space:nowrap;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:200ms;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)\n}label.svelte-1oy4poo.svelte-1oy4poo:hover{outline-style:solid\n}.brush.svelte-1oy4poo.svelte-1oy4poo{display:flex\n}",
+ map: null
+};
+const STARTCOLORID = 6;
+const BrushSelector = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+ let $selectedBrush, $$unsubscribe_selectedBrush;
+ $$unsubscribe_selectedBrush = subscribe(selectedBrush, (value) => $selectedBrush = value);
+ const { color, label } = COLOR_LIST[STARTCOLORID];
+ let brushColor = `rgb(${color.join(",")})`;
+ let brushSize = 40;
+ set_store_value(selectedBrush, $selectedBrush = {
+ color: brushColor,
+ size: brushSize,
+ label
+ }, $selectedBrush);
+ $$result.css.add(css$4);
+ $$unsubscribe_selectedBrush();
+ return ``;
+});
+var ParamsSelector_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => "@media(min-width: 530px){}select.svelte-uoay71.svelte-uoay71,button.svelte-uoay71.svelte-uoay71,input.svelte-uoay71.svelte-uoay71{border-radius:0.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:0.25rem;font-size:0.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))\n}select.svelte-uoay71.svelte-uoay71:focus,button.svelte-uoay71.svelte-uoay71:focus,input.svelte-uoay71.svelte-uoay71:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n}select.svelte-uoay71.svelte-uoay71:disabled,button.svelte-uoay71.svelte-uoay71:disabled,input.svelte-uoay71.svelte-uoay71:disabled{opacity:0.5\n}@media(prefers-color-scheme: dark){select.svelte-uoay71.svelte-uoay71,button.svelte-uoay71.svelte-uoay71,input.svelte-uoay71.svelte-uoay71{--tw-border-opacity:1;border-color:rgb(75 85 99 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(55 65 81 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))\n }select.svelte-uoay71.svelte-uoay71::-moz-placeholder,button.svelte-uoay71.svelte-uoay71::-moz-placeholder,input.svelte-uoay71.svelte-uoay71::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))\n }select.svelte-uoay71.svelte-uoay71::-moz-placeholder, button.svelte-uoay71.svelte-uoay71::-moz-placeholder, input.svelte-uoay71.svelte-uoay71::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))\n }select.svelte-uoay71.svelte-uoay71::placeholder,button.svelte-uoay71.svelte-uoay71::placeholder,input.svelte-uoay71.svelte-uoay71::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))\n }select.svelte-uoay71.svelte-uoay71:focus,button.svelte-uoay71.svelte-uoay71:focus,input.svelte-uoay71.svelte-uoay71:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n }}input.svelte-uoay71:disabled+label.svelte-uoay71{opacity:0.5\n}input.svelte-uoay71.svelte-uoay71{padding-left:0.75rem\n}")();
+const css$3 = {
+ code: "@media(min-width: 530px){}select.svelte-uoay71.svelte-uoay71,button.svelte-uoay71.svelte-uoay71,input.svelte-uoay71.svelte-uoay71{border-radius:0.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:0.25rem;font-size:0.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))\n}select.svelte-uoay71.svelte-uoay71:focus,button.svelte-uoay71.svelte-uoay71:focus,input.svelte-uoay71.svelte-uoay71:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n}select.svelte-uoay71.svelte-uoay71:disabled,button.svelte-uoay71.svelte-uoay71:disabled,input.svelte-uoay71.svelte-uoay71:disabled{opacity:0.5\n}@media(prefers-color-scheme: dark){select.svelte-uoay71.svelte-uoay71,button.svelte-uoay71.svelte-uoay71,input.svelte-uoay71.svelte-uoay71{--tw-border-opacity:1;border-color:rgb(75 85 99 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(55 65 81 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))\n }select.svelte-uoay71.svelte-uoay71::-moz-placeholder,button.svelte-uoay71.svelte-uoay71::-moz-placeholder,input.svelte-uoay71.svelte-uoay71::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))\n }select.svelte-uoay71.svelte-uoay71::placeholder,button.svelte-uoay71.svelte-uoay71::placeholder,input.svelte-uoay71.svelte-uoay71::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))\n }select.svelte-uoay71.svelte-uoay71:focus,button.svelte-uoay71.svelte-uoay71:focus,input.svelte-uoay71.svelte-uoay71:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n }}input.svelte-uoay71:disabled+label.svelte-uoay71{opacity:0.5\n}input.svelte-uoay71.svelte-uoay71{padding-left:0.75rem\n}",
+ map: null
+};
+const ParamsSelector = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+ let $selectedParams, $$unsubscribe_selectedParams;
+ let $generateMap, $$unsubscribe_generateMap;
+ $$unsubscribe_selectedParams = subscribe(selectedParams, (value) => $selectedParams = value);
+ $$unsubscribe_generateMap = subscribe(generateMap, (value) => $generateMap = value);
+ let form;
+ let seed = $selectedParams.seed;
+ let sampleSteps = $selectedParams.steps;
+ let prompt = $selectedParams.prompt;
+ $$result.css.add(css$3);
+ $$unsubscribe_selectedParams();
+ $$unsubscribe_generateMap();
+ return ``;
+});
+const Undo = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+ let { classNames = "" } = $$props;
+ if ($$props.classNames === void 0 && $$bindings.classNames && classNames !== void 0)
+ $$bindings.classNames(classNames);
+ return ``;
+});
+var DrawingCanvas_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => ".canvas.svelte-pr47cz{z-index:0;aspect-ratio:512/512;width:100%;max-width:100%;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))\n}@media(prefers-color-scheme: dark){.canvas.svelte-pr47cz{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity))\n }}.brush.svelte-pr47cz{pointer-events:none;position:absolute;z-index:10;--tw-translate-x:-50%;--tw-translate-y:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))\n}.label.svelte-pr47cz{pointer-events:none;position:absolute;top:0px;left:0px;z-index:20;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-left:0.5rem;padding-right:0.5rem;font-size:1rem;line-height:1.5rem;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity));color:white;font-weight:bolder;-webkit-text-stroke:1px black;-webkit-text-fill-color:white\n}")();
+const css$2 = {
+ code: ".canvas.svelte-pr47cz{z-index:0;aspect-ratio:512/512;width:100%;max-width:100%;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))\n}@media(prefers-color-scheme: dark){.canvas.svelte-pr47cz{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity))\n }}.brush.svelte-pr47cz{pointer-events:none;position:absolute;z-index:10;--tw-translate-x:-50%;--tw-translate-y:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))\n}.label.svelte-pr47cz{pointer-events:none;position:absolute;top:0px;left:0px;z-index:20;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-left:0.5rem;padding-right:0.5rem;font-size:1rem;line-height:1.5rem;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity));color:white;font-weight:bolder;-webkit-text-stroke:1px black;-webkit-text-fill-color:white\n}",
+ map: null
+};
+function drawImage(ctx, img) {
+ ctx.drawImage(img, 0, 0, ctx.canvas.width, ctx.canvas.height);
+}
+const DrawingCanvas = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+ let $drawingLayers, $$unsubscribe_drawingLayers;
+ let $selectedImage, $$unsubscribe_selectedImage;
+ let $selectedBrush, $$unsubscribe_selectedBrush;
+ let $$unsubscribe_currentCanvas;
+ $$unsubscribe_drawingLayers = subscribe(drawingLayers, (value) => $drawingLayers = value);
+ $$unsubscribe_selectedImage = subscribe(selectedImage, (value) => $selectedImage = value);
+ $$unsubscribe_selectedBrush = subscribe(selectedBrush, (value) => $selectedBrush = value);
+ $$unsubscribe_currentCanvas = subscribe(currentCanvas, (value) => value);
+ let canvas;
+ let brush;
+ let ctx;
+ $$result.css.add(css$2);
+ {
+ {
+ if ($selectedImage) {
+ drawImage(ctx, $selectedImage);
+ set_store_value(drawingLayers, $drawingLayers = /* @__PURE__ */ new Map(), $drawingLayers);
+ }
+ }
+ }
+ $$unsubscribe_drawingLayers();
+ $$unsubscribe_selectedImage();
+ $$unsubscribe_selectedBrush();
+ $$unsubscribe_currentCanvas();
+ return `
+
+ ${escape($selectedBrush == null ? void 0 : $selectedBrush.label)}
+
+
`;
+});
+var ResultCanvas_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => ".image.svelte-1t0h0rs{z-index:0;box-sizing:border-box;aspect-ratio:512/512;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))\n}@media(prefers-color-scheme: dark){.image.svelte-1t0h0rs{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity))\n }}.loading.svelte-1t0h0rs{position:absolute;top:0px;left:0px;right:0px;bottom:0px;display:flex;flex-direction:column;align-items:center;justify-content:center\n}")();
+const css$1 = {
+ code: ".image.svelte-1t0h0rs{z-index:0;box-sizing:border-box;aspect-ratio:512/512;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))\n}@media(prefers-color-scheme: dark){.image.svelte-1t0h0rs{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity))\n }}.loading.svelte-1t0h0rs{position:absolute;top:0px;left:0px;right:0px;bottom:0px;display:flex;flex-direction:column;align-items:center;justify-content:center\n}",
+ map: null
+};
+let predictStatus = "";
+async function saveImage(base64Image) {
+ return new Promise((resolve, reject) => {
+ try {
+ const a = document.createElement("a");
+ a.download = `sucess-${Date.now()}.png`;
+ a.target = "_self";
+ a.onclick = async (e) => {
+ if (a.href) {
+ URL.revokeObjectURL(a.href);
+ }
+ a.href = base64Image;
+ };
+ requestAnimationFrame(() => {
+ console.log("Downloading image.");
+ a.click();
+ resolve(null);
+ });
+ } catch (err) {
+ reject();
+ }
+ });
+}
+async function predict(base64Image, { prompt, steps, seed }) {
+ const response = await fetch("/predict", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({
+ data: [base64Image, prompt, steps, seed.toString()]
+ })
+ });
+ if (!response.ok) {
+ throw new Error("Prediction request failed.");
+ }
+ const result = await response.text();
+ return result;
+}
+const ResultCanvas = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+ let $saveResult, $$unsubscribe_saveResult;
+ let $resultImage, $$unsubscribe_resultImage;
+ let $generateMap, $$unsubscribe_generateMap;
+ let $selectedParams, $$unsubscribe_selectedParams;
+ let $currentCanvas, $$unsubscribe_currentCanvas;
+ $$unsubscribe_saveResult = subscribe(saveResult, (value) => $saveResult = value);
+ $$unsubscribe_resultImage = subscribe(resultImage, (value) => $resultImage = value);
+ $$unsubscribe_generateMap = subscribe(generateMap, (value) => $generateMap = value);
+ $$unsubscribe_selectedParams = subscribe(selectedParams, (value) => $selectedParams = value);
+ $$unsubscribe_currentCanvas = subscribe(currentCanvas, (value) => $currentCanvas = value);
+ $$result.css.add(css$1);
+ {
+ (async () => {
+ if ($generateMap) {
+ const results = await predict($currentCanvas.toDataURL(), $selectedParams);
+ set_store_value(resultImage, $resultImage = results, $resultImage);
+ set_store_value(generateMap, $generateMap = false, $generateMap);
+ }
+ })();
+ }
+ {
+ (async () => {
+ if ($saveResult) {
+ await saveImage($resultImage);
+ set_store_value(saveResult, $saveResult = false, $saveResult);
+ }
+ })();
+ }
+ $$unsubscribe_saveResult();
+ $$unsubscribe_resultImage();
+ $$unsubscribe_generateMap();
+ $$unsubscribe_selectedParams();
+ $$unsubscribe_currentCanvas();
+ return `${$resultImage ? `
` : ``}
+ ${$generateMap ? `
+
${escape(predictStatus)}` : ``}
+
+`;
+});
+var index_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => ".drawings.svelte-237ry5{display:grid;grid-template-columns:2fr 1.5fr;place-items:center\n}@media(min-width: 530px){.drawings.svelte-237ry5{grid-template-columns:repeat(2, minmax(0, 1fr))\n }}button.svelte-237ry5{border-radius:0.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:0.25rem;font-size:0.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))\n}button.svelte-237ry5:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n}button.svelte-237ry5:disabled{opacity:0.5\n}@media(prefers-color-scheme: dark){button.svelte-237ry5{--tw-border-opacity:1;border-color:rgb(75 85 99 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(55 65 81 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))\n }button.svelte-237ry5::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))\n }button.svelte-237ry5::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))\n }button.svelte-237ry5:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n }}")();
+const css = {
+ code: ".drawings.svelte-237ry5{display:grid;grid-template-columns:2fr 1.5fr;place-items:center\n}@media(min-width: 530px){.drawings.svelte-237ry5{grid-template-columns:repeat(2, minmax(0, 1fr))\n }}button.svelte-237ry5{border-radius:0.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:0.25rem;font-size:0.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))\n}button.svelte-237ry5:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n}button.svelte-237ry5:disabled{opacity:0.5\n}@media(prefers-color-scheme: dark){button.svelte-237ry5{--tw-border-opacity:1;border-color:rgb(75 85 99 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(55 65 81 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))\n }button.svelte-237ry5::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))\n }button.svelte-237ry5::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))\n }button.svelte-237ry5:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n }}",
+ map: null
+};
+const Routes = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+ let $generateMap, $$unsubscribe_generateMap;
+ let $saveResult, $$unsubscribe_saveResult;
+ let $resultImage, $$unsubscribe_resultImage;
+ $$unsubscribe_generateMap = subscribe(generateMap, (value) => $generateMap = value);
+ $$unsubscribe_saveResult = subscribe(saveResult, (value) => $saveResult = value);
+ $$unsubscribe_resultImage = subscribe(resultImage, (value) => $resultImage = value);
+ $$result.css.add(css);
+ $$unsubscribe_generateMap();
+ $$unsubscribe_saveResult();
+ $$unsubscribe_resultImage();
+ return `Drawing to Map
+ ${validate_component(BrushSelector, "BrushSelector").$$render($$result, {}, {}, {})}
+
${validate_component(DrawingCanvas, "DrawingCanvas").$$render($$result, {}, {}, {})}
+ ${validate_component(ResultCanvas, "ResultCanvas").$$render($$result, {}, {}, {})}
+
+
+
+
+
+ ${validate_component(TemplateGallery, "TemplateGallery").$$render($$result, {}, {}, {})}
+
+ ${validate_component(ParamsSelector, "ParamSelector").$$render($$result, {}, {}, {})}
+
`;
+});
+export { Routes as default };
diff --git a/frontend/.svelte-kit/output/server/index.js b/frontend/.svelte-kit/output/server/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..93f1d12c42ac9de90bbb912e59b2ac3f7d168627
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/index.js
@@ -0,0 +1,2291 @@
+import { c as create_ssr_component, s as setContext, v as validate_component, m as missing_component } from "./chunks/index-445fd704.js";
+import { s as set_paths, b as base, a as assets } from "./chunks/paths-396f020f.js";
+function afterUpdate() {
+}
+const Root = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+ let { stores } = $$props;
+ let { page } = $$props;
+ let { components } = $$props;
+ let { props_0 = null } = $$props;
+ let { props_1 = null } = $$props;
+ let { props_2 = null } = $$props;
+ setContext("__svelte__", stores);
+ afterUpdate(stores.page.notify);
+ if ($$props.stores === void 0 && $$bindings.stores && stores !== void 0)
+ $$bindings.stores(stores);
+ if ($$props.page === void 0 && $$bindings.page && page !== void 0)
+ $$bindings.page(page);
+ if ($$props.components === void 0 && $$bindings.components && components !== void 0)
+ $$bindings.components(components);
+ if ($$props.props_0 === void 0 && $$bindings.props_0 && props_0 !== void 0)
+ $$bindings.props_0(props_0);
+ if ($$props.props_1 === void 0 && $$bindings.props_1 && props_1 !== void 0)
+ $$bindings.props_1(props_1);
+ if ($$props.props_2 === void 0 && $$bindings.props_2 && props_2 !== void 0)
+ $$bindings.props_2(props_2);
+ {
+ stores.page.set(page);
+ }
+ return `
+
+
+${components[1] ? `${validate_component(components[0] || missing_component, "svelte:component").$$render($$result, Object.assign(props_0 || {}), {}, {
+ default: () => {
+ return `${components[2] ? `${validate_component(components[1] || missing_component, "svelte:component").$$render($$result, Object.assign(props_1 || {}), {}, {
+ default: () => {
+ return `${validate_component(components[2] || missing_component, "svelte:component").$$render($$result, Object.assign(props_2 || {}), {}, {})}`;
+ }
+ })}` : `${validate_component(components[1] || missing_component, "svelte:component").$$render($$result, Object.assign(props_1 || {}), {}, {})}`}`;
+ }
+ })}` : `${validate_component(components[0] || missing_component, "svelte:component").$$render($$result, Object.assign(props_0 || {}), {}, {})}`}
+
+${``}`;
+});
+function to_headers(object) {
+ const headers = new Headers();
+ if (object) {
+ for (const key2 in object) {
+ const value = object[key2];
+ if (!value)
+ continue;
+ if (Array.isArray(value)) {
+ value.forEach((value2) => {
+ headers.append(key2, value2);
+ });
+ } else {
+ headers.set(key2, value);
+ }
+ }
+ }
+ return headers;
+}
+function hash(value) {
+ let hash2 = 5381;
+ let i = value.length;
+ if (typeof value === "string") {
+ while (i)
+ hash2 = hash2 * 33 ^ value.charCodeAt(--i);
+ } else {
+ while (i)
+ hash2 = hash2 * 33 ^ value[--i];
+ }
+ return (hash2 >>> 0).toString(36);
+}
+function lowercase_keys(obj) {
+ const clone = {};
+ for (const key2 in obj) {
+ clone[key2.toLowerCase()] = obj[key2];
+ }
+ return clone;
+}
+function decode_params(params) {
+ for (const key2 in params) {
+ params[key2] = params[key2].replace(/%23/g, "#").replace(/%3[Bb]/g, ";").replace(/%2[Cc]/g, ",").replace(/%2[Ff]/g, "/").replace(/%3[Ff]/g, "?").replace(/%3[Aa]/g, ":").replace(/%40/g, "@").replace(/%26/g, "&").replace(/%3[Dd]/g, "=").replace(/%2[Bb]/g, "+").replace(/%24/g, "$");
+ }
+ return params;
+}
+function is_pojo(body) {
+ if (typeof body !== "object")
+ return false;
+ if (body) {
+ if (body instanceof Uint8Array)
+ return false;
+ if (body instanceof ReadableStream)
+ return false;
+ if (body._readableState && typeof body.pipe === "function") {
+ throw new Error("Node streams are no longer supported \u2014 use a ReadableStream instead");
+ }
+ }
+ return true;
+}
+function normalize_request_method(event) {
+ const method = event.request.method.toLowerCase();
+ return method === "delete" ? "del" : method;
+}
+function error(body) {
+ return new Response(body, {
+ status: 500
+ });
+}
+function is_string(s2) {
+ return typeof s2 === "string" || s2 instanceof String;
+}
+const text_types = /* @__PURE__ */ new Set([
+ "application/xml",
+ "application/json",
+ "application/x-www-form-urlencoded",
+ "multipart/form-data"
+]);
+const bodyless_status_codes = /* @__PURE__ */ new Set([101, 204, 205, 304]);
+function is_text(content_type) {
+ if (!content_type)
+ return true;
+ const type = content_type.split(";")[0].toLowerCase();
+ return type.startsWith("text/") || type.endsWith("+xml") || text_types.has(type);
+}
+async function render_endpoint(event, mod) {
+ const method = normalize_request_method(event);
+ let handler = mod[method];
+ if (!handler && method === "head") {
+ handler = mod.get;
+ }
+ if (!handler) {
+ const allowed = [];
+ for (const method2 in ["get", "post", "put", "patch"]) {
+ if (mod[method2])
+ allowed.push(method2.toUpperCase());
+ }
+ if (mod.del)
+ allowed.push("DELETE");
+ if (mod.get || mod.head)
+ allowed.push("HEAD");
+ return event.request.headers.get("x-sveltekit-load") ? new Response(void 0, {
+ status: 204
+ }) : new Response(`${event.request.method} method not allowed`, {
+ status: 405,
+ headers: {
+ allow: allowed.join(", ")
+ }
+ });
+ }
+ const response = await handler(event);
+ const preface = `Invalid response from route ${event.url.pathname}`;
+ if (typeof response !== "object") {
+ return error(`${preface}: expected an object, got ${typeof response}`);
+ }
+ if (response.fallthrough) {
+ throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");
+ }
+ const { status = 200, body = {} } = response;
+ const headers = response.headers instanceof Headers ? new Headers(response.headers) : to_headers(response.headers);
+ const type = headers.get("content-type");
+ if (!is_text(type) && !(body instanceof Uint8Array || is_string(body))) {
+ return error(`${preface}: body must be an instance of string or Uint8Array if content-type is not a supported textual content-type`);
+ }
+ let normalized_body;
+ if (is_pojo(body) && (!type || type.startsWith("application/json"))) {
+ headers.set("content-type", "application/json; charset=utf-8");
+ normalized_body = JSON.stringify(body);
+ } else {
+ normalized_body = body;
+ }
+ if ((typeof normalized_body === "string" || normalized_body instanceof Uint8Array) && !headers.has("etag")) {
+ const cache_control = headers.get("cache-control");
+ if (!cache_control || !/(no-store|immutable)/.test(cache_control)) {
+ headers.set("etag", `"${hash(normalized_body)}"`);
+ }
+ }
+ return new Response(method !== "head" && !bodyless_status_codes.has(status) ? normalized_body : void 0, {
+ status,
+ headers
+ });
+}
+var chars$1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$";
+var unsafeChars = /[<>\b\f\n\r\t\0\u2028\u2029]/g;
+var reserved = /^(?:do|if|in|for|int|let|new|try|var|byte|case|char|else|enum|goto|long|this|void|with|await|break|catch|class|const|final|float|short|super|throw|while|yield|delete|double|export|import|native|return|switch|throws|typeof|boolean|default|extends|finally|package|private|abstract|continue|debugger|function|volatile|interface|protected|transient|implements|instanceof|synchronized)$/;
+var escaped = {
+ "<": "\\u003C",
+ ">": "\\u003E",
+ "/": "\\u002F",
+ "\\": "\\\\",
+ "\b": "\\b",
+ "\f": "\\f",
+ "\n": "\\n",
+ "\r": "\\r",
+ " ": "\\t",
+ "\0": "\\0",
+ "\u2028": "\\u2028",
+ "\u2029": "\\u2029"
+};
+var objectProtoOwnPropertyNames = Object.getOwnPropertyNames(Object.prototype).sort().join("\0");
+function devalue(value) {
+ var counts = /* @__PURE__ */ new Map();
+ function walk(thing) {
+ if (typeof thing === "function") {
+ throw new Error("Cannot stringify a function");
+ }
+ if (counts.has(thing)) {
+ counts.set(thing, counts.get(thing) + 1);
+ return;
+ }
+ counts.set(thing, 1);
+ if (!isPrimitive(thing)) {
+ var type = getType(thing);
+ switch (type) {
+ case "Number":
+ case "String":
+ case "Boolean":
+ case "Date":
+ case "RegExp":
+ return;
+ case "Array":
+ thing.forEach(walk);
+ break;
+ case "Set":
+ case "Map":
+ Array.from(thing).forEach(walk);
+ break;
+ default:
+ var proto = Object.getPrototypeOf(thing);
+ if (proto !== Object.prototype && proto !== null && Object.getOwnPropertyNames(proto).sort().join("\0") !== objectProtoOwnPropertyNames) {
+ throw new Error("Cannot stringify arbitrary non-POJOs");
+ }
+ if (Object.getOwnPropertySymbols(thing).length > 0) {
+ throw new Error("Cannot stringify POJOs with symbolic keys");
+ }
+ Object.keys(thing).forEach(function(key2) {
+ return walk(thing[key2]);
+ });
+ }
+ }
+ }
+ walk(value);
+ var names = /* @__PURE__ */ new Map();
+ Array.from(counts).filter(function(entry) {
+ return entry[1] > 1;
+ }).sort(function(a, b) {
+ return b[1] - a[1];
+ }).forEach(function(entry, i) {
+ names.set(entry[0], getName(i));
+ });
+ function stringify(thing) {
+ if (names.has(thing)) {
+ return names.get(thing);
+ }
+ if (isPrimitive(thing)) {
+ return stringifyPrimitive(thing);
+ }
+ var type = getType(thing);
+ switch (type) {
+ case "Number":
+ case "String":
+ case "Boolean":
+ return "Object(" + stringify(thing.valueOf()) + ")";
+ case "RegExp":
+ return "new RegExp(" + stringifyString(thing.source) + ', "' + thing.flags + '")';
+ case "Date":
+ return "new Date(" + thing.getTime() + ")";
+ case "Array":
+ var members = thing.map(function(v, i) {
+ return i in thing ? stringify(v) : "";
+ });
+ var tail = thing.length === 0 || thing.length - 1 in thing ? "" : ",";
+ return "[" + members.join(",") + tail + "]";
+ case "Set":
+ case "Map":
+ return "new " + type + "([" + Array.from(thing).map(stringify).join(",") + "])";
+ default:
+ var obj = "{" + Object.keys(thing).map(function(key2) {
+ return safeKey(key2) + ":" + stringify(thing[key2]);
+ }).join(",") + "}";
+ var proto = Object.getPrototypeOf(thing);
+ if (proto === null) {
+ return Object.keys(thing).length > 0 ? "Object.assign(Object.create(null)," + obj + ")" : "Object.create(null)";
+ }
+ return obj;
+ }
+ }
+ var str = stringify(value);
+ if (names.size) {
+ var params_1 = [];
+ var statements_1 = [];
+ var values_1 = [];
+ names.forEach(function(name, thing) {
+ params_1.push(name);
+ if (isPrimitive(thing)) {
+ values_1.push(stringifyPrimitive(thing));
+ return;
+ }
+ var type = getType(thing);
+ switch (type) {
+ case "Number":
+ case "String":
+ case "Boolean":
+ values_1.push("Object(" + stringify(thing.valueOf()) + ")");
+ break;
+ case "RegExp":
+ values_1.push(thing.toString());
+ break;
+ case "Date":
+ values_1.push("new Date(" + thing.getTime() + ")");
+ break;
+ case "Array":
+ values_1.push("Array(" + thing.length + ")");
+ thing.forEach(function(v, i) {
+ statements_1.push(name + "[" + i + "]=" + stringify(v));
+ });
+ break;
+ case "Set":
+ values_1.push("new Set");
+ statements_1.push(name + "." + Array.from(thing).map(function(v) {
+ return "add(" + stringify(v) + ")";
+ }).join("."));
+ break;
+ case "Map":
+ values_1.push("new Map");
+ statements_1.push(name + "." + Array.from(thing).map(function(_a) {
+ var k = _a[0], v = _a[1];
+ return "set(" + stringify(k) + ", " + stringify(v) + ")";
+ }).join("."));
+ break;
+ default:
+ values_1.push(Object.getPrototypeOf(thing) === null ? "Object.create(null)" : "{}");
+ Object.keys(thing).forEach(function(key2) {
+ statements_1.push("" + name + safeProp(key2) + "=" + stringify(thing[key2]));
+ });
+ }
+ });
+ statements_1.push("return " + str);
+ return "(function(" + params_1.join(",") + "){" + statements_1.join(";") + "}(" + values_1.join(",") + "))";
+ } else {
+ return str;
+ }
+}
+function getName(num) {
+ var name = "";
+ do {
+ name = chars$1[num % chars$1.length] + name;
+ num = ~~(num / chars$1.length) - 1;
+ } while (num >= 0);
+ return reserved.test(name) ? name + "_" : name;
+}
+function isPrimitive(thing) {
+ return Object(thing) !== thing;
+}
+function stringifyPrimitive(thing) {
+ if (typeof thing === "string")
+ return stringifyString(thing);
+ if (thing === void 0)
+ return "void 0";
+ if (thing === 0 && 1 / thing < 0)
+ return "-0";
+ var str = String(thing);
+ if (typeof thing === "number")
+ return str.replace(/^(-)?0\./, "$1.");
+ return str;
+}
+function getType(thing) {
+ return Object.prototype.toString.call(thing).slice(8, -1);
+}
+function escapeUnsafeChar(c) {
+ return escaped[c] || c;
+}
+function escapeUnsafeChars(str) {
+ return str.replace(unsafeChars, escapeUnsafeChar);
+}
+function safeKey(key2) {
+ return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key2) ? key2 : escapeUnsafeChars(JSON.stringify(key2));
+}
+function safeProp(key2) {
+ return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key2) ? "." + key2 : "[" + escapeUnsafeChars(JSON.stringify(key2)) + "]";
+}
+function stringifyString(str) {
+ var result = '"';
+ for (var i = 0; i < str.length; i += 1) {
+ var char = str.charAt(i);
+ var code = char.charCodeAt(0);
+ if (char === '"') {
+ result += '\\"';
+ } else if (char in escaped) {
+ result += escaped[char];
+ } else if (code >= 55296 && code <= 57343) {
+ var next = str.charCodeAt(i + 1);
+ if (code <= 56319 && (next >= 56320 && next <= 57343)) {
+ result += char + str[++i];
+ } else {
+ result += "\\u" + code.toString(16).toUpperCase();
+ }
+ } else {
+ result += char;
+ }
+ }
+ result += '"';
+ return result;
+}
+function noop() {
+}
+function safe_not_equal(a, b) {
+ return a != a ? b == b : a !== b || (a && typeof a === "object" || typeof a === "function");
+}
+Promise.resolve();
+const subscriber_queue = [];
+function readable(value, start) {
+ return {
+ subscribe: writable(value, start).subscribe
+ };
+}
+function writable(value, start = noop) {
+ let stop;
+ const subscribers = /* @__PURE__ */ new Set();
+ function set(new_value) {
+ if (safe_not_equal(value, new_value)) {
+ value = new_value;
+ if (stop) {
+ const run_queue = !subscriber_queue.length;
+ for (const subscriber of subscribers) {
+ subscriber[1]();
+ subscriber_queue.push(subscriber, value);
+ }
+ if (run_queue) {
+ for (let i = 0; i < subscriber_queue.length; i += 2) {
+ subscriber_queue[i][0](subscriber_queue[i + 1]);
+ }
+ subscriber_queue.length = 0;
+ }
+ }
+ }
+ }
+ function update(fn) {
+ set(fn(value));
+ }
+ function subscribe(run, invalidate = noop) {
+ const subscriber = [run, invalidate];
+ subscribers.add(subscriber);
+ if (subscribers.size === 1) {
+ stop = start(set) || noop;
+ }
+ run(value);
+ return () => {
+ subscribers.delete(subscriber);
+ if (subscribers.size === 0) {
+ stop();
+ stop = null;
+ }
+ };
+ }
+ return { set, update, subscribe };
+}
+function coalesce_to_error(err) {
+ return err instanceof Error || err && err.name && err.message ? err : new Error(JSON.stringify(err));
+}
+const render_json_payload_script_dict = {
+ "<": "\\u003C",
+ "\u2028": "\\u2028",
+ "\u2029": "\\u2029"
+};
+const render_json_payload_script_regex = new RegExp(`[${Object.keys(render_json_payload_script_dict).join("")}]`, "g");
+function render_json_payload_script(attrs, payload) {
+ const safe_payload = JSON.stringify(payload).replace(render_json_payload_script_regex, (match) => render_json_payload_script_dict[match]);
+ let safe_attrs = "";
+ for (const [key2, value] of Object.entries(attrs)) {
+ if (value === void 0)
+ continue;
+ safe_attrs += ` sveltekit:data-${key2}=${escape_html_attr(value)}`;
+ }
+ return `
+
+
+
+{status}
+
+{error.message}
+
+
+
+{#if error.frame}
+ {error.frame}
+{/if}
+{#if error.stack}
+ {error.stack}
+{/if}
diff --git a/frontend/.svelte-kit/runtime/components/layout.svelte b/frontend/.svelte-kit/runtime/components/layout.svelte
new file mode 100755
index 0000000000000000000000000000000000000000..49aeb95a1db9c1836aafa53b43aaf6c5cd26e220
--- /dev/null
+++ b/frontend/.svelte-kit/runtime/components/layout.svelte
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/.svelte-kit/runtime/env.js b/frontend/.svelte-kit/runtime/env.js
new file mode 100755
index 0000000000000000000000000000000000000000..bbc86ed21df51cbae5903093394adf4f89a53c25
--- /dev/null
+++ b/frontend/.svelte-kit/runtime/env.js
@@ -0,0 +1,8 @@
+let prerendering = false;
+
+/** @param {boolean} value */
+function set_prerendering(value) {
+ prerendering = value;
+}
+
+export { prerendering, set_prerendering };
diff --git a/frontend/.svelte-kit/runtime/paths.js b/frontend/.svelte-kit/runtime/paths.js
new file mode 100755
index 0000000000000000000000000000000000000000..64963b5b155024e17829e9126f9649572a957b0d
--- /dev/null
+++ b/frontend/.svelte-kit/runtime/paths.js
@@ -0,0 +1,13 @@
+/** @type {string} */
+let base = '';
+
+/** @type {string} */
+let assets = '';
+
+/** @param {{ base: string, assets: string }} paths */
+function set_paths(paths) {
+ base = paths.base;
+ assets = paths.assets || base;
+}
+
+export { assets, base, set_paths };
diff --git a/frontend/.svelte-kit/runtime/server/index.js b/frontend/.svelte-kit/runtime/server/index.js
new file mode 100755
index 0000000000000000000000000000000000000000..2cd8a1d825ea2737f3b34c70e5d1ffee1b725d23
--- /dev/null
+++ b/frontend/.svelte-kit/runtime/server/index.js
@@ -0,0 +1,3395 @@
+/** @param {Partial | undefined} object */
+function to_headers(object) {
+ const headers = new Headers();
+
+ if (object) {
+ for (const key in object) {
+ const value = object[key];
+ if (!value) continue;
+
+ if (Array.isArray(value)) {
+ value.forEach((value) => {
+ headers.append(key, /** @type {string} */ (value));
+ });
+ } else {
+ headers.set(key, /** @type {string} */ (value));
+ }
+ }
+ }
+
+ return headers;
+}
+
+/**
+ * Hash using djb2
+ * @param {import('types').StrictBody} value
+ */
+function hash(value) {
+ let hash = 5381;
+ let i = value.length;
+
+ if (typeof value === 'string') {
+ while (i) hash = (hash * 33) ^ value.charCodeAt(--i);
+ } else {
+ while (i) hash = (hash * 33) ^ value[--i];
+ }
+
+ return (hash >>> 0).toString(36);
+}
+
+/** @param {Record} obj */
+function lowercase_keys(obj) {
+ /** @type {Record} */
+ const clone = {};
+
+ for (const key in obj) {
+ clone[key.toLowerCase()] = obj[key];
+ }
+
+ return clone;
+}
+
+/** @param {Record} params */
+function decode_params(params) {
+ for (const key in params) {
+ // input has already been decoded by decodeURI
+ // now handle the rest that decodeURIComponent would do
+ params[key] = params[key]
+ .replace(/%23/g, '#')
+ .replace(/%3[Bb]/g, ';')
+ .replace(/%2[Cc]/g, ',')
+ .replace(/%2[Ff]/g, '/')
+ .replace(/%3[Ff]/g, '?')
+ .replace(/%3[Aa]/g, ':')
+ .replace(/%40/g, '@')
+ .replace(/%26/g, '&')
+ .replace(/%3[Dd]/g, '=')
+ .replace(/%2[Bb]/g, '+')
+ .replace(/%24/g, '$');
+ }
+
+ return params;
+}
+
+/** @param {any} body */
+function is_pojo(body) {
+ if (typeof body !== 'object') return false;
+
+ if (body) {
+ if (body instanceof Uint8Array) return false;
+ if (body instanceof ReadableStream) return false;
+
+ // if body is a node Readable, throw an error
+ // TODO remove this for 1.0
+ if (body._readableState && typeof body.pipe === 'function') {
+ throw new Error('Node streams are no longer supported — use a ReadableStream instead');
+ }
+ }
+
+ return true;
+}
+
+/** @param {import('types').RequestEvent} event */
+function normalize_request_method(event) {
+ const method = event.request.method.toLowerCase();
+ return method === 'delete' ? 'del' : method; // 'delete' is a reserved word
+}
+
+/** @param {string} body */
+function error(body) {
+ return new Response(body, {
+ status: 500
+ });
+}
+
+/** @param {unknown} s */
+function is_string(s) {
+ return typeof s === 'string' || s instanceof String;
+}
+
+const text_types = new Set([
+ 'application/xml',
+ 'application/json',
+ 'application/x-www-form-urlencoded',
+ 'multipart/form-data'
+]);
+
+const bodyless_status_codes = new Set([101, 204, 205, 304]);
+
+/**
+ * Decides how the body should be parsed based on its mime type
+ *
+ * @param {string | undefined | null} content_type The `content-type` header of a request/response.
+ * @returns {boolean}
+ */
+function is_text(content_type) {
+ if (!content_type) return true; // defaults to json
+ const type = content_type.split(';')[0].toLowerCase(); // get the mime type
+
+ return type.startsWith('text/') || type.endsWith('+xml') || text_types.has(type);
+}
+
+/**
+ * @param {import('types').RequestEvent} event
+ * @param {{ [method: string]: import('types').RequestHandler }} mod
+ * @returns {Promise}
+ */
+async function render_endpoint(event, mod) {
+ const method = normalize_request_method(event);
+
+ /** @type {import('types').RequestHandler} */
+ let handler = mod[method];
+
+ if (!handler && method === 'head') {
+ handler = mod.get;
+ }
+
+ if (!handler) {
+ const allowed = [];
+
+ for (const method in ['get', 'post', 'put', 'patch']) {
+ if (mod[method]) allowed.push(method.toUpperCase());
+ }
+
+ if (mod.del) allowed.push('DELETE');
+ if (mod.get || mod.head) allowed.push('HEAD');
+
+ return event.request.headers.get('x-sveltekit-load')
+ ? // TODO would be nice to avoid these requests altogether,
+ // by noting whether or not page endpoints export `get`
+ new Response(undefined, {
+ status: 204
+ })
+ : new Response(`${event.request.method} method not allowed`, {
+ status: 405,
+ headers: {
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405
+ // "The server must generate an Allow header field in a 405 status code response"
+ allow: allowed.join(', ')
+ }
+ });
+ }
+
+ const response = await handler(event);
+ const preface = `Invalid response from route ${event.url.pathname}`;
+
+ if (typeof response !== 'object') {
+ return error(`${preface}: expected an object, got ${typeof response}`);
+ }
+
+ // TODO remove for 1.0
+ // @ts-expect-error
+ if (response.fallthrough) {
+ throw new Error(
+ 'fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching'
+ );
+ }
+
+ const { status = 200, body = {} } = response;
+ const headers =
+ response.headers instanceof Headers
+ ? new Headers(response.headers)
+ : to_headers(response.headers);
+
+ const type = headers.get('content-type');
+
+ if (!is_text(type) && !(body instanceof Uint8Array || is_string(body))) {
+ return error(
+ `${preface}: body must be an instance of string or Uint8Array if content-type is not a supported textual content-type`
+ );
+ }
+
+ /** @type {import('types').StrictBody} */
+ let normalized_body;
+
+ if (is_pojo(body) && (!type || type.startsWith('application/json'))) {
+ headers.set('content-type', 'application/json; charset=utf-8');
+ normalized_body = JSON.stringify(body);
+ } else {
+ normalized_body = /** @type {import('types').StrictBody} */ (body);
+ }
+
+ if (
+ (typeof normalized_body === 'string' || normalized_body instanceof Uint8Array) &&
+ !headers.has('etag')
+ ) {
+ const cache_control = headers.get('cache-control');
+ if (!cache_control || !/(no-store|immutable)/.test(cache_control)) {
+ headers.set('etag', `"${hash(normalized_body)}"`);
+ }
+ }
+
+ return new Response(
+ method !== 'head' && !bodyless_status_codes.has(status) ? normalized_body : undefined,
+ {
+ status,
+ headers
+ }
+ );
+}
+
+var chars$1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$';
+var unsafeChars = /[<>\b\f\n\r\t\0\u2028\u2029]/g;
+var reserved = /^(?:do|if|in|for|int|let|new|try|var|byte|case|char|else|enum|goto|long|this|void|with|await|break|catch|class|const|final|float|short|super|throw|while|yield|delete|double|export|import|native|return|switch|throws|typeof|boolean|default|extends|finally|package|private|abstract|continue|debugger|function|volatile|interface|protected|transient|implements|instanceof|synchronized)$/;
+var escaped = {
+ '<': '\\u003C',
+ '>': '\\u003E',
+ '/': '\\u002F',
+ '\\': '\\\\',
+ '\b': '\\b',
+ '\f': '\\f',
+ '\n': '\\n',
+ '\r': '\\r',
+ '\t': '\\t',
+ '\0': '\\0',
+ '\u2028': '\\u2028',
+ '\u2029': '\\u2029'
+};
+var objectProtoOwnPropertyNames = Object.getOwnPropertyNames(Object.prototype).sort().join('\0');
+function devalue(value) {
+ var counts = new Map();
+ function walk(thing) {
+ if (typeof thing === 'function') {
+ throw new Error("Cannot stringify a function");
+ }
+ if (counts.has(thing)) {
+ counts.set(thing, counts.get(thing) + 1);
+ return;
+ }
+ counts.set(thing, 1);
+ if (!isPrimitive(thing)) {
+ var type = getType(thing);
+ switch (type) {
+ case 'Number':
+ case 'String':
+ case 'Boolean':
+ case 'Date':
+ case 'RegExp':
+ return;
+ case 'Array':
+ thing.forEach(walk);
+ break;
+ case 'Set':
+ case 'Map':
+ Array.from(thing).forEach(walk);
+ break;
+ default:
+ var proto = Object.getPrototypeOf(thing);
+ if (proto !== Object.prototype &&
+ proto !== null &&
+ Object.getOwnPropertyNames(proto).sort().join('\0') !== objectProtoOwnPropertyNames) {
+ throw new Error("Cannot stringify arbitrary non-POJOs");
+ }
+ if (Object.getOwnPropertySymbols(thing).length > 0) {
+ throw new Error("Cannot stringify POJOs with symbolic keys");
+ }
+ Object.keys(thing).forEach(function (key) { return walk(thing[key]); });
+ }
+ }
+ }
+ walk(value);
+ var names = new Map();
+ Array.from(counts)
+ .filter(function (entry) { return entry[1] > 1; })
+ .sort(function (a, b) { return b[1] - a[1]; })
+ .forEach(function (entry, i) {
+ names.set(entry[0], getName(i));
+ });
+ function stringify(thing) {
+ if (names.has(thing)) {
+ return names.get(thing);
+ }
+ if (isPrimitive(thing)) {
+ return stringifyPrimitive(thing);
+ }
+ var type = getType(thing);
+ switch (type) {
+ case 'Number':
+ case 'String':
+ case 'Boolean':
+ return "Object(" + stringify(thing.valueOf()) + ")";
+ case 'RegExp':
+ return "new RegExp(" + stringifyString(thing.source) + ", \"" + thing.flags + "\")";
+ case 'Date':
+ return "new Date(" + thing.getTime() + ")";
+ case 'Array':
+ var members = thing.map(function (v, i) { return i in thing ? stringify(v) : ''; });
+ var tail = thing.length === 0 || (thing.length - 1 in thing) ? '' : ',';
+ return "[" + members.join(',') + tail + "]";
+ case 'Set':
+ case 'Map':
+ return "new " + type + "([" + Array.from(thing).map(stringify).join(',') + "])";
+ default:
+ var obj = "{" + Object.keys(thing).map(function (key) { return safeKey(key) + ":" + stringify(thing[key]); }).join(',') + "}";
+ var proto = Object.getPrototypeOf(thing);
+ if (proto === null) {
+ return Object.keys(thing).length > 0
+ ? "Object.assign(Object.create(null)," + obj + ")"
+ : "Object.create(null)";
+ }
+ return obj;
+ }
+ }
+ var str = stringify(value);
+ if (names.size) {
+ var params_1 = [];
+ var statements_1 = [];
+ var values_1 = [];
+ names.forEach(function (name, thing) {
+ params_1.push(name);
+ if (isPrimitive(thing)) {
+ values_1.push(stringifyPrimitive(thing));
+ return;
+ }
+ var type = getType(thing);
+ switch (type) {
+ case 'Number':
+ case 'String':
+ case 'Boolean':
+ values_1.push("Object(" + stringify(thing.valueOf()) + ")");
+ break;
+ case 'RegExp':
+ values_1.push(thing.toString());
+ break;
+ case 'Date':
+ values_1.push("new Date(" + thing.getTime() + ")");
+ break;
+ case 'Array':
+ values_1.push("Array(" + thing.length + ")");
+ thing.forEach(function (v, i) {
+ statements_1.push(name + "[" + i + "]=" + stringify(v));
+ });
+ break;
+ case 'Set':
+ values_1.push("new Set");
+ statements_1.push(name + "." + Array.from(thing).map(function (v) { return "add(" + stringify(v) + ")"; }).join('.'));
+ break;
+ case 'Map':
+ values_1.push("new Map");
+ statements_1.push(name + "." + Array.from(thing).map(function (_a) {
+ var k = _a[0], v = _a[1];
+ return "set(" + stringify(k) + ", " + stringify(v) + ")";
+ }).join('.'));
+ break;
+ default:
+ values_1.push(Object.getPrototypeOf(thing) === null ? 'Object.create(null)' : '{}');
+ Object.keys(thing).forEach(function (key) {
+ statements_1.push("" + name + safeProp(key) + "=" + stringify(thing[key]));
+ });
+ }
+ });
+ statements_1.push("return " + str);
+ return "(function(" + params_1.join(',') + "){" + statements_1.join(';') + "}(" + values_1.join(',') + "))";
+ }
+ else {
+ return str;
+ }
+}
+function getName(num) {
+ var name = '';
+ do {
+ name = chars$1[num % chars$1.length] + name;
+ num = ~~(num / chars$1.length) - 1;
+ } while (num >= 0);
+ return reserved.test(name) ? name + "_" : name;
+}
+function isPrimitive(thing) {
+ return Object(thing) !== thing;
+}
+function stringifyPrimitive(thing) {
+ if (typeof thing === 'string')
+ return stringifyString(thing);
+ if (thing === void 0)
+ return 'void 0';
+ if (thing === 0 && 1 / thing < 0)
+ return '-0';
+ var str = String(thing);
+ if (typeof thing === 'number')
+ return str.replace(/^(-)?0\./, '$1.');
+ return str;
+}
+function getType(thing) {
+ return Object.prototype.toString.call(thing).slice(8, -1);
+}
+function escapeUnsafeChar(c) {
+ return escaped[c] || c;
+}
+function escapeUnsafeChars(str) {
+ return str.replace(unsafeChars, escapeUnsafeChar);
+}
+function safeKey(key) {
+ return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key) ? key : escapeUnsafeChars(JSON.stringify(key));
+}
+function safeProp(key) {
+ return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key) ? "." + key : "[" + escapeUnsafeChars(JSON.stringify(key)) + "]";
+}
+function stringifyString(str) {
+ var result = '"';
+ for (var i = 0; i < str.length; i += 1) {
+ var char = str.charAt(i);
+ var code = char.charCodeAt(0);
+ if (char === '"') {
+ result += '\\"';
+ }
+ else if (char in escaped) {
+ result += escaped[char];
+ }
+ else if (code >= 0xd800 && code <= 0xdfff) {
+ var next = str.charCodeAt(i + 1);
+ // If this is the beginning of a [high, low] surrogate pair,
+ // add the next two characters, otherwise escape
+ if (code <= 0xdbff && (next >= 0xdc00 && next <= 0xdfff)) {
+ result += char + str[++i];
+ }
+ else {
+ result += "\\u" + code.toString(16).toUpperCase();
+ }
+ }
+ else {
+ result += char;
+ }
+ }
+ result += '"';
+ return result;
+}
+
+function noop() { }
+function safe_not_equal(a, b) {
+ return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
+}
+Promise.resolve();
+
+const subscriber_queue = [];
+/**
+ * Creates a `Readable` store that allows reading by subscription.
+ * @param value initial value
+ * @param {StartStopNotifier}start start and stop notifications for subscriptions
+ */
+function readable(value, start) {
+ return {
+ subscribe: writable(value, start).subscribe
+ };
+}
+/**
+ * Create a `Writable` store that allows both updating and reading by subscription.
+ * @param {*=}value initial value
+ * @param {StartStopNotifier=}start start and stop notifications for subscriptions
+ */
+function writable(value, start = noop) {
+ let stop;
+ const subscribers = new Set();
+ function set(new_value) {
+ if (safe_not_equal(value, new_value)) {
+ value = new_value;
+ if (stop) { // store is ready
+ const run_queue = !subscriber_queue.length;
+ for (const subscriber of subscribers) {
+ subscriber[1]();
+ subscriber_queue.push(subscriber, value);
+ }
+ if (run_queue) {
+ for (let i = 0; i < subscriber_queue.length; i += 2) {
+ subscriber_queue[i][0](subscriber_queue[i + 1]);
+ }
+ subscriber_queue.length = 0;
+ }
+ }
+ }
+ }
+ function update(fn) {
+ set(fn(value));
+ }
+ function subscribe(run, invalidate = noop) {
+ const subscriber = [run, invalidate];
+ subscribers.add(subscriber);
+ if (subscribers.size === 1) {
+ stop = start(set) || noop;
+ }
+ run(value);
+ return () => {
+ subscribers.delete(subscriber);
+ if (subscribers.size === 0) {
+ stop();
+ stop = null;
+ }
+ };
+ }
+ return { set, update, subscribe };
+}
+
+/**
+ * @param {unknown} err
+ * @return {Error}
+ */
+function coalesce_to_error(err) {
+ return err instanceof Error ||
+ (err && /** @type {any} */ (err).name && /** @type {any} */ (err).message)
+ ? /** @type {Error} */ (err)
+ : new Error(JSON.stringify(err));
+}
+
+/**
+ * Inside a script element, only ``, so the script element might be unexpectedly
+ * kept open until until an unrelated HTML comment in the page.
+ *
+ * U+2028 LINE SEPARATOR and U+2029 PARAGRAPH SEPARATOR are escaped for the sake of pre-2018
+ * browsers.
+ *
+ * @see tests for unsafe parsing examples.
+ * @see https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements
+ * @see https://html.spec.whatwg.org/multipage/syntax.html#cdata-rcdata-restrictions
+ * @see https://html.spec.whatwg.org/multipage/parsing.html#script-data-state
+ * @see https://html.spec.whatwg.org/multipage/parsing.html#script-data-double-escaped-state
+ * @see https://github.com/tc39/proposal-json-superset
+ * @type {Record}
+ */
+const render_json_payload_script_dict = {
+ '<': '\\u003C',
+ '\u2028': '\\u2028',
+ '\u2029': '\\u2029'
+};
+
+const render_json_payload_script_regex = new RegExp(
+ `[${Object.keys(render_json_payload_script_dict).join('')}]`,
+ 'g'
+);
+
+/**
+ * Generates a raw HTML string containing a safe script element carrying JSON data and associated attributes.
+ *
+ * It escapes all the special characters needed to guarantee the element is unbroken, but care must
+ * be taken to ensure it is inserted in the document at an acceptable position for a script element,
+ * and that the resulting string isn't further modified.
+ *
+ * Attribute names must be type-checked so we don't need to escape them.
+ *
+ * @param {import('types').PayloadScriptAttributes} attrs A list of attributes to be added to the element.
+ * @param {import('types').JSONValue} payload The data to be carried by the element. Must be serializable to JSON.
+ * @returns {string} The raw HTML of a script element carrying the JSON payload.
+ * @example const html = render_json_payload_script({ type: 'data', url: '/data.json' }, { foo: 'bar' });
+ */
+function render_json_payload_script(attrs, payload) {
+ const safe_payload = JSON.stringify(payload).replace(
+ render_json_payload_script_regex,
+ (match) => render_json_payload_script_dict[match]
+ );
+
+ let safe_attrs = '';
+ for (const [key, value] of Object.entries(attrs)) {
+ if (value === undefined) continue;
+ safe_attrs += ` sveltekit:data-${key}=${escape_html_attr(value)}`;
+ }
+
+ return ``;
+}
+
+/**
+ * When inside a double-quoted attribute value, only `&` and `"` hold special meaning.
+ * @see https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(double-quoted)-state
+ * @type {Record}
+ */
+const escape_html_attr_dict = {
+ '&': '&',
+ '"': '"'
+};
+
+const escape_html_attr_regex = new RegExp(
+ // special characters
+ `[${Object.keys(escape_html_attr_dict).join('')}]|` +
+ // high surrogate without paired low surrogate
+ '[\\ud800-\\udbff](?![\\udc00-\\udfff])|' +
+ // a valid surrogate pair, the only match with 2 code units
+ // we match it so that we can match unpaired low surrogates in the same pass
+ // TODO: use lookbehind assertions once they are widely supported: (?...`;
+ */
+function escape_html_attr(str) {
+ const escaped_str = str.replace(escape_html_attr_regex, (match) => {
+ if (match.length === 2) {
+ // valid surrogate pair
+ return match;
+ }
+
+ return escape_html_attr_dict[match] ?? `${match.charCodeAt(0)};`;
+ });
+
+ return `"${escaped_str}"`;
+}
+
+const s = JSON.stringify;
+
+const encoder = new TextEncoder();
+
+/**
+ * SHA-256 hashing function adapted from https://bitwiseshiftleft.github.io/sjcl
+ * modified and redistributed under BSD license
+ * @param {string} data
+ */
+function sha256(data) {
+ if (!key[0]) precompute();
+
+ const out = init.slice(0);
+ const array = encode$1(data);
+
+ for (let i = 0; i < array.length; i += 16) {
+ const w = array.subarray(i, i + 16);
+
+ let tmp;
+ let a;
+ let b;
+
+ let out0 = out[0];
+ let out1 = out[1];
+ let out2 = out[2];
+ let out3 = out[3];
+ let out4 = out[4];
+ let out5 = out[5];
+ let out6 = out[6];
+ let out7 = out[7];
+
+ /* Rationale for placement of |0 :
+ * If a value can overflow is original 32 bits by a factor of more than a few
+ * million (2^23 ish), there is a possibility that it might overflow the
+ * 53-bit mantissa and lose precision.
+ *
+ * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
+ * propagates around the loop, and on the hash state out[]. I don't believe
+ * that the clamps on out4 and on out0 are strictly necessary, but it's close
+ * (for out4 anyway), and better safe than sorry.
+ *
+ * The clamps on out[] are necessary for the output to be correct even in the
+ * common case and for short inputs.
+ */
+
+ for (let i = 0; i < 64; i++) {
+ // load up the input word for this round
+
+ if (i < 16) {
+ tmp = w[i];
+ } else {
+ a = w[(i + 1) & 15];
+
+ b = w[(i + 14) & 15];
+
+ tmp = w[i & 15] =
+ (((a >>> 7) ^ (a >>> 18) ^ (a >>> 3) ^ (a << 25) ^ (a << 14)) +
+ ((b >>> 17) ^ (b >>> 19) ^ (b >>> 10) ^ (b << 15) ^ (b << 13)) +
+ w[i & 15] +
+ w[(i + 9) & 15]) |
+ 0;
+ }
+
+ tmp =
+ tmp +
+ out7 +
+ ((out4 >>> 6) ^ (out4 >>> 11) ^ (out4 >>> 25) ^ (out4 << 26) ^ (out4 << 21) ^ (out4 << 7)) +
+ (out6 ^ (out4 & (out5 ^ out6))) +
+ key[i]; // | 0;
+
+ // shift register
+ out7 = out6;
+ out6 = out5;
+ out5 = out4;
+
+ out4 = (out3 + tmp) | 0;
+
+ out3 = out2;
+ out2 = out1;
+ out1 = out0;
+
+ out0 =
+ (tmp +
+ ((out1 & out2) ^ (out3 & (out1 ^ out2))) +
+ ((out1 >>> 2) ^
+ (out1 >>> 13) ^
+ (out1 >>> 22) ^
+ (out1 << 30) ^
+ (out1 << 19) ^
+ (out1 << 10))) |
+ 0;
+ }
+
+ out[0] = (out[0] + out0) | 0;
+ out[1] = (out[1] + out1) | 0;
+ out[2] = (out[2] + out2) | 0;
+ out[3] = (out[3] + out3) | 0;
+ out[4] = (out[4] + out4) | 0;
+ out[5] = (out[5] + out5) | 0;
+ out[6] = (out[6] + out6) | 0;
+ out[7] = (out[7] + out7) | 0;
+ }
+
+ const bytes = new Uint8Array(out.buffer);
+ reverse_endianness(bytes);
+
+ return base64(bytes);
+}
+
+/** The SHA-256 initialization vector */
+const init = new Uint32Array(8);
+
+/** The SHA-256 hash key */
+const key = new Uint32Array(64);
+
+/** Function to precompute init and key. */
+function precompute() {
+ /** @param {number} x */
+ function frac(x) {
+ return (x - Math.floor(x)) * 0x100000000;
+ }
+
+ let prime = 2;
+
+ for (let i = 0; i < 64; prime++) {
+ let is_prime = true;
+
+ for (let factor = 2; factor * factor <= prime; factor++) {
+ if (prime % factor === 0) {
+ is_prime = false;
+
+ break;
+ }
+ }
+
+ if (is_prime) {
+ if (i < 8) {
+ init[i] = frac(prime ** (1 / 2));
+ }
+
+ key[i] = frac(prime ** (1 / 3));
+
+ i++;
+ }
+ }
+}
+
+/** @param {Uint8Array} bytes */
+function reverse_endianness(bytes) {
+ for (let i = 0; i < bytes.length; i += 4) {
+ const a = bytes[i + 0];
+ const b = bytes[i + 1];
+ const c = bytes[i + 2];
+ const d = bytes[i + 3];
+
+ bytes[i + 0] = d;
+ bytes[i + 1] = c;
+ bytes[i + 2] = b;
+ bytes[i + 3] = a;
+ }
+}
+
+/** @param {string} str */
+function encode$1(str) {
+ const encoded = encoder.encode(str);
+ const length = encoded.length * 8;
+
+ // result should be a multiple of 512 bits in length,
+ // with room for a 1 (after the data) and two 32-bit
+ // words containing the original input bit length
+ const size = 512 * Math.ceil((length + 65) / 512);
+ const bytes = new Uint8Array(size / 8);
+ bytes.set(encoded);
+
+ // append a 1
+ bytes[encoded.length] = 0b10000000;
+
+ reverse_endianness(bytes);
+
+ // add the input bit length
+ const words = new Uint32Array(bytes.buffer);
+ words[words.length - 2] = Math.floor(length / 0x100000000); // this will always be zero for us
+ words[words.length - 1] = length;
+
+ return words;
+}
+
+/*
+ Based on https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727
+
+ MIT License
+ Copyright (c) 2020 Egor Nepomnyaschih
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
+
+/** @param {Uint8Array} bytes */
+function base64(bytes) {
+ const l = bytes.length;
+
+ let result = '';
+ let i;
+
+ for (i = 2; i < l; i += 3) {
+ result += chars[bytes[i - 2] >> 2];
+ result += chars[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];
+ result += chars[((bytes[i - 1] & 0x0f) << 2) | (bytes[i] >> 6)];
+ result += chars[bytes[i] & 0x3f];
+ }
+
+ if (i === l + 1) {
+ // 1 octet yet to write
+ result += chars[bytes[i - 2] >> 2];
+ result += chars[(bytes[i - 2] & 0x03) << 4];
+ result += '==';
+ }
+
+ if (i === l) {
+ // 2 octets yet to write
+ result += chars[bytes[i - 2] >> 2];
+ result += chars[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];
+ result += chars[(bytes[i - 1] & 0x0f) << 2];
+ result += '=';
+ }
+
+ return result;
+}
+
+/** @type {Promise} */
+let csp_ready;
+
+const array = new Uint8Array(16);
+
+function generate_nonce() {
+ crypto.getRandomValues(array);
+ return base64(array);
+}
+
+const quoted = new Set([
+ 'self',
+ 'unsafe-eval',
+ 'unsafe-hashes',
+ 'unsafe-inline',
+ 'none',
+ 'strict-dynamic',
+ 'report-sample'
+]);
+
+const crypto_pattern = /^(nonce|sha\d\d\d)-/;
+
+class Csp {
+ /** @type {boolean} */
+ #use_hashes;
+
+ /** @type {boolean} */
+ #dev;
+
+ /** @type {boolean} */
+ #script_needs_csp;
+
+ /** @type {boolean} */
+ #style_needs_csp;
+
+ /** @type {import('types').CspDirectives} */
+ #directives;
+
+ /** @type {import('types').Csp.Source[]} */
+ #script_src;
+
+ /** @type {import('types').Csp.Source[]} */
+ #style_src;
+
+ /**
+ * @param {{
+ * mode: string,
+ * directives: import('types').CspDirectives
+ * }} config
+ * @param {{
+ * dev: boolean;
+ * prerender: boolean;
+ * needs_nonce: boolean;
+ * }} opts
+ */
+ constructor({ mode, directives }, { dev, prerender, needs_nonce }) {
+ this.#use_hashes = mode === 'hash' || (mode === 'auto' && prerender);
+ this.#directives = dev ? { ...directives } : directives; // clone in dev so we can safely mutate
+ this.#dev = dev;
+
+ const d = this.#directives;
+
+ if (dev) {
+ // remove strict-dynamic in dev...
+ // TODO reinstate this if we can figure out how to make strict-dynamic work
+ // if (d['default-src']) {
+ // d['default-src'] = d['default-src'].filter((name) => name !== 'strict-dynamic');
+ // if (d['default-src'].length === 0) delete d['default-src'];
+ // }
+
+ // if (d['script-src']) {
+ // d['script-src'] = d['script-src'].filter((name) => name !== 'strict-dynamic');
+ // if (d['script-src'].length === 0) delete d['script-src'];
+ // }
+
+ const effective_style_src = d['style-src'] || d['default-src'];
+
+ // ...and add unsafe-inline so we can inject `;
+ }
+
+ // prettier-ignore
+ head += Array.from(stylesheets)
+ .map((dep) => {
+ const attributes = [
+ 'rel="stylesheet"',
+ `href="${options.prefix + dep}"`
+ ];
+
+ if (csp.style_needs_nonce) {
+ attributes.push(`nonce="${csp.nonce}"`);
+ }
+
+ if (styles.has(dep)) {
+ // don't load stylesheets that are already inlined
+ // include them in disabled state so that Vite can detect them and doesn't try to add them
+ attributes.push('disabled', 'media="(max-width: 0)"');
+ }
+
+ return `\n\t`;
+ })
+ .join('');
+
+ if (page_config.router || page_config.hydrate) {
+ head += Array.from(modulepreloads)
+ .map((dep) => `\n\t`)
+ .join('');
+
+ const attributes = ['type="module"', `data-sveltekit-hydrate="${target}"`];
+
+ csp.add_script(init_app);
+
+ if (csp.script_needs_nonce) {
+ attributes.push(`nonce="${csp.nonce}"`);
+ }
+
+ body += `\n\t\t`;
+
+ body += serialized_data
+ .map(({ url, body, response }) =>
+ render_json_payload_script(
+ { type: 'data', url, body: typeof body === 'string' ? hash(body) : undefined },
+ response
+ )
+ )
+ .join('\n\t');
+
+ if (shadow_props) {
+ body += render_json_payload_script({ type: 'props' }, shadow_props);
+ }
+ }
+
+ if (options.service_worker) {
+ // always include service worker unless it's turned off explicitly
+ csp.add_script(init_service_worker);
+
+ head += `
+ `;
+ }
+
+ if (state.prerendering) {
+ const http_equiv = [];
+
+ const csp_headers = csp.get_meta();
+ if (csp_headers) {
+ http_equiv.push(csp_headers);
+ }
+
+ if (cache) {
+ http_equiv.push(``);
+ }
+
+ if (http_equiv.length > 0) {
+ head = http_equiv.join('\n') + head;
+ }
+ }
+
+ const segments = event.url.pathname.slice(options.paths.base.length).split('/').slice(2);
+ const assets =
+ options.paths.assets || (segments.length > 0 ? segments.map(() => '..').join('/') : '.');
+
+ const html = await resolve_opts.transformPage({
+ html: options.template({ head, body, assets, nonce: /** @type {string} */ (csp.nonce) })
+ });
+
+ const headers = new Headers({
+ 'content-type': 'text/html',
+ etag: `"${hash(html)}"`
+ });
+
+ if (cache) {
+ headers.set('cache-control', `${is_private ? 'private' : 'public'}, max-age=${cache.maxage}`);
+ }
+
+ if (!options.floc) {
+ headers.set('permissions-policy', 'interest-cohort=()');
+ }
+
+ if (!state.prerendering) {
+ const csp_header = csp.get_header();
+ if (csp_header) {
+ headers.set('content-security-policy', csp_header);
+ }
+ }
+
+ return new Response(html, {
+ status,
+ headers
+ });
+}
+
+/**
+ * @param {any} data
+ * @param {(error: Error) => void} [fail]
+ */
+function try_serialize(data, fail) {
+ try {
+ return devalue(data);
+ } catch (err) {
+ if (fail) fail(coalesce_to_error(err));
+ return null;
+ }
+}
+
+// Ensure we return something truthy so the client will not re-render the page over the error
+
+/** @param {(Error & {frame?: string} & {loc?: object}) | undefined | null} error */
+function serialize_error(error) {
+ if (!error) return null;
+ let serialized = try_serialize(error);
+ if (!serialized) {
+ const { name, message, stack } = error;
+ serialized = try_serialize({ ...error, name, message, stack });
+ }
+ if (!serialized) {
+ serialized = '{}';
+ }
+ return serialized;
+}
+
+/*!
+ * cookie
+ * Copyright(c) 2012-2014 Roman Shtylman
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+/**
+ * Module exports.
+ * @public
+ */
+
+var parse_1 = parse$1;
+var serialize_1 = serialize;
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var __toString = Object.prototype.toString;
+
+/**
+ * RegExp to match field-content in RFC 7230 sec 3.2
+ *
+ * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
+ * field-vchar = VCHAR / obs-text
+ * obs-text = %x80-FF
+ */
+
+var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
+
+/**
+ * Parse a cookie header.
+ *
+ * Parse the given cookie header string into an object
+ * The object has the various cookies as keys(names) => values
+ *
+ * @param {string} str
+ * @param {object} [options]
+ * @return {object}
+ * @public
+ */
+
+function parse$1(str, options) {
+ if (typeof str !== 'string') {
+ throw new TypeError('argument str must be a string');
+ }
+
+ var obj = {};
+ var opt = options || {};
+ var dec = opt.decode || decode;
+
+ var index = 0;
+ while (index < str.length) {
+ var eqIdx = str.indexOf('=', index);
+
+ // no more cookie pairs
+ if (eqIdx === -1) {
+ break
+ }
+
+ var endIdx = str.indexOf(';', index);
+
+ if (endIdx === -1) {
+ endIdx = str.length;
+ } else if (endIdx < eqIdx) {
+ // backtrack on prior semicolon
+ index = str.lastIndexOf(';', eqIdx - 1) + 1;
+ continue
+ }
+
+ var key = str.slice(index, eqIdx).trim();
+
+ // only assign once
+ if (undefined === obj[key]) {
+ var val = str.slice(eqIdx + 1, endIdx).trim();
+
+ // quoted values
+ if (val.charCodeAt(0) === 0x22) {
+ val = val.slice(1, -1);
+ }
+
+ obj[key] = tryDecode(val, dec);
+ }
+
+ index = endIdx + 1;
+ }
+
+ return obj;
+}
+
+/**
+ * Serialize data into a cookie header.
+ *
+ * Serialize the a name value pair into a cookie string suitable for
+ * http headers. An optional options object specified cookie parameters.
+ *
+ * serialize('foo', 'bar', { httpOnly: true })
+ * => "foo=bar; httpOnly"
+ *
+ * @param {string} name
+ * @param {string} val
+ * @param {object} [options]
+ * @return {string}
+ * @public
+ */
+
+function serialize(name, val, options) {
+ var opt = options || {};
+ var enc = opt.encode || encode;
+
+ if (typeof enc !== 'function') {
+ throw new TypeError('option encode is invalid');
+ }
+
+ if (!fieldContentRegExp.test(name)) {
+ throw new TypeError('argument name is invalid');
+ }
+
+ var value = enc(val);
+
+ if (value && !fieldContentRegExp.test(value)) {
+ throw new TypeError('argument val is invalid');
+ }
+
+ var str = name + '=' + value;
+
+ if (null != opt.maxAge) {
+ var maxAge = opt.maxAge - 0;
+
+ if (isNaN(maxAge) || !isFinite(maxAge)) {
+ throw new TypeError('option maxAge is invalid')
+ }
+
+ str += '; Max-Age=' + Math.floor(maxAge);
+ }
+
+ if (opt.domain) {
+ if (!fieldContentRegExp.test(opt.domain)) {
+ throw new TypeError('option domain is invalid');
+ }
+
+ str += '; Domain=' + opt.domain;
+ }
+
+ if (opt.path) {
+ if (!fieldContentRegExp.test(opt.path)) {
+ throw new TypeError('option path is invalid');
+ }
+
+ str += '; Path=' + opt.path;
+ }
+
+ if (opt.expires) {
+ var expires = opt.expires;
+
+ if (!isDate(expires) || isNaN(expires.valueOf())) {
+ throw new TypeError('option expires is invalid');
+ }
+
+ str += '; Expires=' + expires.toUTCString();
+ }
+
+ if (opt.httpOnly) {
+ str += '; HttpOnly';
+ }
+
+ if (opt.secure) {
+ str += '; Secure';
+ }
+
+ if (opt.priority) {
+ var priority = typeof opt.priority === 'string'
+ ? opt.priority.toLowerCase()
+ : opt.priority;
+
+ switch (priority) {
+ case 'low':
+ str += '; Priority=Low';
+ break
+ case 'medium':
+ str += '; Priority=Medium';
+ break
+ case 'high':
+ str += '; Priority=High';
+ break
+ default:
+ throw new TypeError('option priority is invalid')
+ }
+ }
+
+ if (opt.sameSite) {
+ var sameSite = typeof opt.sameSite === 'string'
+ ? opt.sameSite.toLowerCase() : opt.sameSite;
+
+ switch (sameSite) {
+ case true:
+ str += '; SameSite=Strict';
+ break;
+ case 'lax':
+ str += '; SameSite=Lax';
+ break;
+ case 'strict':
+ str += '; SameSite=Strict';
+ break;
+ case 'none':
+ str += '; SameSite=None';
+ break;
+ default:
+ throw new TypeError('option sameSite is invalid');
+ }
+ }
+
+ return str;
+}
+
+/**
+ * URL-decode string value. Optimized to skip native call when no %.
+ *
+ * @param {string} str
+ * @returns {string}
+ */
+
+function decode (str) {
+ return str.indexOf('%') !== -1
+ ? decodeURIComponent(str)
+ : str
+}
+
+/**
+ * URL-encode value.
+ *
+ * @param {string} str
+ * @returns {string}
+ */
+
+function encode (val) {
+ return encodeURIComponent(val)
+}
+
+/**
+ * Determine if value is a Date.
+ *
+ * @param {*} val
+ * @private
+ */
+
+function isDate (val) {
+ return __toString.call(val) === '[object Date]' ||
+ val instanceof Date
+}
+
+/**
+ * Try decoding a string using a decoding function.
+ *
+ * @param {string} str
+ * @param {function} decode
+ * @private
+ */
+
+function tryDecode(str, decode) {
+ try {
+ return decode(str);
+ } catch (e) {
+ return str;
+ }
+}
+
+var setCookie = {exports: {}};
+
+var defaultParseOptions = {
+ decodeValues: true,
+ map: false,
+ silent: false,
+};
+
+function isNonEmptyString(str) {
+ return typeof str === "string" && !!str.trim();
+}
+
+function parseString(setCookieValue, options) {
+ var parts = setCookieValue.split(";").filter(isNonEmptyString);
+ var nameValue = parts.shift().split("=");
+ var name = nameValue.shift();
+ var value = nameValue.join("="); // everything after the first =, joined by a "=" if there was more than one part
+
+ options = options
+ ? Object.assign({}, defaultParseOptions, options)
+ : defaultParseOptions;
+
+ try {
+ value = options.decodeValues ? decodeURIComponent(value) : value; // decode cookie value
+ } catch (e) {
+ console.error(
+ "set-cookie-parser encountered an error while decoding a cookie with value '" +
+ value +
+ "'. Set options.decodeValues to false to disable this feature.",
+ e
+ );
+ }
+
+ var cookie = {
+ name: name, // grab everything before the first =
+ value: value,
+ };
+
+ parts.forEach(function (part) {
+ var sides = part.split("=");
+ var key = sides.shift().trimLeft().toLowerCase();
+ var value = sides.join("=");
+ if (key === "expires") {
+ cookie.expires = new Date(value);
+ } else if (key === "max-age") {
+ cookie.maxAge = parseInt(value, 10);
+ } else if (key === "secure") {
+ cookie.secure = true;
+ } else if (key === "httponly") {
+ cookie.httpOnly = true;
+ } else if (key === "samesite") {
+ cookie.sameSite = value;
+ } else {
+ cookie[key] = value;
+ }
+ });
+
+ return cookie;
+}
+
+function parse(input, options) {
+ options = options
+ ? Object.assign({}, defaultParseOptions, options)
+ : defaultParseOptions;
+
+ if (!input) {
+ if (!options.map) {
+ return [];
+ } else {
+ return {};
+ }
+ }
+
+ if (input.headers && input.headers["set-cookie"]) {
+ // fast-path for node.js (which automatically normalizes header names to lower-case
+ input = input.headers["set-cookie"];
+ } else if (input.headers) {
+ // slow-path for other environments - see #25
+ var sch =
+ input.headers[
+ Object.keys(input.headers).find(function (key) {
+ return key.toLowerCase() === "set-cookie";
+ })
+ ];
+ // warn if called on a request-like object with a cookie header rather than a set-cookie header - see #34, 36
+ if (!sch && input.headers.cookie && !options.silent) {
+ console.warn(
+ "Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning."
+ );
+ }
+ input = sch;
+ }
+ if (!Array.isArray(input)) {
+ input = [input];
+ }
+
+ options = options
+ ? Object.assign({}, defaultParseOptions, options)
+ : defaultParseOptions;
+
+ if (!options.map) {
+ return input.filter(isNonEmptyString).map(function (str) {
+ return parseString(str, options);
+ });
+ } else {
+ var cookies = {};
+ return input.filter(isNonEmptyString).reduce(function (cookies, str) {
+ var cookie = parseString(str, options);
+ cookies[cookie.name] = cookie;
+ return cookies;
+ }, cookies);
+ }
+}
+
+/*
+ Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas
+ that are within a single set-cookie field-value, such as in the Expires portion.
+
+ This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2
+ Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128
+ React Native's fetch does this for *every* header, including set-cookie.
+
+ Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25
+ Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation
+*/
+function splitCookiesString(cookiesString) {
+ if (Array.isArray(cookiesString)) {
+ return cookiesString;
+ }
+ if (typeof cookiesString !== "string") {
+ return [];
+ }
+
+ var cookiesStrings = [];
+ var pos = 0;
+ var start;
+ var ch;
+ var lastComma;
+ var nextStart;
+ var cookiesSeparatorFound;
+
+ function skipWhitespace() {
+ while (pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))) {
+ pos += 1;
+ }
+ return pos < cookiesString.length;
+ }
+
+ function notSpecialChar() {
+ ch = cookiesString.charAt(pos);
+
+ return ch !== "=" && ch !== ";" && ch !== ",";
+ }
+
+ while (pos < cookiesString.length) {
+ start = pos;
+ cookiesSeparatorFound = false;
+
+ while (skipWhitespace()) {
+ ch = cookiesString.charAt(pos);
+ if (ch === ",") {
+ // ',' is a cookie separator if we have later first '=', not ';' or ','
+ lastComma = pos;
+ pos += 1;
+
+ skipWhitespace();
+ nextStart = pos;
+
+ while (pos < cookiesString.length && notSpecialChar()) {
+ pos += 1;
+ }
+
+ // currently special character
+ if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") {
+ // we found cookies separator
+ cookiesSeparatorFound = true;
+ // pos is inside the next cookie, so back up and return it.
+ pos = nextStart;
+ cookiesStrings.push(cookiesString.substring(start, lastComma));
+ start = pos;
+ } else {
+ // in param ',' or param separator ';',
+ // we continue from that comma
+ pos = lastComma + 1;
+ }
+ } else {
+ pos += 1;
+ }
+ }
+
+ if (!cookiesSeparatorFound || pos >= cookiesString.length) {
+ cookiesStrings.push(cookiesString.substring(start, cookiesString.length));
+ }
+ }
+
+ return cookiesStrings;
+}
+
+setCookie.exports = parse;
+setCookie.exports.parse = parse;
+var parseString_1 = setCookie.exports.parseString = parseString;
+var splitCookiesString_1 = setCookie.exports.splitCookiesString = splitCookiesString;
+
+/**
+ * @param {import('types').LoadOutput} loaded
+ * @returns {import('types').NormalizedLoadOutput}
+ */
+function normalize(loaded) {
+ // TODO remove for 1.0
+ // @ts-expect-error
+ if (loaded.fallthrough) {
+ throw new Error(
+ 'fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching'
+ );
+ }
+
+ // TODO remove for 1.0
+ if ('maxage' in loaded) {
+ throw new Error('maxage should be replaced with cache: { maxage }');
+ }
+
+ const has_error_status =
+ loaded.status && loaded.status >= 400 && loaded.status <= 599 && !loaded.redirect;
+ if (loaded.error || has_error_status) {
+ const status = loaded.status;
+
+ if (!loaded.error && has_error_status) {
+ return { status: status || 500, error: new Error() };
+ }
+
+ const error = typeof loaded.error === 'string' ? new Error(loaded.error) : loaded.error;
+
+ if (!(error instanceof Error)) {
+ return {
+ status: 500,
+ error: new Error(
+ `"error" property returned from load() must be a string or instance of Error, received type "${typeof error}"`
+ )
+ };
+ }
+
+ if (!status || status < 400 || status > 599) {
+ console.warn('"error" returned from load() without a valid status code — defaulting to 500');
+ return { status: 500, error };
+ }
+
+ return { status, error };
+ }
+
+ if (loaded.redirect) {
+ if (!loaded.status || Math.floor(loaded.status / 100) !== 3) {
+ throw new Error(
+ '"redirect" property returned from load() must be accompanied by a 3xx status code'
+ );
+ }
+
+ if (typeof loaded.redirect !== 'string') {
+ throw new Error('"redirect" property returned from load() must be a string');
+ }
+ }
+
+ if (loaded.dependencies) {
+ if (
+ !Array.isArray(loaded.dependencies) ||
+ loaded.dependencies.some((dep) => typeof dep !== 'string')
+ ) {
+ throw new Error('"dependencies" property returned from load() must be of type string[]');
+ }
+ }
+
+ // TODO remove before 1.0
+ if (/** @type {any} */ (loaded).context) {
+ throw new Error(
+ 'You are returning "context" from a load function. ' +
+ '"context" was renamed to "stuff", please adjust your code accordingly.'
+ );
+ }
+
+ return /** @type {import('types').NormalizedLoadOutput} */ (loaded);
+}
+
+/**
+ * @param {string} hostname
+ * @param {string} [constraint]
+ */
+function domain_matches(hostname, constraint) {
+ if (!constraint) return true;
+
+ const normalized = constraint[0] === '.' ? constraint.slice(1) : constraint;
+
+ if (hostname === normalized) return true;
+ return hostname.endsWith('.' + normalized);
+}
+
+/**
+ * @param {string} path
+ * @param {string} [constraint]
+ */
+function path_matches(path, constraint) {
+ if (!constraint) return true;
+
+ const normalized = constraint.endsWith('/') ? constraint.slice(0, -1) : constraint;
+
+ if (path === normalized) return true;
+ return path.startsWith(normalized + '/');
+}
+
+/**
+ * Calls the user's `load` function.
+ * @param {{
+ * event: import('types').RequestEvent;
+ * options: import('types').SSROptions;
+ * state: import('types').SSRState;
+ * route: import('types').SSRPage | null;
+ * node: import('types').SSRNode;
+ * $session: any;
+ * stuff: Record;
+ * is_error: boolean;
+ * is_leaf: boolean;
+ * status?: number;
+ * error?: Error;
+ * }} opts
+ * @returns {Promise}
+ */
+async function load_node({
+ event,
+ options,
+ state,
+ route,
+ node,
+ $session,
+ stuff,
+ is_error,
+ is_leaf,
+ status,
+ error
+}) {
+ const { module } = node;
+
+ let uses_credentials = false;
+
+ /** @type {Array} */
+ const fetched = [];
+
+ const cookies = parse_1(event.request.headers.get('cookie') || '');
+
+ /** @type {import('set-cookie-parser').Cookie[]} */
+ const new_cookies = [];
+
+ /** @type {import('types').LoadOutput} */
+ let loaded;
+
+ const should_prerender = node.module.prerender ?? options.prerender.default;
+
+ /** @type {import('types').ShadowData} */
+ const shadow = is_leaf
+ ? await load_shadow_data(
+ /** @type {import('types').SSRPage} */ (route),
+ event,
+ options,
+ should_prerender
+ )
+ : {};
+
+ if (shadow.cookies) {
+ shadow.cookies.forEach((header) => {
+ new_cookies.push(parseString_1(header));
+ });
+ }
+
+ if (shadow.error) {
+ loaded = {
+ status: shadow.status,
+ error: shadow.error
+ };
+ } else if (shadow.redirect) {
+ loaded = {
+ status: shadow.status,
+ redirect: shadow.redirect
+ };
+ } else if (module.load) {
+ /** @type {import('types').LoadEvent} */
+ const load_input = {
+ url: state.prerendering ? new PrerenderingURL(event.url) : new LoadURL(event.url),
+ params: event.params,
+ props: shadow.body || {},
+ routeId: event.routeId,
+ get session() {
+ if (node.module.prerender ?? options.prerender.default) {
+ throw Error(
+ 'Attempted to access session from a prerendered page. Session would never be populated.'
+ );
+ }
+ uses_credentials = true;
+ return $session;
+ },
+ /**
+ * @param {RequestInfo} resource
+ * @param {RequestInit} opts
+ */
+ fetch: async (resource, opts = {}) => {
+ /** @type {string} */
+ let requested;
+
+ if (typeof resource === 'string') {
+ requested = resource;
+ } else {
+ requested = resource.url;
+
+ opts = {
+ method: resource.method,
+ headers: resource.headers,
+ body: resource.body,
+ mode: resource.mode,
+ credentials: resource.credentials,
+ cache: resource.cache,
+ redirect: resource.redirect,
+ referrer: resource.referrer,
+ integrity: resource.integrity,
+ ...opts
+ };
+ }
+
+ opts.headers = new Headers(opts.headers);
+
+ // merge headers from request
+ for (const [key, value] of event.request.headers) {
+ if (
+ key !== 'authorization' &&
+ key !== 'cookie' &&
+ key !== 'host' &&
+ key !== 'if-none-match' &&
+ !opts.headers.has(key)
+ ) {
+ opts.headers.set(key, value);
+ }
+ }
+
+ const resolved = resolve(event.url.pathname, requested.split('?')[0]);
+
+ /** @type {Response} */
+ let response;
+
+ /** @type {import('types').PrerenderDependency} */
+ let dependency;
+
+ // handle fetch requests for static assets. e.g. prebaked data, etc.
+ // we need to support everything the browser's fetch supports
+ const prefix = options.paths.assets || options.paths.base;
+ const filename = decodeURIComponent(
+ resolved.startsWith(prefix) ? resolved.slice(prefix.length) : resolved
+ ).slice(1);
+ const filename_html = `${filename}/index.html`; // path may also match path/index.html
+
+ const is_asset = options.manifest.assets.has(filename);
+ const is_asset_html = options.manifest.assets.has(filename_html);
+
+ if (is_asset || is_asset_html) {
+ const file = is_asset ? filename : filename_html;
+
+ if (options.read) {
+ const type = is_asset
+ ? options.manifest.mimeTypes[filename.slice(filename.lastIndexOf('.'))]
+ : 'text/html';
+
+ response = new Response(options.read(file), {
+ headers: type ? { 'content-type': type } : {}
+ });
+ } else {
+ response = await fetch(
+ `${event.url.origin}/${file}`,
+ /** @type {RequestInit} */ (opts)
+ );
+ }
+ } else if (is_root_relative(resolved)) {
+ if (opts.credentials !== 'omit') {
+ uses_credentials = true;
+
+ const authorization = event.request.headers.get('authorization');
+
+ // combine cookies from the initiating request with any that were
+ // added via set-cookie
+ const combined_cookies = { ...cookies };
+
+ for (const cookie of new_cookies) {
+ if (!domain_matches(event.url.hostname, cookie.domain)) continue;
+ if (!path_matches(resolved, cookie.path)) continue;
+
+ combined_cookies[cookie.name] = cookie.value;
+ }
+
+ const cookie = Object.entries(combined_cookies)
+ .map(([name, value]) => `${name}=${value}`)
+ .join('; ');
+
+ if (cookie) {
+ opts.headers.set('cookie', cookie);
+ }
+
+ if (authorization && !opts.headers.has('authorization')) {
+ opts.headers.set('authorization', authorization);
+ }
+ }
+
+ if (opts.body && typeof opts.body !== 'string') {
+ // per https://developer.mozilla.org/en-US/docs/Web/API/Request/Request, this can be a
+ // Blob, BufferSource, FormData, URLSearchParams, USVString, or ReadableStream object.
+ // non-string bodies are irksome to deal with, but luckily aren't particularly useful
+ // in this context anyway, so we take the easy route and ban them
+ throw new Error('Request body must be a string');
+ }
+
+ response = await respond(
+ new Request(new URL(requested, event.url).href, { ...opts }),
+ options,
+ {
+ ...state,
+ initiator: route
+ }
+ );
+
+ if (state.prerendering) {
+ dependency = { response, body: null };
+ state.prerendering.dependencies.set(resolved, dependency);
+ }
+ } else {
+ // external
+ if (resolved.startsWith('//')) {
+ requested = event.url.protocol + requested;
+ }
+
+ // external fetch
+ // allow cookie passthrough for "same-origin"
+ // if SvelteKit is serving my.domain.com:
+ // - domain.com WILL NOT receive cookies
+ // - my.domain.com WILL receive cookies
+ // - api.domain.dom WILL NOT receive cookies
+ // - sub.my.domain.com WILL receive cookies
+ // ports do not affect the resolution
+ // leading dot prevents mydomain.com matching domain.com
+ if (
+ `.${new URL(requested).hostname}`.endsWith(`.${event.url.hostname}`) &&
+ opts.credentials !== 'omit'
+ ) {
+ uses_credentials = true;
+
+ const cookie = event.request.headers.get('cookie');
+ if (cookie) opts.headers.set('cookie', cookie);
+ }
+
+ // we need to delete the connection header, as explained here:
+ // https://github.com/nodejs/undici/issues/1470#issuecomment-1140798467
+ // TODO this may be a case for being selective about which headers we let through
+ opts.headers.delete('connection');
+
+ const external_request = new Request(requested, /** @type {RequestInit} */ (opts));
+ response = await options.hooks.externalFetch.call(null, external_request);
+ }
+
+ const set_cookie = response.headers.get('set-cookie');
+ if (set_cookie) {
+ new_cookies.push(
+ ...splitCookiesString_1(set_cookie)
+ .map((str) => parseString_1(str))
+ );
+ }
+
+ const proxy = new Proxy(response, {
+ get(response, key, _receiver) {
+ async function text() {
+ const body = await response.text();
+
+ /** @type {import('types').ResponseHeaders} */
+ const headers = {};
+ for (const [key, value] of response.headers) {
+ // TODO skip others besides set-cookie and etag?
+ if (key !== 'set-cookie' && key !== 'etag') {
+ headers[key] = value;
+ }
+ }
+
+ if (!opts.body || typeof opts.body === 'string') {
+ const status_number = Number(response.status);
+ if (isNaN(status_number)) {
+ throw new Error(
+ `response.status is not a number. value: "${
+ response.status
+ }" type: ${typeof response.status}`
+ );
+ }
+
+ fetched.push({
+ url: requested,
+ body: opts.body,
+ response: {
+ status: status_number,
+ statusText: response.statusText,
+ headers,
+ body
+ }
+ });
+ }
+
+ if (dependency) {
+ dependency.body = body;
+ }
+
+ return body;
+ }
+
+ if (key === 'arrayBuffer') {
+ return async () => {
+ const buffer = await response.arrayBuffer();
+
+ if (dependency) {
+ dependency.body = new Uint8Array(buffer);
+ }
+
+ // TODO should buffer be inlined into the page (albeit base64'd)?
+ // any conditions in which it shouldn't be?
+
+ return buffer;
+ };
+ }
+
+ if (key === 'text') {
+ return text;
+ }
+
+ if (key === 'json') {
+ return async () => {
+ return JSON.parse(await text());
+ };
+ }
+
+ // TODO arrayBuffer?
+
+ return Reflect.get(response, key, response);
+ }
+ });
+
+ return proxy;
+ },
+ stuff: { ...stuff },
+ status: is_error ? status ?? null : null,
+ error: is_error ? error ?? null : null
+ };
+
+ if (options.dev) {
+ // TODO remove this for 1.0
+ Object.defineProperty(load_input, 'page', {
+ get: () => {
+ throw new Error('`page` in `load` functions has been replaced by `url` and `params`');
+ }
+ });
+ }
+
+ loaded = await module.load.call(null, load_input);
+
+ if (!loaded) {
+ // TODO do we still want to enforce this now that there's no fallthrough?
+ throw new Error(`load function must return a value${options.dev ? ` (${node.entry})` : ''}`);
+ }
+ } else if (shadow.body) {
+ loaded = {
+ props: shadow.body
+ };
+ } else {
+ loaded = {};
+ }
+
+ // generate __data.json files when prerendering
+ if (shadow.body && state.prerendering) {
+ const pathname = `${event.url.pathname.replace(/\/$/, '')}/__data.json`;
+
+ const dependency = {
+ response: new Response(undefined),
+ body: JSON.stringify(shadow.body)
+ };
+
+ state.prerendering.dependencies.set(pathname, dependency);
+ }
+
+ return {
+ node,
+ props: shadow.body,
+ loaded: normalize(loaded),
+ stuff: loaded.stuff || stuff,
+ fetched,
+ set_cookie_headers: new_cookies.map((new_cookie) => {
+ const { name, value, ...options } = new_cookie;
+ // @ts-expect-error
+ return serialize_1(name, value, options);
+ }),
+ uses_credentials
+ };
+}
+
+/**
+ *
+ * @param {import('types').SSRPage} route
+ * @param {import('types').RequestEvent} event
+ * @param {import('types').SSROptions} options
+ * @param {boolean} prerender
+ * @returns {Promise}
+ */
+async function load_shadow_data(route, event, options, prerender) {
+ if (!route.shadow) return {};
+
+ try {
+ const mod = await route.shadow();
+
+ if (prerender && (mod.post || mod.put || mod.del || mod.patch)) {
+ throw new Error('Cannot prerender pages that have endpoints with mutative methods');
+ }
+
+ const method = normalize_request_method(event);
+ const is_get = method === 'head' || method === 'get';
+ const handler = method === 'head' ? mod.head || mod.get : mod[method];
+
+ if (!handler && !is_get) {
+ return {
+ status: 405,
+ error: new Error(`${method} method not allowed`)
+ };
+ }
+
+ /** @type {import('types').ShadowData} */
+ const data = {
+ status: 200,
+ cookies: [],
+ body: {}
+ };
+
+ if (!is_get) {
+ const result = await handler(event);
+
+ // TODO remove for 1.0
+ // @ts-expect-error
+ if (result.fallthrough) {
+ throw new Error(
+ 'fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching'
+ );
+ }
+
+ const { status, headers, body } = validate_shadow_output(result);
+ data.status = status;
+
+ add_cookies(/** @type {string[]} */ (data.cookies), headers);
+
+ // Redirects are respected...
+ if (status >= 300 && status < 400) {
+ data.redirect = /** @type {string} */ (
+ headers instanceof Headers ? headers.get('location') : headers.location
+ );
+ return data;
+ }
+
+ // ...but 4xx and 5xx status codes _don't_ result in the error page
+ // rendering for non-GET requests — instead, we allow the page
+ // to render with any validation errors etc that were returned
+ data.body = body;
+ }
+
+ const get = (method === 'head' && mod.head) || mod.get;
+ if (get) {
+ const result = await get(event);
+
+ // TODO remove for 1.0
+ // @ts-expect-error
+ if (result.fallthrough) {
+ throw new Error(
+ 'fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching'
+ );
+ }
+
+ const { status, headers, body } = validate_shadow_output(result);
+ add_cookies(/** @type {string[]} */ (data.cookies), headers);
+ data.status = status;
+
+ if (status >= 400) {
+ data.error = new Error('Failed to load data');
+ return data;
+ }
+
+ if (status >= 300) {
+ data.redirect = /** @type {string} */ (
+ headers instanceof Headers ? headers.get('location') : headers.location
+ );
+ return data;
+ }
+
+ data.body = { ...body, ...data.body };
+ }
+
+ return data;
+ } catch (e) {
+ const error = coalesce_to_error(e);
+ options.handle_error(error, event);
+
+ return {
+ status: 500,
+ error
+ };
+ }
+}
+
+/**
+ * @param {string[]} target
+ * @param {Partial} headers
+ */
+function add_cookies(target, headers) {
+ const cookies = headers['set-cookie'];
+ if (cookies) {
+ if (Array.isArray(cookies)) {
+ target.push(...cookies);
+ } else {
+ target.push(/** @type {string} */ (cookies));
+ }
+ }
+}
+
+/**
+ * @param {import('types').ShadowEndpointOutput} result
+ */
+function validate_shadow_output(result) {
+ const { status = 200, body = {} } = result;
+ let headers = result.headers || {};
+
+ if (headers instanceof Headers) {
+ if (headers.has('set-cookie')) {
+ throw new Error(
+ 'Endpoint request handler cannot use Headers interface with Set-Cookie headers'
+ );
+ }
+ } else {
+ headers = lowercase_keys(/** @type {Record} */ (headers));
+ }
+
+ if (!is_pojo(body)) {
+ throw new Error('Body returned from endpoint request handler must be a plain object');
+ }
+
+ return { status, headers, body };
+}
+
+/**
+ * @typedef {import('./types.js').Loaded} Loaded
+ * @typedef {import('types').SSROptions} SSROptions
+ * @typedef {import('types').SSRState} SSRState
+ */
+
+/**
+ * @param {{
+ * event: import('types').RequestEvent;
+ * options: SSROptions;
+ * state: SSRState;
+ * $session: any;
+ * status: number;
+ * error: Error;
+ * resolve_opts: import('types').RequiredResolveOptions;
+ * }} opts
+ */
+async function respond_with_error({
+ event,
+ options,
+ state,
+ $session,
+ status,
+ error,
+ resolve_opts
+}) {
+ try {
+ const branch = [];
+ let stuff = {};
+
+ if (resolve_opts.ssr) {
+ const default_layout = await options.manifest._.nodes[0](); // 0 is always the root layout
+ const default_error = await options.manifest._.nodes[1](); // 1 is always the root error
+
+ const layout_loaded = /** @type {Loaded} */ (
+ await load_node({
+ event,
+ options,
+ state,
+ route: null,
+ node: default_layout,
+ $session,
+ stuff: {},
+ is_error: false,
+ is_leaf: false
+ })
+ );
+
+ const error_loaded = /** @type {Loaded} */ (
+ await load_node({
+ event,
+ options,
+ state,
+ route: null,
+ node: default_error,
+ $session,
+ stuff: layout_loaded ? layout_loaded.stuff : {},
+ is_error: true,
+ is_leaf: false,
+ status,
+ error
+ })
+ );
+
+ branch.push(layout_loaded, error_loaded);
+ stuff = error_loaded.stuff;
+ }
+
+ return await render_response({
+ options,
+ state,
+ $session,
+ page_config: {
+ hydrate: options.hydrate,
+ router: options.router
+ },
+ stuff,
+ status,
+ error,
+ branch,
+ event,
+ resolve_opts
+ });
+ } catch (err) {
+ const error = coalesce_to_error(err);
+
+ options.handle_error(error, event);
+
+ return new Response(error.stack, {
+ status: 500
+ });
+ }
+}
+
+/**
+ * @typedef {import('./types.js').Loaded} Loaded
+ * @typedef {import('types').SSRNode} SSRNode
+ * @typedef {import('types').SSROptions} SSROptions
+ * @typedef {import('types').SSRState} SSRState
+ */
+
+/**
+ * Gets the nodes, calls `load` for each of them, and then calls render to build the HTML response.
+ * @param {{
+ * event: import('types').RequestEvent;
+ * options: SSROptions;
+ * state: SSRState;
+ * $session: any;
+ * resolve_opts: import('types').RequiredResolveOptions;
+ * route: import('types').SSRPage;
+ * }} opts
+ * @returns {Promise}
+ */
+async function respond$1(opts) {
+ const { event, options, state, $session, route, resolve_opts } = opts;
+
+ /** @type {Array} */
+ let nodes;
+
+ if (!resolve_opts.ssr) {
+ return await render_response({
+ ...opts,
+ branch: [],
+ page_config: {
+ hydrate: true,
+ router: true
+ },
+ status: 200,
+ error: null,
+ event,
+ stuff: {}
+ });
+ }
+
+ try {
+ nodes = await Promise.all(
+ // we use == here rather than === because [undefined] serializes as "[null]"
+ route.a.map((n) => (n == undefined ? n : options.manifest._.nodes[n]()))
+ );
+ } catch (err) {
+ const error = coalesce_to_error(err);
+
+ options.handle_error(error, event);
+
+ return await respond_with_error({
+ event,
+ options,
+ state,
+ $session,
+ status: 500,
+ error,
+ resolve_opts
+ });
+ }
+
+ // the leaf node will be present. only layouts may be undefined
+ const leaf = /** @type {SSRNode} */ (nodes[nodes.length - 1]).module;
+
+ let page_config = get_page_config(leaf, options);
+
+ if (state.prerendering) {
+ // if the page isn't marked as prerenderable (or is explicitly
+ // marked NOT prerenderable, if `prerender.default` is `true`),
+ // then bail out at this point
+ const should_prerender = leaf.prerender ?? options.prerender.default;
+ if (!should_prerender) {
+ return new Response(undefined, {
+ status: 204
+ });
+ }
+ }
+
+ /** @type {Array} */
+ let branch = [];
+
+ /** @type {number} */
+ let status = 200;
+
+ /** @type {Error | null} */
+ let error = null;
+
+ /** @type {string[]} */
+ let set_cookie_headers = [];
+
+ let stuff = {};
+
+ ssr: {
+ for (let i = 0; i < nodes.length; i += 1) {
+ const node = nodes[i];
+
+ /** @type {Loaded | undefined} */
+ let loaded;
+
+ if (node) {
+ try {
+ loaded = await load_node({
+ ...opts,
+ node,
+ stuff,
+ is_error: false,
+ is_leaf: i === nodes.length - 1
+ });
+
+ set_cookie_headers = set_cookie_headers.concat(loaded.set_cookie_headers);
+
+ if (loaded.loaded.redirect) {
+ return with_cookies(
+ new Response(undefined, {
+ status: loaded.loaded.status,
+ headers: {
+ location: loaded.loaded.redirect
+ }
+ }),
+ set_cookie_headers
+ );
+ }
+
+ if (loaded.loaded.error) {
+ ({ status, error } = loaded.loaded);
+ }
+ } catch (err) {
+ const e = coalesce_to_error(err);
+
+ options.handle_error(e, event);
+
+ status = 500;
+ error = e;
+ }
+
+ if (loaded && !error) {
+ branch.push(loaded);
+ }
+
+ if (error) {
+ while (i--) {
+ if (route.b[i]) {
+ const index = /** @type {number} */ (route.b[i]);
+ const error_node = await options.manifest._.nodes[index]();
+
+ /** @type {Loaded} */
+ let node_loaded;
+ let j = i;
+ while (!(node_loaded = branch[j])) {
+ j -= 1;
+ }
+
+ try {
+ const error_loaded = /** @type {import('./types').Loaded} */ (
+ await load_node({
+ ...opts,
+ node: error_node,
+ stuff: node_loaded.stuff,
+ is_error: true,
+ is_leaf: false,
+ status,
+ error
+ })
+ );
+
+ if (error_loaded.loaded.error) {
+ continue;
+ }
+
+ page_config = get_page_config(error_node.module, options);
+ branch = branch.slice(0, j + 1).concat(error_loaded);
+ stuff = { ...node_loaded.stuff, ...error_loaded.stuff };
+ break ssr;
+ } catch (err) {
+ const e = coalesce_to_error(err);
+
+ options.handle_error(e, event);
+
+ continue;
+ }
+ }
+ }
+
+ // TODO backtrack until we find an __error.svelte component
+ // that we can use as the leaf node
+ // for now just return regular error page
+ return with_cookies(
+ await respond_with_error({
+ event,
+ options,
+ state,
+ $session,
+ status,
+ error,
+ resolve_opts
+ }),
+ set_cookie_headers
+ );
+ }
+ }
+
+ if (loaded && loaded.loaded.stuff) {
+ stuff = {
+ ...stuff,
+ ...loaded.loaded.stuff
+ };
+ }
+ }
+ }
+
+ try {
+ return with_cookies(
+ await render_response({
+ ...opts,
+ stuff,
+ event,
+ page_config,
+ status,
+ error,
+ branch: branch.filter(Boolean)
+ }),
+ set_cookie_headers
+ );
+ } catch (err) {
+ const error = coalesce_to_error(err);
+
+ options.handle_error(error, event);
+
+ return with_cookies(
+ await respond_with_error({
+ ...opts,
+ status: 500,
+ error
+ }),
+ set_cookie_headers
+ );
+ }
+}
+
+/**
+ * @param {import('types').SSRComponent} leaf
+ * @param {SSROptions} options
+ */
+function get_page_config(leaf, options) {
+ // TODO remove for 1.0
+ if ('ssr' in leaf) {
+ throw new Error(
+ '`export const ssr` has been removed — use the handle hook instead: https://kit.svelte.dev/docs/hooks#handle'
+ );
+ }
+
+ return {
+ router: 'router' in leaf ? !!leaf.router : options.router,
+ hydrate: 'hydrate' in leaf ? !!leaf.hydrate : options.hydrate
+ };
+}
+
+/**
+ * @param {Response} response
+ * @param {string[]} set_cookie_headers
+ */
+function with_cookies(response, set_cookie_headers) {
+ if (set_cookie_headers.length) {
+ set_cookie_headers.forEach((value) => {
+ response.headers.append('set-cookie', value);
+ });
+ }
+ return response;
+}
+
+/**
+ * @param {import('types').RequestEvent} event
+ * @param {import('types').SSRPage} route
+ * @param {import('types').SSROptions} options
+ * @param {import('types').SSRState} state
+ * @param {import('types').RequiredResolveOptions} resolve_opts
+ * @returns {Promise}
+ */
+async function render_page(event, route, options, state, resolve_opts) {
+ if (state.initiator === route) {
+ // infinite request cycle detected
+ return new Response(`Not found: ${event.url.pathname}`, {
+ status: 404
+ });
+ }
+
+ if (route.shadow) {
+ const type = negotiate(event.request.headers.get('accept') || 'text/html', [
+ 'text/html',
+ 'application/json'
+ ]);
+
+ if (type === 'application/json') {
+ return render_endpoint(event, await route.shadow());
+ }
+ }
+
+ const $session = await options.hooks.getSession(event);
+
+ return respond$1({
+ event,
+ options,
+ state,
+ $session,
+ resolve_opts,
+ route
+ });
+}
+
+/**
+ * @param {string} accept
+ * @param {string[]} types
+ */
+function negotiate(accept, types) {
+ const parts = accept
+ .split(',')
+ .map((str, i) => {
+ const match = /([^/]+)\/([^;]+)(?:;q=([0-9.]+))?/.exec(str);
+ if (match) {
+ const [, type, subtype, q = '1'] = match;
+ return { type, subtype, q: +q, i };
+ }
+
+ throw new Error(`Invalid Accept header: ${accept}`);
+ })
+ .sort((a, b) => {
+ if (a.q !== b.q) {
+ return b.q - a.q;
+ }
+
+ if ((a.subtype === '*') !== (b.subtype === '*')) {
+ return a.subtype === '*' ? 1 : -1;
+ }
+
+ if ((a.type === '*') !== (b.type === '*')) {
+ return a.type === '*' ? 1 : -1;
+ }
+
+ return a.i - b.i;
+ });
+
+ let accepted;
+ let min_priority = Infinity;
+
+ for (const mimetype of types) {
+ const [type, subtype] = mimetype.split('/');
+ const priority = parts.findIndex(
+ (part) =>
+ (part.type === type || part.type === '*') &&
+ (part.subtype === subtype || part.subtype === '*')
+ );
+
+ if (priority !== -1 && priority < min_priority) {
+ accepted = mimetype;
+ min_priority = priority;
+ }
+ }
+
+ return accepted;
+}
+
+/**
+ * @param {RegExpMatchArray} match
+ * @param {string[]} names
+ * @param {string[]} types
+ * @param {Record} matchers
+ */
+function exec(match, names, types, matchers) {
+ /** @type {Record} */
+ const params = {};
+
+ for (let i = 0; i < names.length; i += 1) {
+ const name = names[i];
+ const type = types[i];
+ const value = match[i + 1] || '';
+
+ if (type) {
+ const matcher = matchers[type];
+ if (!matcher) throw new Error(`Missing "${type}" param matcher`); // TODO do this ahead of time?
+
+ if (!matcher(value)) return;
+ }
+
+ params[name] = value;
+ }
+
+ return params;
+}
+
+const DATA_SUFFIX = '/__data.json';
+
+/** @param {{ html: string }} opts */
+const default_transform = ({ html }) => html;
+
+/** @type {import('types').Respond} */
+async function respond(request, options, state) {
+ let url = new URL(request.url);
+
+ const { parameter, allowed } = options.method_override;
+ const method_override = url.searchParams.get(parameter)?.toUpperCase();
+
+ if (method_override) {
+ if (request.method === 'POST') {
+ if (allowed.includes(method_override)) {
+ request = new Proxy(request, {
+ get: (target, property, _receiver) => {
+ if (property === 'method') return method_override;
+ return Reflect.get(target, property, target);
+ }
+ });
+ } else {
+ const verb = allowed.length === 0 ? 'enabled' : 'allowed';
+ const body = `${parameter}=${method_override} is not ${verb}. See https://kit.svelte.dev/docs/configuration#methodoverride`;
+
+ return new Response(body, {
+ status: 400
+ });
+ }
+ } else {
+ throw new Error(`${parameter}=${method_override} is only allowed with POST requests`);
+ }
+ }
+
+ let decoded;
+ try {
+ decoded = decodeURI(url.pathname);
+ } catch {
+ return new Response('Malformed URI', { status: 400 });
+ }
+
+ /** @type {import('types').SSRRoute | null} */
+ let route = null;
+
+ /** @type {Record} */
+ let params = {};
+
+ if (options.paths.base && !state.prerendering?.fallback) {
+ if (!decoded.startsWith(options.paths.base)) {
+ return new Response('Not found', { status: 404 });
+ }
+ decoded = decoded.slice(options.paths.base.length) || '/';
+ }
+
+ const is_data_request = decoded.endsWith(DATA_SUFFIX);
+
+ if (is_data_request) {
+ const data_suffix_length = DATA_SUFFIX.length - (options.trailing_slash === 'always' ? 1 : 0);
+ decoded = decoded.slice(0, -data_suffix_length) || '/';
+ url = new URL(url.origin + url.pathname.slice(0, -data_suffix_length) + url.search);
+ }
+
+ if (!state.prerendering?.fallback) {
+ const matchers = await options.manifest._.matchers();
+
+ for (const candidate of options.manifest._.routes) {
+ const match = candidate.pattern.exec(decoded);
+ if (!match) continue;
+
+ const matched = exec(match, candidate.names, candidate.types, matchers);
+ if (matched) {
+ route = candidate;
+ params = decode_params(matched);
+ break;
+ }
+ }
+ }
+
+ if (route) {
+ if (route.type === 'page') {
+ const normalized = normalize_path(url.pathname, options.trailing_slash);
+
+ if (normalized !== url.pathname && !state.prerendering?.fallback) {
+ return new Response(undefined, {
+ status: 301,
+ headers: {
+ 'x-sveltekit-normalize': '1',
+ location:
+ // ensure paths starting with '//' are not treated as protocol-relative
+ (normalized.startsWith('//') ? url.origin + normalized : normalized) +
+ (url.search === '?' ? '' : url.search)
+ }
+ });
+ }
+ } else if (is_data_request) {
+ // requesting /__data.json should fail for a standalone endpoint
+ return new Response(undefined, {
+ status: 404
+ });
+ }
+ }
+
+ /** @type {import('types').RequestEvent} */
+ const event = {
+ get clientAddress() {
+ if (!state.getClientAddress) {
+ throw new Error(
+ `${
+ import.meta.env.VITE_SVELTEKIT_ADAPTER_NAME
+ } does not specify getClientAddress. Please raise an issue`
+ );
+ }
+
+ Object.defineProperty(event, 'clientAddress', {
+ value: state.getClientAddress()
+ });
+
+ return event.clientAddress;
+ },
+ locals: {},
+ params,
+ platform: state.platform,
+ request,
+ routeId: route && route.id,
+ url
+ };
+
+ // TODO remove this for 1.0
+ /**
+ * @param {string} property
+ * @param {string} replacement
+ * @param {string} suffix
+ */
+ const removed = (property, replacement, suffix = '') => ({
+ get: () => {
+ throw new Error(`event.${property} has been replaced by event.${replacement}` + suffix);
+ }
+ });
+
+ const details = '. See https://github.com/sveltejs/kit/pull/3384 for details';
+
+ const body_getter = {
+ get: () => {
+ throw new Error(
+ 'To access the request body use the text/json/arrayBuffer/formData methods, e.g. `body = await request.json()`' +
+ details
+ );
+ }
+ };
+
+ Object.defineProperties(event, {
+ method: removed('method', 'request.method', details),
+ headers: removed('headers', 'request.headers', details),
+ origin: removed('origin', 'url.origin'),
+ path: removed('path', 'url.pathname'),
+ query: removed('query', 'url.searchParams'),
+ body: body_getter,
+ rawBody: body_getter
+ });
+
+ /** @type {import('types').RequiredResolveOptions} */
+ let resolve_opts = {
+ ssr: true,
+ transformPage: default_transform
+ };
+
+ // TODO match route before calling handle?
+
+ try {
+ const response = await options.hooks.handle({
+ event,
+ resolve: async (event, opts) => {
+ if (opts) {
+ resolve_opts = {
+ ssr: opts.ssr !== false,
+ transformPage: opts.transformPage || default_transform
+ };
+ }
+
+ if (state.prerendering?.fallback) {
+ return await render_response({
+ event,
+ options,
+ state,
+ $session: await options.hooks.getSession(event),
+ page_config: { router: true, hydrate: true },
+ stuff: {},
+ status: 200,
+ error: null,
+ branch: [],
+ resolve_opts: {
+ ...resolve_opts,
+ ssr: false
+ }
+ });
+ }
+
+ if (route) {
+ /** @type {Response} */
+ let response;
+
+ if (is_data_request && route.type === 'page' && route.shadow) {
+ response = await render_endpoint(event, await route.shadow());
+
+ // loading data for a client-side transition is a special case
+ if (request.headers.has('x-sveltekit-load')) {
+ // since redirects are opaque to the browser, we need to repackage
+ // 3xx responses as 200s with a custom header
+ if (response.status >= 300 && response.status < 400) {
+ const location = response.headers.get('location');
+
+ if (location) {
+ const headers = new Headers(response.headers);
+ headers.set('x-sveltekit-location', location);
+ response = new Response(undefined, {
+ status: 204,
+ headers
+ });
+ }
+ }
+ }
+ } else {
+ response =
+ route.type === 'endpoint'
+ ? await render_endpoint(event, await route.load())
+ : await render_page(event, route, options, state, resolve_opts);
+ }
+
+ if (response) {
+ // respond with 304 if etag matches
+ if (response.status === 200 && response.headers.has('etag')) {
+ let if_none_match_value = request.headers.get('if-none-match');
+
+ // ignore W/ prefix https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match#directives
+ if (if_none_match_value?.startsWith('W/"')) {
+ if_none_match_value = if_none_match_value.substring(2);
+ }
+
+ const etag = /** @type {string} */ (response.headers.get('etag'));
+
+ if (if_none_match_value === etag) {
+ const headers = new Headers({ etag });
+
+ // https://datatracker.ietf.org/doc/html/rfc7232#section-4.1
+ for (const key of [
+ 'cache-control',
+ 'content-location',
+ 'date',
+ 'expires',
+ 'vary'
+ ]) {
+ const value = response.headers.get(key);
+ if (value) headers.set(key, value);
+ }
+
+ return new Response(undefined, {
+ status: 304,
+ headers
+ });
+ }
+ }
+
+ return response;
+ }
+ }
+
+ // if this request came direct from the user, rather than
+ // via a `fetch` in a `load`, render a 404 page
+ if (!state.initiator) {
+ const $session = await options.hooks.getSession(event);
+ return await respond_with_error({
+ event,
+ options,
+ state,
+ $session,
+ status: 404,
+ error: new Error(`Not found: ${event.url.pathname}`),
+ resolve_opts
+ });
+ }
+
+ if (state.prerendering) {
+ return new Response('not found', { status: 404 });
+ }
+
+ // we can't load the endpoint from our own manifest,
+ // so we need to make an actual HTTP request
+ return await fetch(request);
+ },
+
+ // TODO remove for 1.0
+ // @ts-expect-error
+ get request() {
+ throw new Error('request in handle has been replaced with event' + details);
+ }
+ });
+
+ // TODO for 1.0, change the error message to point to docs rather than PR
+ if (response && !(response instanceof Response)) {
+ throw new Error('handle must return a Response object' + details);
+ }
+
+ return response;
+ } catch (/** @type {unknown} */ e) {
+ const error = coalesce_to_error(e);
+
+ options.handle_error(error, event);
+
+ try {
+ const $session = await options.hooks.getSession(event);
+ return await respond_with_error({
+ event,
+ options,
+ state,
+ $session,
+ status: 500,
+ error,
+ resolve_opts
+ });
+ } catch (/** @type {unknown} */ e) {
+ const error = coalesce_to_error(e);
+
+ return new Response(options.dev ? error.stack : error.message, {
+ status: 500
+ });
+ }
+ }
+}
+
+export { respond };
diff --git a/frontend/.svelte-kit/tsconfig.json b/frontend/.svelte-kit/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..c8dfa42c35a55ab7a3518aa89bd0d0ebd0a6f4d0
--- /dev/null
+++ b/frontend/.svelte-kit/tsconfig.json
@@ -0,0 +1,36 @@
+{
+ "compilerOptions": {
+ "baseUrl": "..",
+ "paths": {
+ "$lib": [
+ "src/lib"
+ ],
+ "$lib/*": [
+ "src/lib/*"
+ ]
+ },
+ "rootDirs": [
+ "..",
+ "./types"
+ ],
+ "importsNotUsedAsValues": "error",
+ "isolatedModules": true,
+ "preserveValueImports": true,
+ "lib": [
+ "esnext",
+ "DOM"
+ ],
+ "moduleResolution": "node",
+ "module": "esnext",
+ "target": "esnext"
+ },
+ "include": [
+ "../src/**/*.js",
+ "../src/**/*.ts",
+ "../src/**/*.svelte"
+ ],
+ "exclude": [
+ "../node_modules/**",
+ "./**"
+ ]
+}
\ No newline at end of file
diff --git a/frontend/.svelte-kit/types/src/routes/__types/__layout.d.ts b/frontend/.svelte-kit/types/src/routes/__types/__layout.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..16e375e095573ad0fb117290b88799922456d7df
--- /dev/null
+++ b/frontend/.svelte-kit/types/src/routes/__types/__layout.d.ts
@@ -0,0 +1,7 @@
+// this file is auto-generated
+import type { Load as GenericLoad } from '@sveltejs/kit';
+
+export type Load<
+ InputProps extends Record = Record,
+ OutputProps extends Record = InputProps
+> = GenericLoad<{}, InputProps, OutputProps>;
\ No newline at end of file
diff --git a/frontend/.svelte-kit/types/src/routes/__types/index.d.ts b/frontend/.svelte-kit/types/src/routes/__types/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..16e375e095573ad0fb117290b88799922456d7df
--- /dev/null
+++ b/frontend/.svelte-kit/types/src/routes/__types/index.d.ts
@@ -0,0 +1,7 @@
+// this file is auto-generated
+import type { Load as GenericLoad } from '@sveltejs/kit';
+
+export type Load<
+ InputProps extends Record = Record,
+ OutputProps extends Record = InputProps
+> = GenericLoad<{}, InputProps, OutputProps>;
\ No newline at end of file
diff --git a/frontend/README.md b/frontend/README.md
new file mode 100755
index 0000000000000000000000000000000000000000..374efec4c10bf004b18a3faa32566c225a8377af
--- /dev/null
+++ b/frontend/README.md
@@ -0,0 +1,38 @@
+# create-svelte
+
+Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).
+
+## Creating a project
+
+If you're seeing this, you've probably already done this step. Congrats!
+
+```bash
+# create a new project in the current directory
+npm init svelte
+
+# create a new project in my-app
+npm init svelte my-app
+```
+
+## Developing
+
+Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
+
+```bash
+npm run dev
+
+# or start the server and open the app in a new browser tab
+npm run dev -- --open
+```
+
+## Building
+
+To create a production version of your app:
+
+```bash
+npm run build
+```
+
+You can preview the production build with `npm run preview`.
+
+> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.
diff --git a/frontend/build/_app/immutable/assets/pages/__layout.svelte-dcfcba4b.css b/frontend/build/_app/immutable/assets/pages/__layout.svelte-dcfcba4b.css
new file mode 100644
index 0000000000000000000000000000000000000000..3649d9d937b6bf3a9cb392a569134b81db80736a
--- /dev/null
+++ b/frontend/build/_app/immutable/assets/pages/__layout.svelte-dcfcba4b.css
@@ -0,0 +1 @@
+@import"https://fonts.googleapis.com/css2?family=Open+Sans:wght@100;200;300;400;500;600;700;800&display=swap";*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}html{font-family:Open Sans,sans-serif}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where([class~="lead"]):not(:where([class~="not-prose"] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~="not-prose"] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~="not-prose"] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(ol):not(:where([class~="not-prose"] *)){list-style-type:decimal;padding-left:1.625em}.prose :where(ol[type="A"]):not(:where([class~="not-prose"] *)){list-style-type:upper-alpha}.prose :where(ol[type="a"]):not(:where([class~="not-prose"] *)){list-style-type:lower-alpha}.prose :where(ol[type="A" s]):not(:where([class~="not-prose"] *)){list-style-type:upper-alpha}.prose :where(ol[type="a" s]):not(:where([class~="not-prose"] *)){list-style-type:lower-alpha}.prose :where(ol[type="I"]):not(:where([class~="not-prose"] *)){list-style-type:upper-roman}.prose :where(ol[type="i"]):not(:where([class~="not-prose"] *)){list-style-type:lower-roman}.prose :where(ol[type="I" s]):not(:where([class~="not-prose"] *)){list-style-type:upper-roman}.prose :where(ol[type="i" s]):not(:where([class~="not-prose"] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~="not-prose"] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~="not-prose"] *)){list-style-type:disc;padding-left:1.625em}.prose :where(ol > li):not(:where([class~="not-prose"] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul > li):not(:where([class~="not-prose"] *))::marker{color:var(--tw-prose-bullets)}.prose :where(hr):not(:where([class~="not-prose"] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~="not-prose"] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"\201c""\201d""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose :where(h1):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~="not-prose"] *)){font-weight:900}.prose :where(h2):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~="not-prose"] *)){font-weight:800}.prose :where(h3):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~="not-prose"] *)){font-weight:700}.prose :where(h4):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~="not-prose"] *)){font-weight:700}.prose :where(figure > *):not(:where([class~="not-prose"] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~="not-prose"] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose :where(a code):not(:where([class~="not-prose"] *)){color:var(--tw-prose-links)}.prose :where(pre code):not(:where([class~="not-prose"] *)):before{content:none}.prose :where(pre code):not(:where([class~="not-prose"] *)):after{content:none}.prose :where(table):not(:where([class~="not-prose"] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~="not-prose"] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~="not-prose"] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~="not-prose"] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~="not-prose"] *)){vertical-align:baseline;padding:.5714286em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(p):not(:where([class~="not-prose"] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(img):not(:where([class~="not-prose"] *)){margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~="not-prose"] *)){margin-top:2em;margin-bottom:2em}.prose :where(figure):not(:where([class~="not-prose"] *)){margin-top:2em;margin-bottom:2em}.prose :where(h2 code):not(:where([class~="not-prose"] *)){font-size:.875em}.prose :where(h3 code):not(:where([class~="not-prose"] *)){font-size:.9em}.prose :where(li):not(:where([class~="not-prose"] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol > li):not(:where([class~="not-prose"] *)){padding-left:.375em}.prose :where(ul > li):not(:where([class~="not-prose"] *)){padding-left:.375em}.prose>:where(ul > li p):not(:where([class~="not-prose"] *)){margin-top:.75em;margin-bottom:.75em}.prose>:where(ul > li > *:first-child):not(:where([class~="not-prose"] *)){margin-top:1.25em}.prose>:where(ul > li > *:last-child):not(:where([class~="not-prose"] *)){margin-bottom:1.25em}.prose>:where(ol > li > *:first-child):not(:where([class~="not-prose"] *)){margin-top:1.25em}.prose>:where(ol > li > *:last-child):not(:where([class~="not-prose"] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~="not-prose"] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(hr + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(h2 + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(h3 + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(h4 + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~="not-prose"] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~="not-prose"] *)){padding-right:0}.prose :where(tbody td:first-child):not(:where([class~="not-prose"] *)){padding-left:0}.prose :where(tbody td:last-child):not(:where([class~="not-prose"] *)){padding-right:0}.prose>:where(:first-child):not(:where([class~="not-prose"] *)){margin-top:0}.prose>:where(:last-child):not(:where([class~="not-prose"] *)){margin-bottom:0}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0px}.left-0{left:0px}.top-0{top:0px}.right-0{right:0px}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.mt-6{margin-top:1.5rem}.mb-2{margin-bottom:.5rem}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.aspect-\[512\/512\]{aspect-ratio:512/512}.h-0{height:0px}.h-full{height:100%}.max-h-\[9rem\]{max-height:9rem}.max-h-24{max-height:6rem}.w-0{width:0px}.w-full{width:100%}.max-w-full{max-width:100%}.max-w-\[3rem\]{max-width:3rem}.max-w-screen-md{max-width:768px}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes spin{to{transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-y{scroll-snap-type:y var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness: mandatory}.snap-start{scroll-snap-align:start}.snap-always{scroll-snap-stop:always}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[2fr_1\.5fr\]{grid-template-columns:2fr 1.5fr}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-1{gap:.25rem}.overflow-hidden{overflow:hidden}.overflow-clip{overflow:clip}.overflow-scroll{overflow:scroll}.overflow-x-scroll{overflow-x:scroll}.whitespace-nowrap{white-space:nowrap}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-gray-500{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.bg-\[rgb\(11\,15\,25\)\]{--tw-bg-opacity: 1;background-color:rgb(11 15 25 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.p-3{padding:.75rem}.p-1{padding:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pl-2{padding-left:.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.leading-6{line-height:1.5rem}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-30{opacity:.3}.outline{outline-style:solid}.outline-2{outline-width:2px}.outline-offset-\[-2px\]{outline-offset:-2px}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:outline:hover{outline-style:solid}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}.disabled\:opacity-50:disabled{opacity:.5}@media (prefers-color-scheme: dark){.dark\:prose-invert{--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}.dark\:border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.dark\:border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.dark\:bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:placeholder-gray-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}}@media (min-width: 530px){.sm\:max-h-\[none\]{max-height:none}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}}
diff --git a/frontend/build/_app/immutable/assets/pages/index.svelte-65a37285.css b/frontend/build/_app/immutable/assets/pages/index.svelte-65a37285.css
new file mode 100644
index 0000000000000000000000000000000000000000..8c631f3862d39e418f6ef1b2c088e27e45050194
--- /dev/null
+++ b/frontend/build/_app/immutable/assets/pages/index.svelte-65a37285.css
@@ -0,0 +1 @@
+form.svelte-1gwcbp.svelte-1gwcbp{width:100%;overflow:hidden}.samples.svelte-1gwcbp.svelte-1gwcbp{display:flex;scroll-snap-type:x var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;flex-wrap:nowrap;gap:.25rem;overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none}.samples.svelte-1gwcbp.svelte-1gwcbp::-webkit-scrollbar{display:none}input[type=radio].svelte-1gwcbp.svelte-1gwcbp{position:absolute;display:none;height:0px;width:0px;opacity:0}input[type=radio].svelte-1gwcbp.svelte-1gwcbp:disabled{opacity:.5}input[type=radio].svelte-1gwcbp:checked~label.svelte-1gwcbp{outline-style:solid;outline-width:2px;outline-color:#eab308}input[type=radio].svelte-1gwcbp:disabled+label.svelte-1gwcbp{opacity:.5}label.svelte-1gwcbp.svelte-1gwcbp{display:flex;cursor:pointer;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}label.svelte-1gwcbp.svelte-1gwcbp:hover{outline-style:solid}img.svelte-1gwcbp.svelte-1gwcbp{max-height:6rem;max-width:none}.colors.svelte-1oy4poo.svelte-1oy4poo{display:grid;max-height:9rem;scroll-snap-type:y var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;overflow:scroll}@media (min-width: 530px){.colors.svelte-1oy4poo.svelte-1oy4poo{max-height:none;grid-template-columns:repeat(3,minmax(0,1fr))}}.colors.svelte-1oy4poo span.svelte-1oy4poo{margin-left:.5rem}.colors.svelte-1oy4poo svg.svelte-1oy4poo{display:block}input[type=radio].svelte-1oy4poo.svelte-1oy4poo{position:absolute;display:none;height:0px;width:0px;opacity:0}input[type=radio].svelte-1oy4poo:checked~label.svelte-1oy4poo{outline-style:solid;outline-width:2px;outline-color:#eab308}label.svelte-1oy4poo.svelte-1oy4poo{display:flex;cursor:pointer;white-space:nowrap;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}label.svelte-1oy4poo.svelte-1oy4poo:hover{outline-style:solid}.brush.svelte-1oy4poo.svelte-1oy4poo{display:flex}select.svelte-uoay71.svelte-uoay71,button.svelte-uoay71.svelte-uoay71,input.svelte-uoay71.svelte-uoay71{border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))}select.svelte-uoay71.svelte-uoay71:focus,button.svelte-uoay71.svelte-uoay71:focus,input.svelte-uoay71.svelte-uoay71:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity)) }select.svelte-uoay71.svelte-uoay71:disabled,button.svelte-uoay71.svelte-uoay71:disabled,input.svelte-uoay71.svelte-uoay71:disabled{opacity:.5}@media (prefers-color-scheme: dark){select.svelte-uoay71.svelte-uoay71,button.svelte-uoay71.svelte-uoay71,input.svelte-uoay71.svelte-uoay71{--tw-border-opacity:1;border-color:rgb(75 85 99 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(55 65 81 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}select.svelte-uoay71.svelte-uoay71::-moz-placeholder,button.svelte-uoay71.svelte-uoay71::-moz-placeholder,input.svelte-uoay71.svelte-uoay71::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}select.svelte-uoay71.svelte-uoay71::placeholder,button.svelte-uoay71.svelte-uoay71::placeholder,input.svelte-uoay71.svelte-uoay71::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}select.svelte-uoay71.svelte-uoay71:focus,button.svelte-uoay71.svelte-uoay71:focus,input.svelte-uoay71.svelte-uoay71:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity)) }}input.svelte-uoay71:disabled+label.svelte-uoay71{opacity:.5}input.svelte-uoay71.svelte-uoay71{padding-left:.75rem}.canvas.svelte-pr47cz{z-index:0;aspect-ratio:512/512;width:100%;max-width:100%;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}@media (prefers-color-scheme: dark){.canvas.svelte-pr47cz{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}}.brush.svelte-pr47cz{pointer-events:none;position:absolute;z-index:10;--tw-translate-x:-50%;--tw-translate-y:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.label.svelte-pr47cz{pointer-events:none;position:absolute;top:0px;left:0px;z-index:20;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-left:.5rem;padding-right:.5rem;font-size:1rem;line-height:1.5rem;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity));color:#fff;font-weight:bolder;-webkit-text-stroke:1px black;-webkit-text-fill-color:white}.image.svelte-1t0h0rs{z-index:0;box-sizing:border-box;aspect-ratio:512/512;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}@media (prefers-color-scheme: dark){.image.svelte-1t0h0rs{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}}.loading.svelte-1t0h0rs{position:absolute;top:0px;left:0px;right:0px;bottom:0px;display:flex;flex-direction:column;align-items:center;justify-content:center}.drawings.svelte-237ry5{display:grid;grid-template-columns:2fr 1.5fr;place-items:center}@media (min-width: 530px){.drawings.svelte-237ry5{grid-template-columns:repeat(2,minmax(0,1fr))}}button.svelte-237ry5{border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))}button.svelte-237ry5:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity)) }button.svelte-237ry5:disabled{opacity:.5}@media (prefers-color-scheme: dark){button.svelte-237ry5{--tw-border-opacity:1;border-color:rgb(75 85 99 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(55 65 81 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}button.svelte-237ry5::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}button.svelte-237ry5::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}button.svelte-237ry5:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity)) }}
diff --git a/frontend/build/_app/immutable/chunks/index-bcf2726a.js b/frontend/build/_app/immutable/chunks/index-bcf2726a.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d47b275bdcb23c7324444798fdc9687822aeb28
--- /dev/null
+++ b/frontend/build/_app/immutable/chunks/index-bcf2726a.js
@@ -0,0 +1 @@
+function N(){}function H(t,n){for(const e in n)t[e]=n[e];return t}function B(t){return t()}function M(){return Object.create(null)}function p(t){t.forEach(B)}function I(t){return typeof t=="function"}function lt(t,n){return t!=t?n==n:t!==n||t&&typeof t=="object"||typeof t=="function"}let g;function ot(t,n){return g||(g=document.createElement("a")),g.href=n,t===g.href}function W(t){return Object.keys(t).length===0}function G(t,...n){if(t==null)return N;const e=t.subscribe(...n);return e.unsubscribe?()=>e.unsubscribe():e}function st(t,n,e){t.$$.on_destroy.push(G(n,e))}function at(t,n,e,i){if(t){const c=L(t,n,e,i);return t[0](c)}}function L(t,n,e,i){return t[1]&&i?H(e.ctx.slice(),t[1](i(n))):e.ctx}function ft(t,n,e,i){if(t[2]&&i){const c=t[2](i(e));if(n.dirty===void 0)return c;if(typeof c=="object"){const s=[],u=Math.max(n.dirty.length,c.length);for(let l=0;l32){const n=[],e=t.ctx.length/32;for(let i=0;i>1);e(c)<=i?t=c+1:n=c}return t}function R(t){if(t.hydrate_init)return;t.hydrate_init=!0;let n=t.childNodes;if(t.nodeName==="HEAD"){const r=[];for(let o=0;o0&&n[e[c]].claim_order<=o?c+1:Q(1,c,y=>n[e[y]].claim_order,o))-1;i[r]=e[f]+1;const a=f+1;e[a]=r,c=Math.max(a,c)}const s=[],u=[];let l=n.length-1;for(let r=e[c]+1;r!=0;r=i[r-1]){for(s.push(n[r-1]);l>=r;l--)u.push(n[l]);l--}for(;l>=0;l--)u.push(n[l]);s.reverse(),u.sort((r,o)=>r.claim_order-o.claim_order);for(let r=0,o=0;r=s[o].claim_order;)o++;const f=ot.removeEventListener(n,e,i)}function xt(t){return function(n){return n.preventDefault(),t.call(this,n)}}function $t(t,n,e){e==null?t.removeAttribute(n):t.getAttribute(n)!==e&&t.setAttribute(n,e)}function wt(t){return t===""?null:+t}function Z(t){return Array.from(t.childNodes)}function tt(t){t.claim_info===void 0&&(t.claim_info={last_index:0,total_claimed:0})}function O(t,n,e,i,c=!1){tt(t);const s=(()=>{for(let u=t.claim_info.last_index;u=0;u--){const l=t[u];if(n(l)){const r=e(l);return r===void 0?t.splice(u,1):t[u]=r,c?r===void 0&&t.claim_info.last_index--:t.claim_info.last_index=u,l}}return i()})();return s.claim_order=t.claim_info.total_claimed,t.claim_info.total_claimed+=1,s}function P(t,n,e,i){return O(t,c=>c.nodeName===n,c=>{const s=[];for(let u=0;uc.removeAttribute(u))},()=>i(n))}function vt(t,n,e){return P(t,n,e,X)}function Et(t,n,e){return P(t,n,e,Y)}function nt(t,n){return O(t,e=>e.nodeType===3,e=>{const i=""+n;if(e.data.startsWith(i)){if(e.data.length!==i.length)return e.splitText(i.length)}else e.data=i},()=>j(n),!0)}function kt(t){return nt(t," ")}function Nt(t,n){n=""+n,t.wholeText!==n&&(t.data=n)}function jt(t,n){t.value=n==null?"":n}function St(t,n,e,i){e===null?t.style.removeProperty(n):t.style.setProperty(n,e,i?"important":"")}let m;function h(t){m=t}function S(){if(!m)throw new Error("Function called outside component initialization");return m}function At(t){S().$$.on_mount.push(t)}function Ct(t){S().$$.after_update.push(t)}function Mt(t,n){return S().$$.context.set(t,n),n}const d=[],T=[],x=[],q=[],D=Promise.resolve();let E=!1;function z(){E||(E=!0,D.then(F))}function Tt(){return z(),D}function k(t){x.push(t)}const v=new Set;let b=0;function F(){const t=m;do{for(;b{$.delete(t),i&&(e&&t.d(1),i())}),t.o(n)}}function Ot(t,n){const e={},i={},c={$$scope:1};let s=t.length;for(;s--;){const u=t[s],l=n[s];if(l){for(const r in u)r in l||(i[r]=1);for(const r in l)c[r]||(e[r]=l[r],c[r]=1);t[s]=l}else for(const r in u)c[r]=1}for(const u in i)u in e||(e[u]=void 0);return e}function Pt(t){return typeof t=="object"&&t!==null?t:{}}function Dt(t){t&&t.c()}function zt(t,n){t&&t.l(n)}function rt(t,n,e,i){const{fragment:c,on_mount:s,on_destroy:u,after_update:l}=t.$$;c&&c.m(n,e),i||k(()=>{const r=s.map(B).filter(I);u?u.push(...r):p(r),t.$$.on_mount=[]}),l.forEach(k)}function ct(t,n){const e=t.$$;e.fragment!==null&&(p(e.on_destroy),e.fragment&&e.fragment.d(n),e.on_destroy=e.fragment=null,e.ctx=[])}function ut(t,n){t.$$.dirty[0]===-1&&(d.push(t),z(),t.$$.dirty.fill(0)),t.$$.dirty[n/31|0]|=1<{const C=A.length?A[0]:y;return o.ctx&&c(o.ctx[a],o.ctx[a]=C)&&(!o.skip_bound&&o.bound[a]&&o.bound[a](C),f&&ut(t,a)),y}):[],o.update(),f=!0,p(o.before_update),o.fragment=i?i(o.ctx):!1,n.target){if(n.hydrate){J();const a=Z(n.target);o.fragment&&o.fragment.l(a),a.forEach(V)}else o.fragment&&o.fragment.c();n.intro&&it(t.$$.fragment),rt(t,n.target,n.anchor,n.customElement),K(),F()}h(r)}class Ht{$destroy(){ct(this,1),this.$destroy=N}$on(n,e){const i=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return i.push(e),()=>{const c=i.indexOf(e);c!==-1&&i.splice(c,1)}}$set(n){this.$$set&&!W(n)&&(this.$$.skip_bound=!0,this.$$set(n),this.$$.skip_bound=!1)}}export{Pt as A,ct as B,H as C,Tt as D,N as E,at as F,_t as G,dt as H,ft as I,U as J,ot as K,bt as L,pt as M,st as N,ht as O,Y as P,Et as Q,jt as R,Ht as S,xt as T,p as U,wt as V,T as W,Z as a,$t as b,vt as c,V as d,X as e,St as f,mt as g,nt as h,Ft as i,Nt as j,yt as k,gt as l,kt as m,qt as n,Lt as o,Bt as p,it as q,Mt as r,lt as s,j as t,Ct as u,At as v,Dt as w,zt as x,rt as y,Ot as z};
diff --git a/frontend/build/_app/immutable/chunks/paths-d3bcbd10.js b/frontend/build/_app/immutable/chunks/paths-d3bcbd10.js
new file mode 100644
index 0000000000000000000000000000000000000000..0911f4acc85b0ac94f242f9bc4ab5effba088495
--- /dev/null
+++ b/frontend/build/_app/immutable/chunks/paths-d3bcbd10.js
@@ -0,0 +1 @@
+import{E as f,s as p}from"./index-bcf2726a.js";const n=[];function _(t,b=f){let o;const i=new Set;function r(e){if(p(t,e)&&(t=e,o)){const c=!n.length;for(const s of i)s[1](),n.push(s,t);if(c){for(let s=0;s{i.delete(s),i.size===0&&(o(),o=null)}}return{set:r,update:a,subscribe:l}}let u="",d="";function g(t){u=t.base,d=t.assets||u}export{d as a,u as b,g as s,_ as w};
diff --git a/frontend/build/_app/immutable/error.svelte-d9523301.js b/frontend/build/_app/immutable/error.svelte-d9523301.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c200845989d5bbde3173a928c2ca48d13743a81
--- /dev/null
+++ b/frontend/build/_app/immutable/error.svelte-d9523301.js
@@ -0,0 +1 @@
+import{S as w,i as y,s as z,e as E,t as v,c as d,a as b,h as P,d as o,g as u,J as R,j as N,k as S,l as C,m as j,E as H}from"./chunks/index-bcf2726a.js";function J(r){let l,t=r[1].frame+"",a;return{c(){l=E("pre"),a=v(t)},l(f){l=d(f,"PRE",{});var s=b(l);a=P(s,t),s.forEach(o)},m(f,s){u(f,l,s),R(l,a)},p(f,s){s&2&&t!==(t=f[1].frame+"")&&N(a,t)},d(f){f&&o(l)}}}function h(r){let l,t=r[1].stack+"",a;return{c(){l=E("pre"),a=v(t)},l(f){l=d(f,"PRE",{});var s=b(l);a=P(s,t),s.forEach(o)},m(f,s){u(f,l,s),R(l,a)},p(f,s){s&2&&t!==(t=f[1].stack+"")&&N(a,t)},d(f){f&&o(l)}}}function A(r){let l,t,a,f,s=r[1].message+"",c,k,n,p,i=r[1].frame&&J(r),_=r[1].stack&&h(r);return{c(){l=E("h1"),t=v(r[0]),a=S(),f=E("pre"),c=v(s),k=S(),i&&i.c(),n=S(),_&&_.c(),p=C()},l(e){l=d(e,"H1",{});var m=b(l);t=P(m,r[0]),m.forEach(o),a=j(e),f=d(e,"PRE",{});var q=b(f);c=P(q,s),q.forEach(o),k=j(e),i&&i.l(e),n=j(e),_&&_.l(e),p=C()},m(e,m){u(e,l,m),R(l,t),u(e,a,m),u(e,f,m),R(f,c),u(e,k,m),i&&i.m(e,m),u(e,n,m),_&&_.m(e,m),u(e,p,m)},p(e,[m]){m&1&&N(t,e[0]),m&2&&s!==(s=e[1].message+"")&&N(c,s),e[1].frame?i?i.p(e,m):(i=J(e),i.c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null),e[1].stack?_?_.p(e,m):(_=h(e),_.c(),_.m(p.parentNode,p)):_&&(_.d(1),_=null)},i:H,o:H,d(e){e&&o(l),e&&o(a),e&&o(f),e&&o(k),i&&i.d(e),e&&o(n),_&&_.d(e),e&&o(p)}}}function F({error:r,status:l}){return{props:{error:r,status:l}}}function B(r,l,t){let{status:a}=l,{error:f}=l;return r.$$set=s=>{"status"in s&&t(0,a=s.status),"error"in s&&t(1,f=s.error)},[a,f]}class G extends w{constructor(l){super(),y(this,l,B,A,z,{status:0,error:1})}}export{G as default,F as load};
diff --git a/frontend/build/_app/immutable/manifest.json b/frontend/build/_app/immutable/manifest.json
new file mode 100644
index 0000000000000000000000000000000000000000..1e0d274788a5e1c1c28f55078d90195bc994d4a1
--- /dev/null
+++ b/frontend/build/_app/immutable/manifest.json
@@ -0,0 +1,59 @@
+{
+ ".svelte-kit/runtime/client/start.js": {
+ "file": "start-a60c2789.js",
+ "src": ".svelte-kit/runtime/client/start.js",
+ "isEntry": true,
+ "imports": [
+ "_index-bcf2726a.js",
+ "_paths-d3bcbd10.js"
+ ],
+ "dynamicImports": [
+ "src/routes/__layout.svelte",
+ ".svelte-kit/runtime/components/error.svelte",
+ "src/routes/index.svelte"
+ ]
+ },
+ "src/routes/__layout.svelte": {
+ "file": "pages/__layout.svelte-0c386344.js",
+ "src": "src/routes/__layout.svelte",
+ "isEntry": true,
+ "isDynamicEntry": true,
+ "imports": [
+ "_index-bcf2726a.js"
+ ],
+ "css": [
+ "assets/pages/__layout.svelte-dcfcba4b.css"
+ ]
+ },
+ ".svelte-kit/runtime/components/error.svelte": {
+ "file": "error.svelte-d9523301.js",
+ "src": ".svelte-kit/runtime/components/error.svelte",
+ "isEntry": true,
+ "isDynamicEntry": true,
+ "imports": [
+ "_index-bcf2726a.js"
+ ]
+ },
+ "src/routes/index.svelte": {
+ "file": "pages/index.svelte-6350336a.js",
+ "src": "src/routes/index.svelte",
+ "isEntry": true,
+ "isDynamicEntry": true,
+ "imports": [
+ "_index-bcf2726a.js",
+ "_paths-d3bcbd10.js"
+ ],
+ "css": [
+ "assets/pages/index.svelte-65a37285.css"
+ ]
+ },
+ "_index-bcf2726a.js": {
+ "file": "chunks/index-bcf2726a.js"
+ },
+ "_paths-d3bcbd10.js": {
+ "file": "chunks/paths-d3bcbd10.js",
+ "imports": [
+ "_index-bcf2726a.js"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/frontend/build/_app/immutable/pages/__layout.svelte-0c386344.js b/frontend/build/_app/immutable/pages/__layout.svelte-0c386344.js
new file mode 100644
index 0000000000000000000000000000000000000000..5bd9fff7700f9fb724b4381621fa70e18b5e4368
--- /dev/null
+++ b/frontend/build/_app/immutable/pages/__layout.svelte-0c386344.js
@@ -0,0 +1 @@
+import{S as n,i,s as p,F as l,G as w,H as c,I as d,q as h,o as m}from"../chunks/index-bcf2726a.js";function g(s){let r;const a=s[1].default,t=l(a,s,s[0],null);return{c(){t&&t.c()},l(e){t&&t.l(e)},m(e,o){t&&t.m(e,o),r=!0},p(e,[o]){t&&t.p&&(!r||o&1)&&w(t,a,e,e[0],r?d(a,e[0],o,null):c(e[0]),null)},i(e){r||(h(t,e),r=!0)},o(e){m(t,e),r=!1},d(e){t&&t.d(e)}}}function b(s,r,a){let{$$slots:t={},$$scope:e}=r;return s.$$set=o=>{"$$scope"in o&&a(0,e=o.$$scope)},[e,t]}class u extends n{constructor(r){super(),i(this,r,b,g,p,{})}}export{u as default};
diff --git a/frontend/build/_app/immutable/pages/index.svelte-6350336a.js b/frontend/build/_app/immutable/pages/index.svelte-6350336a.js
new file mode 100644
index 0000000000000000000000000000000000000000..3fc84fa99915ac7e57070f34bdb44e517babb1f7
--- /dev/null
+++ b/frontend/build/_app/immutable/pages/index.svelte-6350336a.js
@@ -0,0 +1 @@
+import{S as W,i as ee,s as te,e as M,k as D,c as O,a as T,m as j,d as E,b as c,K as ke,g as $,J as d,t as V,h as F,L as N,E as Y,M as Oe,N as G,O as J,P as pe,Q as de,j as Te,f as tt,R as ae,T as ge,U as Be,V as rt,W as Ee,w as oe,x as se,y as ne,q as ie,o as ce,B as ue,v as lt}from"../chunks/index-bcf2726a.js";import{w as Q,b as Ze}from"../chunks/paths-d3bcbd10.js";const ye=[{color:[219,14,154],label:"building"},{color:[147,142,123],label:"pervious surface"},{color:[248,12,0],label:"impervious surface"},{color:[169,113,1],label:"bare soil"},{color:[21,83,174],label:"water"},{color:[25,74,38],label:"coniferous"},{color:[70,228,131],label:"deciduous"},{color:[243,166,13],label:"brushwood"},{color:[102,0,130],label:"vineyard"},{color:[85,255,0],label:"herbaceous vegetation"},{color:[255,243,13],label:"agricultural land"},{color:[228,223,124],label:"plowed land"},{color:[61,230,235],label:"swimming pool"},{color:[255,255,255],label:"snow"},{color:[138,179,160],label:"clear cut"},{color:[107,113,79],label:"mixed"},{color:[197,220,66],label:"ligneous"},{color:[153,153,255],label:"greenhouse"},{color:[0,0,0],label:"other"}],Ie=["/samples/example0.png","/samples/example1.png","/samples/example2.png","/samples/example3.png","/samples/example4.png","/samples/example5.png"],Se=[["Aerial view, France. High resolution image, 4K, ultra detailed","Realistic"],["Aerial view, France. Colorful lego bricks","Lego brick"],["Aerial view, France. Black and white paper pencil drawing","Pencil"],["Aerial view, France. Oil on canvas painting","Painting"]];function Qe(){return BigInt(0xb7dd73e137d20800&((1<<63)-1)*Math.random())}const ve=Q(new Map),ze=Q(),Pe=Q(),Ce=Q(),me=Q(),Me=Q({prompt:Se[0][0],seed:Qe(),steps:20}),he=Q(!1),we=Q(!1);function Ne(l,e,t){const r=l.slice();return r[3]=e[t],r[5]=t,r}function Ue(l){let e,t,r,s,a,i,p,n,m,k,g,C;return{c(){e=M("div"),t=M("input"),i=D(),p=M("label"),n=M("img"),C=D(),this.h()},l(h){e=O(h,"DIV",{class:!0});var w=T(e);t=O(w,"INPUT",{type:!0,name:!0,id:!0,class:!0}),i=j(w),p=O(w,"LABEL",{for:!0,class:!0});var S=T(p);n=O(S,"IMG",{src:!0,alt:!0,class:!0}),S.forEach(E),C=j(w),w.forEach(E),this.h()},h(){c(t,"type","radio"),c(t,"name","samples"),c(t,"id",r="sample-"+l[5]),t.value=s=l[5],t.disabled=a=l[0]===!0,c(t,"class","svelte-1gwcbp"),ke(n.src,m=Ze+l[3])||c(n,"src",m),c(n,"alt",k=l[3]),c(n,"class","svelte-1gwcbp"),c(p,"for",g="sample-"+l[5]),c(p,"class","svelte-1gwcbp"),c(e,"class","snap-always snap-start")},m(h,w){$(h,e,w),d(e,t),d(e,i),d(e,p),d(p,n),d(e,C)},p(h,w){w&1&&a!==(a=h[0]===!0)&&(t.disabled=a)},d(h){h&&E(e)}}}function at(l){let e,t,r,s,a,i,p,n,m=Ie,k=[];for(let g=0;g{const r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),e(r)},r.onerror=s=>{t(s)},r.src=URL.createObjectURL(l)})}function st(l,e,t){let r,s;return G(l,Ce,i=>t(2,r=i)),G(l,he,i=>t(0,s=i)),[s,async i=>{i.preventDefault();const p=Ie[parseInt(i.target.value)];if(p){const n=await fetch(Ze+p).then(k=>k.blob()),m=await ot(n);J(Ce,r=m,r)}}]}class nt extends W{constructor(e){super(),ee(this,e,st,at,te,{})}}function Ve(l,e,t){const r=l.slice();return r[2]=e[t],r[7]=t,r}function Fe(l){let e,t,r,s,a,i,p,n,m,k,g,C,h=l[2].label+"",w,S,o;return{c(){e=M("div"),t=M("input"),i=D(),p=M("label"),n=pe("svg"),m=pe("rect"),g=D(),C=M("span"),w=V(h),o=D(),this.h()},l(f){e=O(f,"DIV",{class:!0});var b=T(e);t=O(b,"INPUT",{name:!0,type:!0,id:!0,class:!0}),i=j(b),p=O(b,"LABEL",{for:!0,class:!0});var u=T(p);n=de(u,"svg",{width:!0,height:!0,viewBox:!0,class:!0});var v=T(n);m=de(v,"rect",{x:!0,y:!0,width:!0,height:!0,fill:!0}),T(m).forEach(E),v.forEach(E),g=j(u),C=O(u,"SPAN",{class:!0});var y=T(C);w=F(y,h),y.forEach(E),u.forEach(E),o=j(b),b.forEach(E),this.h()},h(){c(t,"name","color"),t.checked=r=l[7]==We,c(t,"type","radio"),c(t,"id",s="color-"+l[7]),t.value=a=l[7],c(t,"class","svelte-1oy4poo"),c(m,"x","0"),c(m,"y","0"),c(m,"width","20"),c(m,"height","20"),c(m,"fill",k="rgb("+l[2].color.join(",")+")"),c(n,"width","20"),c(n,"height","20"),c(n,"viewBox","0 0 20 20"),c(n,"class","svelte-1oy4poo"),c(C,"class","svelte-1oy4poo"),c(p,"for",S="color-"+l[7]),c(p,"class","svelte-1oy4poo"),c(e,"class","snap-always snap-start")},m(f,b){$(f,e,b),d(e,t),d(e,i),d(e,p),d(p,n),d(n,m),d(p,g),d(p,C),d(C,w),d(e,o)},p:Y,d(f){f&&E(e)}}}function it(l){let e,t,r,s,a,i,p,n,m,k,g,C,h,w=l[0].size+"",S,o,f,b=ye,u=[];for(let v=0;vt(0,r=m));const{color:s,label:a}=ye[We];let i=`rgb(${s.join(",")})`,p=40;return J(me,r={color:i,size:p,label:a},r),[r,async m=>{const k=m.target;if(k.name==="color"){const g=parseInt(k.value),{color:C,label:h}=ye[g];i=`rgb(${C.join(",")})`,J(me,r={color:i,size:p,label:h},r)}else k.name==="brush"&&(p=parseInt(k.value),J(me,r={color:i,size:p,label:a},r))},s]}class ut extends W{constructor(e){super(),ee(this,e,ct,it,te,{})}}function Ge(l,e,t){const r=l.slice();return r[13]=e[t],r}function qe(l){let e,t=l[13][1]+"",r,s,a;return{c(){e=M("option"),r=V(t),a=V("`"),this.h()},l(i){e=O(i,"OPTION",{});var p=T(e);r=F(p,t),p.forEach(E),a=F(i,"`"),this.h()},h(){e.__value=s=l[13][0],e.value=e.__value},m(i,p){$(i,e,p),d(e,r),$(i,a,p)},p:Y,d(i){i&&E(e),i&&E(a)}}}function pt(l){let e,t,r,s,a,i,p,n,m,k,g,C,h,w,S,o,f,b,u,v,y,x,z,_,P,B,I,R,K,H,X,Z,fe,re=Se,q=[];for(let L=0;Lt(12,r=o)),G(l,he,o=>t(4,s=o));function a(){const o=i.elements;J(Me,r={prompt:o.prompt.value,seed:BigInt(o.seed.value),steps:parseInt(o.steps.value)},r)}let i,p=r.seed,n=r.steps,m=r.prompt;function k(){m=this.value,t(3,m)}const g=o=>{t(3,m=o.currentTarget.value)};function C(){p=this.value,t(1,p)}const h=()=>{t(1,p=Qe()),a()};function w(){n=rt(this.value),t(2,n)}function S(o){Ee[o?"unshift":"push"](()=>{i=o,t(0,i)})}return[i,p,n,m,s,a,k,g,C,h,w,S]}class ht extends W{constructor(e){super(),ee(this,e,dt,pt,te,{})}}let ft=(l=21)=>crypto.getRandomValues(new Uint8Array(l)).reduce((e,t)=>(t&=63,t<36?e+=t.toString(36):t<62?e+=(t-26).toString(36).toUpperCase():t>62?e+="-":e+="_",e),"");var vt=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function mt(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}var et={exports:{}};(function(l,e){(function(t,r){l.exports=r()})(typeof self!="undefined"?self:vt,function(){return function(t){var r={};function s(a){if(r[a])return r[a].exports;var i=r[a]={i:a,l:!1,exports:{}};return t[a].call(i.exports,i,i.exports,s),i.l=!0,i.exports}return s.m=t,s.c=r,s.d=function(a,i,p){s.o(a,i)||Object.defineProperty(a,i,{enumerable:!0,get:p})},s.r=function(a){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},s.t=function(a,i){if(1&i&&(a=s(a)),8&i||4&i&&typeof a=="object"&&a&&a.__esModule)return a;var p=Object.create(null);if(s.r(p),Object.defineProperty(p,"default",{enumerable:!0,value:a}),2&i&&typeof a!="string")for(var n in a)s.d(p,n,function(m){return a[m]}.bind(null,n));return p},s.n=function(a){var i=a&&a.__esModule?function(){return a.default}:function(){return a};return s.d(i,"a",i),i},s.o=function(a,i){return Object.prototype.hasOwnProperty.call(a,i)},s.p="",s(s.s=0)}([function(t,r,s){function a(h,w){return function(S){if(Array.isArray(S))return S}(h)||function(S,o){if(Symbol.iterator in Object(S)||Object.prototype.toString.call(S)==="[object Arguments]"){var f=[],b=!0,u=!1,v=void 0;try{for(var y,x=S[Symbol.iterator]();!(b=(y=x.next()).done)&&(f.push(y.value),!o||f.length!==o);b=!0);}catch(z){u=!0,v=z}finally{try{b||x.return==null||x.return()}finally{if(u)throw v}}return f}}(h,w)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function i(h){return function(w){if(Array.isArray(w)){for(var S=0,o=new Array(w.length);S255?255:y,g:x=x>255?255:x,b:z=z>255?255:z}}}},{key:"make",value:function(o){var f=o.size,b=o.color;try{f*=window.devicePixelRatio;var u=this.parseColor(b),v=JSON.stringify(u);if(this.canvases[v]=this.canvases[v]||{},this.canvases[v][f]!=null)return this.canvases[v][f];var y=document.createElement("canvas");f+=f%2,y.width=f,y.height=f;for(var x=y.getContext("2d"),z=x.createImageData(f,f),_=0;_x||_>z)&&(_+=2*++x+1)}while(x<0)}},{key:"fillCircle",value:function(o,f){for(var b=4*o.width,u=1;u{"classNames"in s&&t(0,r=s.classNames)},[r]}class yt extends W{constructor(e){super(),ee(this,e,gt,bt,te,{classNames:0})}}function wt(l){var f;let e,t,r,s,a,i,p,n=((f=l[0])==null?void 0:f.label)+"",m,k,g,C,h,w,S,o;return C=new yt({}),{c(){e=M("div"),t=M("div"),r=M("canvas"),s=D(),a=M("canvas"),i=D(),p=M("span"),m=V(n),k=D(),g=M("button"),oe(C.$$.fragment),this.h()},l(b){e=O(b,"DIV",{});var u=T(e);t=O(u,"DIV",{class:!0});var v=T(t);r=O(v,"CANVAS",{class:!0,width:!0,height:!0}),T(r).forEach(E),s=j(v),a=O(v,"CANVAS",{class:!0,width:!0,height:!0}),T(a).forEach(E),i=j(v),p=O(v,"SPAN",{class:!0});var y=T(p);m=F(y,n),y.forEach(E),k=j(v),g=O(v,"BUTTON",{class:!0});var x=T(g);se(C.$$.fragment,x),x.forEach(E),v.forEach(E),u.forEach(E),this.h()},h(){c(r,"class","canvas svelte-pr47cz"),c(r,"width","512"),c(r,"height","512"),c(a,"class","brush svelte-pr47cz"),c(a,"width","10"),c(a,"height","10"),c(p,"class","label svelte-pr47cz"),c(g,"class","absolute bottom-0 left-0 p-3"),g.disabled=h=l[3].size<=0,c(t,"class","relative overflow-clip")},m(b,u){$(b,e,u),d(e,t),d(t,r),l[11](r),d(t,s),d(t,a),l[12](a),d(t,i),d(t,p),d(p,m),d(t,k),d(t,g),ne(C,g,null),w=!0,S||(o=[N(r,"touchmove",xt),N(r,"pointerenter",_t),N(r,"pointerup",l[4]),N(r,"pointerleave",l[4]),N(r,"pointercancel",l[4]),N(r,"pointerout",l[4]),N(r,"pointermove",l[6]),N(r,"pointerdown",l[5]),N(g,"click",ge(l[13]))],S=!0)},p(b,[u]){var v;(!w||u&1)&&n!==(n=((v=b[0])==null?void 0:v.label)+"")&&Te(m,n),(!w||u&8&&h!==(h=b[3].size<=0))&&(g.disabled=h)},i(b){w||(ie(C.$$.fragment,b),w=!0)},o(b){ce(C.$$.fragment,b),w=!1},d(b){b&&E(e),l[11](null),l[12](null),ue(C),S=!1,Be(o)}}}function _t(){}function $e(l,e){const t=l.getBoundingClientRect();return{x:(e.clientX-t.left)*(l.width/t.width),y:(e.clientY-t.top)*(l.height/t.height)}}function Ye(l){l.fillStyle="#000000",l.fillRect(0,0,l.canvas.width,l.canvas.height)}function xe(l,e){l.drawImage(e,0,0,l.canvas.width,l.canvas.height)}const xt=l=>l.preventDefault();function kt(l,e,t){let r,s,a,i;G(l,ve,_=>t(3,r=_)),G(l,Ce,_=>t(10,s=_)),G(l,me,_=>t(0,a=_)),G(l,Pe,_=>t(18,i=_));let p,n,m,k,g={x:0,y:0},C;lt(()=>{t(9,k=p.getContext("2d")),t(8,m=n.getContext("2d")),window.devicePixelRatio=1,C=new He(p),t(1,p.style.height="unset",p),t(1,p.style.width="unset",p),J(Pe,i=p,i),Ye(k)});let h=!1,w;function S(){t(2,n.style.top=`${10+a.size/2}px`,n),t(2,n.style.left=`${10+a.size/2}px`,n),h=!1}function o(_){h=!0,g=$e(p,_),C.draw({from:g,to:g,size:a.size,color:a.color}),w=ft(),ve.update(P=>(P.set(w,{brush:a,points:[{from:g,to:g}]}),P))}function f(_){const P=$e(p,_);t(2,n.style.top=`${_.offsetY}px`,n),t(2,n.style.left=`${_.offsetX}px`,n),h&&(C.draw({from:g,to:P,size:a.size,color:a.color}),ve.update(B=>{const I=B.get(w);return I==null||I.points.push({from:g,to:P}),B}),g=P)}function b(_){const{size:P,color:B}=_;t(2,n.width=P,n),t(2,n.height=P,n),t(8,m.fillStyle=B,m),m.arc(P/2,P/2,P/2,0,2*Math.PI),m.fill()}function u(){if(r.size<=0)return;const _=Array.from(r.keys());ve.update(P=>(P.delete(_[_.length-1]),P)),v(k)}function v(_){const P=document.createElement("canvas");P.width=512,P.height=512,window.devicePixelRatio=1;const B=new He(P);Ye(_),s&&xe(_,s),Array.from(r.values()).forEach(I=>{I.points.forEach((R,K)=>{B.draw({from:R.from,to:R.to,size:I.brush.size,color:I.brush.color})})}),requestAnimationFrame(()=>{xe(_,P)})}function y(_){Ee[_?"unshift":"push"](()=>{p=_,t(1,p)})}function x(_){Ee[_?"unshift":"push"](()=>{n=_,t(2,n),t(8,m),t(0,a)})}const z=()=>u();return l.$$.update=()=>{l.$$.dirty&257&&m&&a&&(b(a),t(2,n.style.top=`${10+a.size/2}px`,n),t(2,n.style.left=`${10+a.size/2}px`,n)),l.$$.dirty&1536&&s&&(xe(k,s),J(ve,r=new Map,r))},[a,p,n,r,S,o,f,u,m,k,s,y,x,z]}class Et extends W{constructor(e){super(),ee(this,e,kt,wt,te,{})}}function Je(l){let e,t,r;return{c(){e=M("img"),this.h()},l(s){e=O(s,"IMG",{class:!0,alt:!0,src:!0,width:!0,height:!0}),this.h()},h(){c(e,"class",t="image "+(l[1]?"opacity-30":"")+" svelte-1t0h0rs"),c(e,"alt","Generative Map Result"),ke(e.src,r=l[0])||c(e,"src",r),c(e,"width","512"),c(e,"height","512")},m(s,a){$(s,e,a)},p(s,a){a&2&&t!==(t="image "+(s[1]?"opacity-30":"")+" svelte-1t0h0rs")&&c(e,"class",t),a&1&&!ke(e.src,r=s[0])&&c(e,"src",r)},d(s){s&&E(e)}}}function Xe(l){let e,t,r,s,a,i;return{c(){e=M("div"),t=pe("svg"),r=pe("path"),s=D(),a=M("span"),i=V(Ke),this.h()},l(p){e=O(p,"DIV",{class:!0});var n=T(e);t=de(n,"svg",{xmlns:!0,fill:!0,viewBox:!0,class:!0});var m=T(t);r=de(m,"path",{fill:!0,d:!0}),T(r).forEach(E),m.forEach(E),s=j(n),a=O(n,"SPAN",{class:!0});var k=T(a);i=F(k,Ke),k.forEach(E),n.forEach(E),this.h()},h(){c(r,"fill","currentColor"),c(r,"d","M20 12a8 8 0 0 1-8 8v4a12 12 0 0 0 12-12h-4Zm-2-5.3a8 8 0 0 1 2 5.3h4c0-3-1.1-5.8-3-8l-3 2.7Z"),c(t,"xmlns","http://www.w3.org/2000/svg"),c(t,"fill","none"),c(t,"viewBox","0 0 24 24"),c(t,"class","animate-spin max-w-[3rem]"),c(a,"class","text-xs"),c(e,"class","loading svelte-1t0h0rs")},m(p,n){$(p,e,n),d(e,t),d(t,r),d(e,s),d(e,a),d(a,i)},p:Y,d(p){p&&E(e)}}}function It(l){let e,t,r=l[0]&&Je(l),s=l[1]&&Xe();return{c(){e=M("div"),r&&r.c(),t=D(),s&&s.c(),this.h()},l(a){e=O(a,"DIV",{class:!0});var i=T(e);r&&r.l(i),t=j(i),s&&s.l(i),i.forEach(E),this.h()},h(){c(e,"class","relative overflow-clip flex flex-col justify-center items-center w-full h-full")},m(a,i){$(a,e,i),r&&r.m(e,null),d(e,t),s&&s.m(e,null)},p(a,[i]){a[0]?r?r.p(a,i):(r=Je(a),r.c(),r.m(e,t)):r&&(r.d(1),r=null),a[1]?s?s.p(a,i):(s=Xe(),s.c(),s.m(e,null)):s&&(s.d(1),s=null)},i:Y,o:Y,d(a){a&&E(e),r&&r.d(),s&&s.d()}}}let Ke="";async function St(l){return new Promise((e,t)=>{try{const r=document.createElement("a");r.download=`sucess-${Date.now()}.png`,r.target="_self",r.onclick=async s=>{r.href&&URL.revokeObjectURL(r.href),r.href=l},requestAnimationFrame(()=>{console.log("Downloading image."),r.click(),e(null)})}catch{t()}})}async function zt(l,{prompt:e,steps:t,seed:r}){const s=await fetch("/predict",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:[l,e,t,r.toString()]})});if(!s.ok)throw new Error("Prediction request failed.");return await s.text()}function Pt(l,e,t){let r,s,a,i,p;return G(l,we,n=>t(2,r=n)),G(l,ze,n=>t(0,s=n)),G(l,he,n=>t(1,a=n)),G(l,Me,n=>t(3,i=n)),G(l,Pe,n=>t(4,p=n)),l.$$.update=()=>{l.$$.dirty&26&&(async()=>{if(a){const n=await zt(p.toDataURL(),i);J(ze,s=n,s),J(he,a=!1,a)}})(),l.$$.dirty&5&&(async()=>r&&(await St(s),J(we,r=!1,r)))()},[s,a,r,i,p]}class Ct extends W{constructor(e){super(),ee(this,e,Pt,It,te,{})}}function Mt(l){let e,t,r,s,a,i,p,n,m,k,g,C,h,w,S,o,f,b,u,v,y,x,z,_,P,B;return i=new ut({}),m=new Et({}),g=new Ct({}),y=new nt({}),z=new ht({}),{c(){e=M("div"),t=M("article"),r=M("h1"),s=V("Drawing to Map"),a=D(),oe(i.$$.fragment),p=D(),n=M("div"),oe(m.$$.fragment),k=D(),oe(g.$$.fragment),C=D(),h=M("button"),w=V("Generate Map"),o=D(),f=M("button"),b=V("Save Result"),v=D(),oe(y.$$.fragment),x=D(),oe(z.$$.fragment),this.h()},l(I){e=O(I,"DIV",{class:!0});var R=T(e);t=O(R,"ARTICLE",{class:!0});var K=T(t);r=O(K,"H1",{});var H=T(r);s=F(H,"Drawing to Map"),H.forEach(E),K.forEach(E),a=j(R),se(i.$$.fragment,R),p=j(R),n=O(R,"DIV",{class:!0});var X=T(n);se(m.$$.fragment,X),k=j(X),se(g.$$.fragment,X),X.forEach(E),C=j(R),h=O(R,"BUTTON",{class:!0});var Z=T(h);w=F(Z,"Generate Map"),Z.forEach(E),o=j(R),f=O(R,"BUTTON",{class:!0});var fe=T(f);b=F(fe,"Save Result"),fe.forEach(E),v=j(R),se(y.$$.fragment,R),x=j(R),se(z.$$.fragment,R),R.forEach(E),this.h()},h(){c(t,"class","prose dark:prose-invert"),c(n,"class","drawings py-3 -mx-3 svelte-237ry5"),h.disabled=S=l[0]===!0,c(h,"class","svelte-237ry5"),f.disabled=u=l[1]===!0||!l[2],c(f,"class","svelte-237ry5"),c(e,"class","max-w-screen-md mx-auto px-3 py-5 relative z-0")},m(I,R){$(I,e,R),d(e,t),d(t,r),d(r,s),d(e,a),ne(i,e,null),d(e,p),d(e,n),ne(m,n,null),d(n,k),ne(g,n,null),d(e,C),d(e,h),d(h,w),d(e,o),d(e,f),d(f,b),d(e,v),ne(y,e,null),d(e,x),ne(z,e,null),_=!0,P||(B=[N(h,"click",ge(l[3])),N(f,"click",ge(l[4]))],P=!0)},p(I,[R]){(!_||R&1&&S!==(S=I[0]===!0))&&(h.disabled=S),(!_||R&6&&u!==(u=I[1]===!0||!I[2]))&&(f.disabled=u)},i(I){_||(ie(i.$$.fragment,I),ie(m.$$.fragment,I),ie(g.$$.fragment,I),ie(y.$$.fragment,I),ie(z.$$.fragment,I),_=!0)},o(I){ce(i.$$.fragment,I),ce(m.$$.fragment,I),ce(g.$$.fragment,I),ce(y.$$.fragment,I),ce(z.$$.fragment,I),_=!1},d(I){I&&E(e),ue(i),ue(m),ue(g),ue(y),ue(z),P=!1,Be(B)}}}function Ot(l,e,t){let r,s,a;return G(l,he,n=>t(0,r=n)),G(l,we,n=>t(1,s=n)),G(l,ze,n=>t(2,a=n)),[r,s,a,()=>J(he,r=!0,r),()=>J(we,s=!0,s)]}class Rt extends W{constructor(e){super(),ee(this,e,Ot,Mt,te,{})}}export{Rt as default};
diff --git a/frontend/build/_app/immutable/start-a60c2789.js b/frontend/build/_app/immutable/start-a60c2789.js
new file mode 100644
index 0000000000000000000000000000000000000000..fa05cd3c643f9092adf107dc9b90792559fde0b1
--- /dev/null
+++ b/frontend/build/_app/immutable/start-a60c2789.js
@@ -0,0 +1 @@
+import{S as Ye,i as Ge,s as Me,e as Fe,c as Xe,a as He,d as D,b as me,f as K,g as V,t as Ze,h as Qe,j as et,k as tt,l as P,m as nt,n as Y,o as C,p as G,q as T,r as st,u as rt,v as ye,w as z,x as ne,y as q,z as se,A as re,B as J,C as ie,D as Ce}from"./chunks/index-bcf2726a.js";import{s as it,w as ce,a as at}from"./chunks/paths-d3bcbd10.js";function ot(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={};for(let a=0;a{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ct(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={$$slots:{default:[dt]},$$scope:{ctx:n}};for(let a=0;a{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function lt(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={};for(let a=0;a{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ft(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={$$slots:{default:[ut]},$$scope:{ctx:n}};for(let a=0;a{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ut(s){let e,t,i;const l=[s[3]||{}];var c=s[0][2];function f(n){let r={};for(let a=0;a{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function dt(s){let e,t,i,l;const c=[ft,lt],f=[];function n(r,a){return r[0][2]?0:1}return e=n(s),t=f[e]=c[e](s),{c(){t.c(),i=P()},l(r){t.l(r),i=P()},m(r,a){f[e].m(r,a),V(r,i,a),l=!0},p(r,a){let d=e;e=n(r),e===d?f[e].p(r,a):(Y(),C(f[d],1,1,()=>{f[d]=null}),G(),t=f[e],t?t.p(r,a):(t=f[e]=c[e](r),t.c()),T(t,1),t.m(i.parentNode,i))},i(r){l||(T(t),l=!0)},o(r){C(t),l=!1},d(r){f[e].d(r),r&&D(i)}}}function Te(s){let e,t=s[5]&&je(s);return{c(){e=Fe("div"),t&&t.c(),this.h()},l(i){e=Xe(i,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var l=He(e);t&&t.l(l),l.forEach(D),this.h()},h(){me(e,"id","svelte-announcer"),me(e,"aria-live","assertive"),me(e,"aria-atomic","true"),K(e,"position","absolute"),K(e,"left","0"),K(e,"top","0"),K(e,"clip","rect(0 0 0 0)"),K(e,"clip-path","inset(50%)"),K(e,"overflow","hidden"),K(e,"white-space","nowrap"),K(e,"width","1px"),K(e,"height","1px")},m(i,l){V(i,e,l),t&&t.m(e,null)},p(i,l){i[5]?t?t.p(i,l):(t=je(i),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(i){i&&D(e),t&&t.d()}}}function je(s){let e;return{c(){e=Ze(s[6])},l(t){e=Qe(t,s[6])},m(t,i){V(t,e,i)},p(t,i){i&64&&et(e,t[6])},d(t){t&&D(e)}}}function pt(s){let e,t,i,l,c;const f=[ct,ot],n=[];function r(d,L){return d[0][1]?0:1}e=r(s),t=n[e]=f[e](s);let a=s[4]&&Te(s);return{c(){t.c(),i=tt(),a&&a.c(),l=P()},l(d){t.l(d),i=nt(d),a&&a.l(d),l=P()},m(d,L){n[e].m(d,L),V(d,i,L),a&&a.m(d,L),V(d,l,L),c=!0},p(d,[L]){let E=e;e=r(d),e===E?n[e].p(d,L):(Y(),C(n[E],1,1,()=>{n[E]=null}),G(),t=n[e],t?t.p(d,L):(t=n[e]=f[e](d),t.c()),T(t,1),t.m(i.parentNode,i)),d[4]?a?a.p(d,L):(a=Te(d),a.c(),a.m(l.parentNode,l)):a&&(a.d(1),a=null)},i(d){c||(T(t),c=!0)},o(d){C(t),c=!1},d(d){n[e].d(d),d&&D(i),a&&a.d(d),d&&D(l)}}}function ht(s,e,t){let{stores:i}=e,{page:l}=e,{components:c}=e,{props_0:f=null}=e,{props_1:n=null}=e,{props_2:r=null}=e;st("__svelte__",i),rt(i.page.notify);let a=!1,d=!1,L=null;return ye(()=>{const E=i.page.subscribe(()=>{a&&(t(5,d=!0),t(6,L=document.title||"untitled page"))});return t(4,a=!0),E}),s.$$set=E=>{"stores"in E&&t(7,i=E.stores),"page"in E&&t(8,l=E.page),"components"in E&&t(0,c=E.components),"props_0"in E&&t(1,f=E.props_0),"props_1"in E&&t(2,n=E.props_1),"props_2"in E&&t(3,r=E.props_2)},s.$$.update=()=>{s.$$.dirty&384&&i.page.set(l)},[c,f,n,r,a,d,L,i,l]}class _t extends Ye{constructor(e){super(),Ge(this,e,ht,pt,Me,{stores:7,page:8,components:0,props_0:1,props_1:2,props_2:3})}}const mt="modulepreload",Ie={},gt="/static/_app/immutable/",ge=function(e,t){return!t||t.length===0?e():Promise.all(t.map(i=>{if(i=`${gt}${i}`,i in Ie)return;Ie[i]=!0;const l=i.endsWith(".css"),c=l?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${i}"]${c}`))return;const f=document.createElement("link");if(f.rel=l?"stylesheet":mt,l||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),l)return new Promise((n,r)=>{f.addEventListener("load",n),f.addEventListener("error",()=>r(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>e())},wt={},le=[()=>ge(()=>import("./pages/__layout.svelte-0c386344.js"),["pages/__layout.svelte-0c386344.js","assets/pages/__layout.svelte-dcfcba4b.css","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./error.svelte-d9523301.js"),["error.svelte-d9523301.js","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./pages/index.svelte-6350336a.js"),["pages/index.svelte-6350336a.js","assets/pages/index.svelte-65a37285.css","chunks/index-bcf2726a.js","chunks/paths-d3bcbd10.js"])],bt={"":[[0,2],[1]]};function yt(s){s.client}function De(s){return s instanceof Error||s&&s.name&&s.message?s:new Error(JSON.stringify(s))}function Ve(s){if(s.fallthrough)throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");if("maxage"in s)throw new Error("maxage should be replaced with cache: { maxage }");const e=s.status&&s.status>=400&&s.status<=599&&!s.redirect;if(s.error||e){const t=s.status;if(!s.error&&e)return{status:t||500,error:new Error};const i=typeof s.error=="string"?new Error(s.error):s.error;return i instanceof Error?!t||t<400||t>599?(console.warn('"error" returned from load() without a valid status code \u2014 defaulting to 500'),{status:500,error:i}):{status:t,error:i}:{status:500,error:new Error(`"error" property returned from load() must be a string or instance of Error, received type "${typeof i}"`)}}if(s.redirect){if(!s.status||Math.floor(s.status/100)!==3)throw new Error('"redirect" property returned from load() must be accompanied by a 3xx status code');if(typeof s.redirect!="string")throw new Error('"redirect" property returned from load() must be a string')}if(s.dependencies&&(!Array.isArray(s.dependencies)||s.dependencies.some(t=>typeof t!="string")))throw new Error('"dependencies" property returned from load() must be of type string[]');if(s.context)throw new Error('You are returning "context" from a load function. "context" was renamed to "stuff", please adjust your code accordingly.');return s}function vt(s,e){return s==="/"||e==="ignore"?s:e==="never"?s.endsWith("/")?s.slice(0,-1):s:e==="always"&&!s.endsWith("/")?s+"/":s}class $t extends URL{get hash(){throw new Error("url.hash is inaccessible from load. Consider accessing hash from the page store within the script tag of your component.")}}function ze(s){let e=s.baseURI;if(!e){const t=s.getElementsByTagName("base");e=t.length?t[0].href:s.URL}return e}function ve(){return{x:pageXOffset,y:pageYOffset}}function qe(s){return s.composedPath().find(t=>t instanceof Node&&t.nodeName.toUpperCase()==="A")}function Je(s){return s instanceof SVGAElement?new URL(s.href.baseVal,document.baseURI):new URL(s.href)}function Ke(s){const e=ce(s);let t=!0;function i(){t=!0,e.update(f=>f)}function l(f){t=!1,e.set(f)}function c(f){let n;return e.subscribe(r=>{(n===void 0||t&&r!==n)&&f(n=r)})}return{notify:i,set:l,subscribe:c}}function kt(){const{set:s,subscribe:e}=ce(!1),t="1684956620534";let i;async function l(){clearTimeout(i);const f=await fetch(`${at}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(f.ok){const{version:n}=await f.json(),r=n!==t;return r&&(s(!0),clearTimeout(i)),r}else throw new Error(`Version check failed: ${f.status}`)}return{subscribe:e,check:l}}function Et(s){let e=5381,t=s.length;if(typeof s=="string")for(;t;)e=e*33^s.charCodeAt(--t);else for(;t;)e=e*33^s[--t];return(e>>>0).toString(36)}const $e=window.fetch;function Rt(s,e){let i=`script[sveltekit\\:data-type="data"][sveltekit\\:data-url=${JSON.stringify(typeof s=="string"?s:s.url)}]`;e&&typeof e.body=="string"&&(i+=`[sveltekit\\:data-body="${Et(e.body)}"]`);const l=document.querySelector(i);if(l&&l.textContent){const{body:c,...f}=JSON.parse(l.textContent);return Promise.resolve(new Response(c,f))}return $e(s,e)}const Lt=/^(\.\.\.)?(\w+)(?:=(\w+))?$/;function St(s){const e=[],t=[];let i=!0;return{pattern:s===""?/^\/$/:new RegExp(`^${decodeURIComponent(s).split(/(?:@[a-zA-Z0-9_-]+)?(?:\/|$)/).map((c,f,n)=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(c);if(r)return e.push(r[1]),t.push(r[2]),"(?:/(.*))?";const a=f===n.length-1;return c&&"/"+c.split(/\[(.+?)\]/).map((d,L)=>{if(L%2){const[,E,X,M]=Lt.exec(d);return e.push(X),t.push(M),E?"(.*?)":"([^/]+?)"}return a&&d.includes(".")&&(i=!1),d.normalize().replace(/%5[Bb]/g,"[").replace(/%5[Dd]/g,"]").replace(/#/g,"%23").replace(/\?/g,"%3F").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("")}).join("")}${i?"/?":""}$`),names:e,types:t}}function Ut(s,e,t,i){const l={};for(let c=0;c{const{pattern:r,names:a,types:d}=St(l);return{id:l,exec:L=>{const E=r.exec(L);if(E)return Ut(E,a,d,t)},a:c.map(L=>s[L]),b:f.map(L=>s[L]),has_shadow:!!n}})}const We="sveltekit:scroll",B="sveltekit:index",we=At(le,bt,wt),Nt=le[0](),Ot=le[1](),Be={};let te={};try{te=JSON.parse(sessionStorage[We])}catch{}function be(s){te[s]=ve()}function xt({target:s,session:e,base:t,trailing_slash:i}){var xe;const l=new Map,c=[],f={url:Ke({}),page:Ke({}),navigating:ce(null),session:ce(e),updated:kt()},n={id:null,promise:null},r={before_navigate:[],after_navigate:[]};let a={branch:[],error:null,session_id:0,stuff:Be,url:null},d=!1,L=!0,E=!1,X=1,M=null,ke,Ee,Re=!1;f.session.subscribe(async o=>{Ee=o,Re&&(X+=1,pe(new URL(location.href),[],!0))}),Re=!0;let F=!0,j=(xe=history.state)==null?void 0:xe[B];j||(j=Date.now(),history.replaceState({...history.state,[B]:j},"",location.href));const fe=te[j];fe&&(history.scrollRestoration="manual",scrollTo(fe.x,fe.y));let ue=!1,de,Le;async function Se(o,{noscroll:p=!1,replaceState:w=!1,keepfocus:u=!1,state:h={}},b){if(typeof o=="string"&&(o=new URL(o,ze(document))),F)return _e({url:o,scroll:p?ve():null,keepfocus:u,redirect_chain:b,details:{state:h,replaceState:w},accepted:()=>{},blocked:()=>{}});await Q(o)}async function Ue(o){const p=Oe(o);if(!p)throw new Error("Attempted to prefetch a URL that does not belong to this app");return n.promise=Ne(p,!1),n.id=p.id,n.promise}async function pe(o,p,w,u,h){var R,S,N;const b=Oe(o),v=Le={};let _=b&&await Ne(b,w);if(!_&&o.origin===location.origin&&o.pathname===location.pathname&&(_=await Z({status:404,error:new Error(`Not found: ${o.pathname}`),url:o,routeId:null})),!_)return await Q(o),!1;if(Le!==v)return!1;if(c.length=0,_.redirect)if(p.length>10||p.includes(o.pathname))_=await Z({status:500,error:new Error("Redirect loop"),url:o,routeId:null});else return F?Se(new URL(_.redirect,o).href,{},[...p,o.pathname]):await Q(new URL(_.redirect,location.href)),!1;else((S=(R=_.props)==null?void 0:R.page)==null?void 0:S.status)>=400&&await f.updated.check()&&await Q(o);if(E=!0,u&&u.details){const{details:$}=u,y=$.replaceState?0:1;$.state[B]=j+=y,history[$.replaceState?"replaceState":"pushState"]($.state,"",o)}if(d?(a=_.state,_.props.page&&(_.props.page.url=o),ke.$set(_.props)):Ae(_),u){const{scroll:$,keepfocus:y}=u;if(!y){const U=document.body,g=U.getAttribute("tabindex");(N=getSelection())==null||N.removeAllRanges(),U.tabIndex=-1,U.focus({preventScroll:!0}),g!==null?U.setAttribute("tabindex",g):U.removeAttribute("tabindex")}if(await Ce(),L){const U=o.hash&&document.getElementById(o.hash.slice(1));$?scrollTo($.x,$.y):U?U.scrollIntoView():scrollTo(0,0)}}else await Ce();n.promise=null,n.id=null,L=!0,_.props.page&&(de=_.props.page);const m=_.state.branch[_.state.branch.length-1];F=(m==null?void 0:m.module.router)!==!1,h&&h(),E=!1}function Ae(o){a=o.state;const p=document.querySelector("style[data-sveltekit]");if(p&&p.remove(),de=o.props.page,ke=new _t({target:s,props:{...o.props,stores:f},hydrate:!0}),F){const w={from:null,to:new URL(location.href)};r.after_navigate.forEach(u=>u(w))}d=!0}async function he({url:o,params:p,stuff:w,branch:u,status:h,error:b,routeId:v}){var y,U;const _=u.filter(Boolean),m=_.find(g=>{var O;return(O=g.loaded)==null?void 0:O.redirect}),R={redirect:(y=m==null?void 0:m.loaded)==null?void 0:y.redirect,state:{url:o,params:p,branch:u,error:b,stuff:w,session_id:X},props:{components:_.map(g=>g.module.default)}};for(let g=0;g<_.length;g+=1){const O=_[g].loaded;R.props[`props_${g}`]=O?await O.props:null}if(!a.url||o.href!==a.url.href||a.error!==b||a.stuff!==w){R.props.page={error:b,params:p,routeId:v,status:h,stuff:w,url:o};const g=(O,k)=>{Object.defineProperty(R.props.page,O,{get:()=>{throw new Error(`$page.${O} has been replaced by $page.url.${k}`)}})};g("origin","origin"),g("path","pathname"),g("query","searchParams")}const N=_[_.length-1],$=(U=N==null?void 0:N.loaded)==null?void 0:U.cache;if($){const g=o.pathname+o.search;let O=!1;const k=()=>{l.get(g)===R&&l.delete(g),x(),clearTimeout(A)},A=setTimeout(k,$.maxage*1e3),x=f.session.subscribe(()=>{O&&k()});O=!0,l.set(g,R)}return R}async function H({status:o,error:p,module:w,url:u,params:h,stuff:b,props:v,routeId:_}){const m={module:w,uses:{params:new Set,url:!1,session:!1,stuff:!1,dependencies:new Set},loaded:null,stuff:b};function R(y){const{href:U}=new URL(y,u);m.uses.dependencies.add(U)}v&&m.uses.dependencies.add(u.href);const S={};for(const y in h)Object.defineProperty(S,y,{get(){return m.uses.params.add(y),h[y]},enumerable:!0});const N=Ee,$=new $t(u);if(w.load){const y={routeId:_,params:S,props:v||{},get url(){return m.uses.url=!0,$},get session(){return m.uses.session=!0,N},get stuff(){return m.uses.stuff=!0,{...b}},async fetch(g,O){let k;typeof g=="string"?k=g:(k=g.url,O={body:g.method==="GET"||g.method==="HEAD"?void 0:await g.blob(),cache:g.cache,credentials:g.credentials,headers:g.headers,integrity:g.integrity,keepalive:g.keepalive,method:g.method,mode:g.mode,redirect:g.redirect,referrer:g.referrer,referrerPolicy:g.referrerPolicy,signal:g.signal,...O});const A=new URL(k,u).href;return R(A),d?$e(A,O):Rt(k,O)},status:o!=null?o:null,error:p!=null?p:null};let U;if(U=await w.load.call(null,y),!U)throw new Error("load function must return a value");m.loaded=Ve(U),m.loaded.stuff&&(m.stuff=m.loaded.stuff),m.loaded.dependencies&&m.loaded.dependencies.forEach(R)}else v&&(m.loaded=Ve({props:v}));return m}async function Ne({id:o,url:p,params:w,route:u},h){var U,g,O;if(n.id===o&&n.promise)return n.promise;if(!h){const k=l.get(o);if(k)return k}const{a:b,b:v,has_shadow:_}=u,m=a.url&&{url:o!==a.url.pathname+a.url.search,params:Object.keys(w).filter(k=>a.params[k]!==w[k]),session:X!==a.session_id};let R=[],S=Be,N=!1,$=200,y=null;b.forEach(k=>k().catch(()=>{}));e:for(let k=0;kI.uses.params.has(W))||m.session&&I.uses.session||Array.from(I.uses.dependencies).some(W=>c.some(oe=>oe(W)))||N&&I.uses.stuff){let W={};const oe=_&&k===b.length-1;if(oe){const ee=await $e(`${p.pathname}${p.pathname.endsWith("/")?"":"/"}__data.json${p.search}`,{headers:{"x-sveltekit-load":"true"}});if(ee.ok){const Pe=ee.headers.get("x-sveltekit-location");if(Pe)return{redirect:Pe,props:{},state:a};W=ee.status===204?{}:await ee.json()}else $=ee.status,y=new Error("Failed to load data")}if(y||(A=await H({module:x,url:p,params:w,props:W,stuff:S,routeId:u.id})),A&&(oe&&(A.uses.url=!0),A.loaded)){if(A.loaded.error&&($=A.loaded.status,y=A.loaded.error),A.loaded.redirect)return{redirect:A.loaded.redirect,props:{},state:a};A.loaded.stuff&&(N=!0)}}else A=I}catch(x){$=500,y=De(x)}if(y){for(;k--;)if(v[k]){let x,I,ae=k;for(;!(I=R[ae]);)ae-=1;try{if(x=await H({status:$,error:y,module:await v[k](),url:p,params:w,stuff:I.stuff,routeId:u.id}),(U=x==null?void 0:x.loaded)!=null&&U.error)continue;(g=x==null?void 0:x.loaded)!=null&&g.stuff&&(S={...S,...x.loaded.stuff}),R=R.slice(0,ae+1).concat(x);break e}catch{continue}}return await Z({status:$,error:y,url:p,routeId:u.id})}else(O=A==null?void 0:A.loaded)!=null&&O.stuff&&(S={...S,...A.loaded.stuff}),R.push(A)}return await he({url:p,params:w,stuff:S,branch:R,status:$,error:y,routeId:u.id})}async function Z({status:o,error:p,url:w,routeId:u}){var _,m;const h={},b=await H({module:await Nt,url:w,params:h,stuff:{},routeId:u}),v=await H({status:o,error:p,module:await Ot,url:w,params:h,stuff:b&&b.loaded&&b.loaded.stuff||{},routeId:u});return await he({url:w,params:h,stuff:{...(_=b==null?void 0:b.loaded)==null?void 0:_.stuff,...(m=v==null?void 0:v.loaded)==null?void 0:m.stuff},branch:[b,v],status:o,error:p,routeId:u})}function Oe(o){if(o.origin!==location.origin||!o.pathname.startsWith(t))return;const p=decodeURI(o.pathname.slice(t.length)||"/");for(const w of we){const u=w.exec(p);if(u)return{id:o.pathname+o.search,route:w,params:u,url:o}}}async function _e({url:o,scroll:p,keepfocus:w,redirect_chain:u,details:h,accepted:b,blocked:v}){const _=a.url;let m=!1;const R={from:_,to:o,cancel:()=>m=!0};if(r.before_navigate.forEach($=>$(R)),m){v();return}const S=vt(o.pathname,i),N=new URL(o.origin+S+o.search+o.hash);be(j),b(),d&&f.navigating.set({from:a.url,to:N}),await pe(N,u,!1,{scroll:p,keepfocus:w,details:h},()=>{const $={from:_,to:N};r.after_navigate.forEach(y=>y($)),f.navigating.set(null)})}function Q(o){return location.href=o.href,new Promise(()=>{})}return{after_navigate:o=>{ye(()=>(r.after_navigate.push(o),()=>{const p=r.after_navigate.indexOf(o);r.after_navigate.splice(p,1)}))},before_navigate:o=>{ye(()=>(r.before_navigate.push(o),()=>{const p=r.before_navigate.indexOf(o);r.before_navigate.splice(p,1)}))},disable_scroll_handling:()=>{(E||!d)&&(L=!1)},goto:(o,p={})=>Se(o,p,[]),invalidate:o=>{if(typeof o=="function")c.push(o);else{const{href:p}=new URL(o,location.href);c.push(w=>w===p)}return M||(M=Promise.resolve().then(async()=>{await pe(new URL(location.href),[],!0),M=null})),M},prefetch:async o=>{const p=new URL(o,ze(document));await Ue(p)},prefetch_routes:async o=>{const w=(o?we.filter(u=>o.some(h=>u.exec(h))):we).map(u=>Promise.all(u.a.map(h=>h())));await Promise.all(w)},_start_router:()=>{history.scrollRestoration="manual",addEventListener("beforeunload",u=>{let h=!1;const b={from:a.url,to:null,cancel:()=>h=!0};r.before_navigate.forEach(v=>v(b)),h?(u.preventDefault(),u.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"){be(j);try{sessionStorage[We]=JSON.stringify(te)}catch{}}});const o=u=>{const h=qe(u);h&&h.href&&h.hasAttribute("sveltekit:prefetch")&&Ue(Je(h))};let p;const w=u=>{clearTimeout(p),p=setTimeout(()=>{var h;(h=u.target)==null||h.dispatchEvent(new CustomEvent("sveltekit:trigger_prefetch",{bubbles:!0}))},20)};addEventListener("touchstart",o),addEventListener("mousemove",w),addEventListener("sveltekit:trigger_prefetch",o),addEventListener("click",u=>{if(!F||u.button||u.which!==1||u.metaKey||u.ctrlKey||u.shiftKey||u.altKey||u.defaultPrevented)return;const h=qe(u);if(!h||!h.href)return;const b=h instanceof SVGAElement,v=Je(h);if(!b&&v.origin==="null")return;const _=(h.getAttribute("rel")||"").split(/\s+/);if(h.hasAttribute("download")||_.includes("external")||h.hasAttribute("sveltekit:reload")||(b?h.target.baseVal:h.target))return;const[m,R]=v.href.split("#");if(R!==void 0&&m===location.href.split("#")[0]){ue=!0,be(j),f.page.set({...de,url:v}),f.page.notify();return}_e({url:v,scroll:h.hasAttribute("sveltekit:noscroll")?ve():null,keepfocus:!1,redirect_chain:[],details:{state:{},replaceState:v.href===location.href},accepted:()=>u.preventDefault(),blocked:()=>u.preventDefault()})}),addEventListener("popstate",u=>{if(u.state&&F){if(u.state[B]===j)return;_e({url:new URL(location.href),scroll:te[u.state[B]],keepfocus:!1,redirect_chain:[],details:null,accepted:()=>{j=u.state[B]},blocked:()=>{const h=j-u.state[B];history.go(h)}})}}),addEventListener("hashchange",()=>{ue&&(ue=!1,history.replaceState({...history.state,[B]:++j},"",location.href))})},_hydrate:async({status:o,error:p,nodes:w,params:u,routeId:h})=>{const b=new URL(location.href),v=[];let _={},m,R;try{for(let S=0;S
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Drawing to Map
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/build/robots.txt b/frontend/build/robots.txt
new file mode 100755
index 0000000000000000000000000000000000000000..e9e57dc4d41b9b46e05112e9f45b7ea6ac0ba15e
--- /dev/null
+++ b/frontend/build/robots.txt
@@ -0,0 +1,3 @@
+# https://www.robotstxt.org/robotstxt.html
+User-agent: *
+Disallow:
diff --git a/frontend/build/samples/example0.png b/frontend/build/samples/example0.png
new file mode 100644
index 0000000000000000000000000000000000000000..58bd9783d6a758bdb2b4d3ad963314157e6c2180
Binary files /dev/null and b/frontend/build/samples/example0.png differ
diff --git a/frontend/build/samples/example1.png b/frontend/build/samples/example1.png
new file mode 100644
index 0000000000000000000000000000000000000000..b5e6b94f1ec047508a5937d19901815ca70fbca9
Binary files /dev/null and b/frontend/build/samples/example1.png differ
diff --git a/frontend/build/samples/example2.png b/frontend/build/samples/example2.png
new file mode 100644
index 0000000000000000000000000000000000000000..89f530255661e07e0c64e05827fc6568279e3a11
Binary files /dev/null and b/frontend/build/samples/example2.png differ
diff --git a/frontend/build/samples/example3.png b/frontend/build/samples/example3.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca9a6681bb1dbf01382116f5072e44c618470e04
Binary files /dev/null and b/frontend/build/samples/example3.png differ
diff --git a/frontend/build/samples/example4.png b/frontend/build/samples/example4.png
new file mode 100644
index 0000000000000000000000000000000000000000..30d9a1aa3e92a4f071d975eea95c9aecea438d0b
Binary files /dev/null and b/frontend/build/samples/example4.png differ
diff --git a/frontend/build/samples/example5.png b/frontend/build/samples/example5.png
new file mode 100644
index 0000000000000000000000000000000000000000..da8c7584832fc112ea8e61829d69ab40e9f09240
Binary files /dev/null and b/frontend/build/samples/example5.png differ
diff --git a/frontend/build/svelte-welcome.png b/frontend/build/svelte-welcome.png
new file mode 100755
index 0000000000000000000000000000000000000000..fe7d2d6b50ce937a0c3cecaa9a3501dfe138b7c8
Binary files /dev/null and b/frontend/build/svelte-welcome.png differ
diff --git a/frontend/build/svelte-welcome.webp b/frontend/build/svelte-welcome.webp
new file mode 100755
index 0000000000000000000000000000000000000000..6ec1a28d63b49d9288d0bc3bf3a341eb4edf3318
Binary files /dev/null and b/frontend/build/svelte-welcome.webp differ
diff --git a/frontend/images/example0.png b/frontend/images/example0.png
new file mode 100644
index 0000000000000000000000000000000000000000..58bd9783d6a758bdb2b4d3ad963314157e6c2180
Binary files /dev/null and b/frontend/images/example0.png differ
diff --git a/frontend/images/example1.png b/frontend/images/example1.png
new file mode 100644
index 0000000000000000000000000000000000000000..b5e6b94f1ec047508a5937d19901815ca70fbca9
Binary files /dev/null and b/frontend/images/example1.png differ
diff --git a/frontend/images/example2.png b/frontend/images/example2.png
new file mode 100644
index 0000000000000000000000000000000000000000..89f530255661e07e0c64e05827fc6568279e3a11
Binary files /dev/null and b/frontend/images/example2.png differ
diff --git a/frontend/images/example3.png b/frontend/images/example3.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca9a6681bb1dbf01382116f5072e44c618470e04
Binary files /dev/null and b/frontend/images/example3.png differ
diff --git a/frontend/images/example4.png b/frontend/images/example4.png
new file mode 100644
index 0000000000000000000000000000000000000000..30d9a1aa3e92a4f071d975eea95c9aecea438d0b
Binary files /dev/null and b/frontend/images/example4.png differ
diff --git a/frontend/images/example5.png b/frontend/images/example5.png
new file mode 100644
index 0000000000000000000000000000000000000000..da8c7584832fc112ea8e61829d69ab40e9f09240
Binary files /dev/null and b/frontend/images/example5.png differ
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
new file mode 100755
index 0000000000000000000000000000000000000000..82bed3764e58bb2a17cdb5a4fcf7e9879ca65a46
--- /dev/null
+++ b/frontend/package-lock.json
@@ -0,0 +1,5158 @@
+{
+ "name": "drawings-to-human",
+ "version": "0.0.1",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "drawings-to-human",
+ "version": "0.0.1",
+ "dependencies": {
+ "@fontsource/fira-mono": "^4.5.0",
+ "cookie": "^0.4.1",
+ "nanoid": "^4.0.0",
+ "px-brush": "^1.0.1"
+ },
+ "devDependencies": {
+ "@sveltejs/adapter-static": "^1.0.0-next.34",
+ "@sveltejs/kit": "next",
+ "@tailwindcss/typography": "^0.5.2",
+ "@types/cookie": "^0.5.1",
+ "@typescript-eslint/eslint-plugin": "^5.27.0",
+ "@typescript-eslint/parser": "^5.27.0",
+ "autoprefixer": "^10.4.7",
+ "eslint": "^8.16.0",
+ "eslint-config-prettier": "^8.3.0",
+ "eslint-plugin-svelte3": "^4.0.0",
+ "postcss": "^8.4.14",
+ "prettier": "^2.6.2",
+ "prettier-plugin-svelte": "^2.7.0",
+ "svelte": "^3.46.0",
+ "svelte-check": "^2.7.1",
+ "svelte-preprocess": "^4.10.7",
+ "tailwindcss": "^3.1.4",
+ "tslib": "^2.3.1",
+ "typescript": "^4.7.2"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+ "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.3.2",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@fontsource/fira-mono": {
+ "version": "4.5.8",
+ "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.8.tgz",
+ "integrity": "sha512-sFuSPB/Km8B1fy3CH0NqO5Nb4GmVMzp3XFaw6MwK293xhm3OnB68QJawwTTjLewcrS78wOTAhTUB058qxurJoQ=="
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz",
+ "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
+ "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
+ "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+ "dev": true,
+ "dependencies": {
+ "estree-walker": "^2.0.1",
+ "picomatch": "^2.2.2"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/@sveltejs/adapter-static": {
+ "version": "1.0.0-next.34",
+ "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-1.0.0-next.34.tgz",
+ "integrity": "sha512-XjuMhemme5z0L/B2nTZpA6k+RJjF+b6L96ts6gIQ6ixiCzJQSbBqJhrrBYBCaeLAKvdUMoGEmX8m862JhKjRFg==",
+ "dev": true,
+ "dependencies": {
+ "tiny-glob": "^0.2.9"
+ }
+ },
+ "node_modules/@sveltejs/kit": {
+ "version": "1.0.0-next.358",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.358.tgz",
+ "integrity": "sha512-GaP7oKS9eawpCy01piJmdDqobFVsFObXSC5sGydyqwqe1RXOR/QoISBys6SZJ+gx+1bp9AOwvIiw7+GrltDN8A==",
+ "dev": true,
+ "dependencies": {
+ "@sveltejs/vite-plugin-svelte": "^1.0.0-next.48",
+ "chokidar": "^3.5.3",
+ "sade": "^1.8.1",
+ "vite": "^2.9.10"
+ },
+ "bin": {
+ "svelte-kit": "svelte-kit.js"
+ },
+ "engines": {
+ "node": ">=16.7"
+ },
+ "peerDependencies": {
+ "svelte": "^3.44.0"
+ }
+ },
+ "node_modules/@sveltejs/vite-plugin-svelte": {
+ "version": "1.0.0-next.49",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.49.tgz",
+ "integrity": "sha512-AKh0Ka8EDgidnxWUs8Hh2iZLZovkETkefO99XxZ4sW4WGJ7VFeBx5kH/NIIGlaNHLcrIvK3CK0HkZwC3Cici0A==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^4.2.1",
+ "debug": "^4.3.4",
+ "deepmerge": "^4.2.2",
+ "kleur": "^4.1.4",
+ "magic-string": "^0.26.2",
+ "svelte-hmr": "^0.14.12"
+ },
+ "engines": {
+ "node": "^14.13.1 || >= 16"
+ },
+ "peerDependencies": {
+ "diff-match-patch": "^1.0.5",
+ "svelte": "^3.44.0",
+ "vite": "^2.9.0"
+ },
+ "peerDependenciesMeta": {
+ "diff-match-patch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@tailwindcss/typography": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.2.tgz",
+ "integrity": "sha512-coq8DBABRPFcVhVIk6IbKyyHUt7YTEC/C992tatFB+yEx5WGBQrCgsSFjxHUr8AWXphWckadVJbominEduYBqw==",
+ "dev": true,
+ "dependencies": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || insiders"
+ }
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz",
+ "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==",
+ "dev": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz",
+ "integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg==",
+ "dev": true
+ },
+ "node_modules/@types/pug": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz",
+ "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==",
+ "dev": true
+ },
+ "node_modules/@types/sass": {
+ "version": "1.43.1",
+ "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz",
+ "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz",
+ "integrity": "sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.30.5",
+ "@typescript-eslint/type-utils": "5.30.5",
+ "@typescript-eslint/utils": "5.30.5",
+ "debug": "^4.3.4",
+ "functional-red-black-tree": "^1.0.1",
+ "ignore": "^5.2.0",
+ "regexpp": "^3.2.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.5.tgz",
+ "integrity": "sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.30.5",
+ "@typescript-eslint/types": "5.30.5",
+ "@typescript-eslint/typescript-estree": "5.30.5",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz",
+ "integrity": "sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.30.5",
+ "@typescript-eslint/visitor-keys": "5.30.5"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz",
+ "integrity": "sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/utils": "5.30.5",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.5.tgz",
+ "integrity": "sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz",
+ "integrity": "sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.30.5",
+ "@typescript-eslint/visitor-keys": "5.30.5",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.5.tgz",
+ "integrity": "sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.30.5",
+ "@typescript-eslint/types": "5.30.5",
+ "@typescript-eslint/typescript-estree": "5.30.5",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz",
+ "integrity": "sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.30.5",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.7.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
+ "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/acorn-node/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz",
+ "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.20.3",
+ "caniuse-lite": "^1.0.30001335",
+ "fraction.js": "^4.2.0",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz",
+ "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001359",
+ "electron-to-chromium": "^1.4.172",
+ "node-releases": "^2.0.5",
+ "update-browserslist-db": "^1.0.4"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001363",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz",
+ "integrity": "sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==",
+ "dev": true
+ },
+ "node_modules/detect-indent": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
+ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detective": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
+ "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
+ "dev": true,
+ "dependencies": {
+ "acorn-node": "^1.8.2",
+ "defined": "^1.0.0",
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "detective": "bin/detective.js"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.179",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.179.tgz",
+ "integrity": "sha512-1XeTb/U/8Xgh2YgPOqhakLYsvCcU4U7jUjTMbEnhIJoIWd/Qt3yC8y0cbG+fHzn4zUNF99Ey1xiPf20bwgLO3Q==",
+ "dev": true
+ },
+ "node_modules/es6-promise": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
+ "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==",
+ "dev": true
+ },
+ "node_modules/esbuild": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.48.tgz",
+ "integrity": "sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "esbuild-android-64": "0.14.48",
+ "esbuild-android-arm64": "0.14.48",
+ "esbuild-darwin-64": "0.14.48",
+ "esbuild-darwin-arm64": "0.14.48",
+ "esbuild-freebsd-64": "0.14.48",
+ "esbuild-freebsd-arm64": "0.14.48",
+ "esbuild-linux-32": "0.14.48",
+ "esbuild-linux-64": "0.14.48",
+ "esbuild-linux-arm": "0.14.48",
+ "esbuild-linux-arm64": "0.14.48",
+ "esbuild-linux-mips64le": "0.14.48",
+ "esbuild-linux-ppc64le": "0.14.48",
+ "esbuild-linux-riscv64": "0.14.48",
+ "esbuild-linux-s390x": "0.14.48",
+ "esbuild-netbsd-64": "0.14.48",
+ "esbuild-openbsd-64": "0.14.48",
+ "esbuild-sunos-64": "0.14.48",
+ "esbuild-windows-32": "0.14.48",
+ "esbuild-windows-64": "0.14.48",
+ "esbuild-windows-arm64": "0.14.48"
+ }
+ },
+ "node_modules/esbuild-android-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz",
+ "integrity": "sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-android-arm64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz",
+ "integrity": "sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz",
+ "integrity": "sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-arm64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz",
+ "integrity": "sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz",
+ "integrity": "sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-arm64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz",
+ "integrity": "sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-32": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz",
+ "integrity": "sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz",
+ "integrity": "sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz",
+ "integrity": "sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz",
+ "integrity": "sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-mips64le": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz",
+ "integrity": "sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-ppc64le": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz",
+ "integrity": "sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-riscv64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz",
+ "integrity": "sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-s390x": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz",
+ "integrity": "sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-netbsd-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz",
+ "integrity": "sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-openbsd-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz",
+ "integrity": "sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-sunos-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz",
+ "integrity": "sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-32": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz",
+ "integrity": "sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz",
+ "integrity": "sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-arm64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz",
+ "integrity": "sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz",
+ "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/eslintrc": "^1.3.0",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.2",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
+ "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-svelte3": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-4.0.0.tgz",
+ "integrity": "sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==",
+ "dev": true,
+ "peerDependencies": {
+ "eslint": ">=8.0.0",
+ "svelte": "^3.2.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
+ "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.7.1",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz",
+ "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==",
+ "dev": true
+ },
+ "node_modules/fraction.js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://www.patreon.com/infusion"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
+ "dev": true
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.16.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz",
+ "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
+ "dev": true
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "dev": true
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-fresh/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
+ "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+ "dev": true
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.26.2",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz",
+ "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==",
+ "dev": true,
+ "dependencies": {
+ "sourcemap-codec": "^1.4.8"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "dev": true
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz",
+ "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==",
+ "bin": {
+ "nanoid": "bin/nanoid.js"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
+ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==",
+ "dev": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
+ "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+ "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
+ "dev": true,
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+ "dev": true,
+ "dependencies": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^1.10.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
+ "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.6"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "node_modules/postcss/node_modules/nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
+ "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-plugin-svelte": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.7.0.tgz",
+ "integrity": "sha512-fQhhZICprZot2IqEyoiUYLTRdumULGRvw0o4dzl5jt0jfzVWdGqeYW27QTWAeXhoupEZJULmNoH3ueJwUWFLIA==",
+ "dev": true,
+ "peerDependencies": {
+ "prettier": "^1.16.4 || ^2.0.0",
+ "svelte": "^3.2.0"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/px-brush": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/px-brush/-/px-brush-1.0.1.tgz",
+ "integrity": "sha512-qoj7J6pJfNt4SCpxrUdeVRadhSPVHcNmXWWhRgiw17DqC+S/AojYKESfiIb514L4WgTfitByRpHMnnRp2fNNJw=="
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "2.75.7",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.7.tgz",
+ "integrity": "sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==",
+ "dev": true,
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/sade": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
+ "dev": true,
+ "dependencies": {
+ "mri": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/sander": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz",
+ "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==",
+ "dev": true,
+ "dependencies": {
+ "es6-promise": "^3.1.2",
+ "graceful-fs": "^4.1.3",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.2"
+ }
+ },
+ "node_modules/sander/node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sorcery": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz",
+ "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==",
+ "dev": true,
+ "dependencies": {
+ "buffer-crc32": "^0.2.5",
+ "minimist": "^1.2.0",
+ "sander": "^0.5.0",
+ "sourcemap-codec": "^1.3.0"
+ },
+ "bin": {
+ "sorcery": "bin/index.js"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "dev": true
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svelte": {
+ "version": "3.48.0",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.48.0.tgz",
+ "integrity": "sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/svelte-check": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.8.0.tgz",
+ "integrity": "sha512-HRL66BxffMAZusqe5I5k26mRWQ+BobGd9Rxm3onh7ZVu0nTk8YTKJ9vu3LVPjUGLU9IX7zS+jmwPVhJYdXJ8vg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.9",
+ "chokidar": "^3.4.1",
+ "fast-glob": "^3.2.7",
+ "import-fresh": "^3.2.1",
+ "picocolors": "^1.0.0",
+ "sade": "^1.7.4",
+ "svelte-preprocess": "^4.0.0",
+ "typescript": "*"
+ },
+ "bin": {
+ "svelte-check": "bin/svelte-check"
+ },
+ "peerDependencies": {
+ "svelte": "^3.24.0"
+ }
+ },
+ "node_modules/svelte-hmr": {
+ "version": "0.14.12",
+ "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.12.tgz",
+ "integrity": "sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20 || ^14.13.1 || >= 16"
+ },
+ "peerDependencies": {
+ "svelte": ">=3.19.0"
+ }
+ },
+ "node_modules/svelte-preprocess": {
+ "version": "4.10.7",
+ "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz",
+ "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@types/pug": "^2.0.4",
+ "@types/sass": "^1.16.0",
+ "detect-indent": "^6.0.0",
+ "magic-string": "^0.25.7",
+ "sorcery": "^0.10.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 9.11.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.10.2",
+ "coffeescript": "^2.5.1",
+ "less": "^3.11.3 || ^4.0.0",
+ "postcss": "^7 || ^8",
+ "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0",
+ "pug": "^3.0.0",
+ "sass": "^1.26.8",
+ "stylus": "^0.55.0",
+ "sugarss": "^2.0.0",
+ "svelte": "^3.23.0",
+ "typescript": "^3.9.5 || ^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "coffeescript": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "node-sass": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "postcss-load-config": {
+ "optional": true
+ },
+ "pug": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/svelte-preprocess/node_modules/magic-string": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
+ "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "dev": true,
+ "dependencies": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.4.tgz",
+ "integrity": "sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ==",
+ "dev": true,
+ "dependencies": {
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "color-name": "^1.1.4",
+ "detective": "^5.2.1",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.11",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "lilconfig": "^2.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.14",
+ "postcss-import": "^14.1.0",
+ "postcss-js": "^4.0.0",
+ "postcss-load-config": "^3.1.4",
+ "postcss-nested": "5.0.6",
+ "postcss-selector-parser": "^6.0.10",
+ "postcss-value-parser": "^4.2.0",
+ "quick-lru": "^5.1.1",
+ "resolve": "^1.22.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=12.13.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.9"
+ }
+ },
+ "node_modules/tailwindcss/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/tiny-glob": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
+ "dev": true,
+ "dependencies": {
+ "globalyzer": "0.1.0",
+ "globrex": "^0.1.2"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
+ },
+ "node_modules/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+ }
+ },
+ "node_modules/tsutils/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "4.7.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
+ "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz",
+ "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "browserslist-lint": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "node_modules/v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "node_modules/vite": {
+ "version": "2.9.13",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.13.tgz",
+ "integrity": "sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.14.27",
+ "postcss": "^8.4.13",
+ "resolve": "^1.22.0",
+ "rollup": "^2.59.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": ">=12.2.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "less": "*",
+ "sass": "*",
+ "stylus": "*"
+ },
+ "peerDependenciesMeta": {
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ }
+ },
+ "dependencies": {
+ "@eslint/eslintrc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+ "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.3.2",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "@fontsource/fira-mono": {
+ "version": "4.5.8",
+ "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.8.tgz",
+ "integrity": "sha512-sFuSPB/Km8B1fy3CH0NqO5Nb4GmVMzp3XFaw6MwK293xhm3OnB68QJawwTTjLewcrS78wOTAhTUB058qxurJoQ=="
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz",
+ "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==",
+ "dev": true
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
+ "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@rollup/pluginutils": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
+ "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^2.0.1",
+ "picomatch": "^2.2.2"
+ }
+ },
+ "@sveltejs/adapter-static": {
+ "version": "1.0.0-next.34",
+ "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-1.0.0-next.34.tgz",
+ "integrity": "sha512-XjuMhemme5z0L/B2nTZpA6k+RJjF+b6L96ts6gIQ6ixiCzJQSbBqJhrrBYBCaeLAKvdUMoGEmX8m862JhKjRFg==",
+ "dev": true,
+ "requires": {
+ "tiny-glob": "^0.2.9"
+ }
+ },
+ "@sveltejs/kit": {
+ "version": "1.0.0-next.358",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.358.tgz",
+ "integrity": "sha512-GaP7oKS9eawpCy01piJmdDqobFVsFObXSC5sGydyqwqe1RXOR/QoISBys6SZJ+gx+1bp9AOwvIiw7+GrltDN8A==",
+ "dev": true,
+ "requires": {
+ "@sveltejs/vite-plugin-svelte": "^1.0.0-next.48",
+ "chokidar": "^3.5.3",
+ "sade": "^1.8.1",
+ "vite": "^2.9.10"
+ }
+ },
+ "@sveltejs/vite-plugin-svelte": {
+ "version": "1.0.0-next.49",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.49.tgz",
+ "integrity": "sha512-AKh0Ka8EDgidnxWUs8Hh2iZLZovkETkefO99XxZ4sW4WGJ7VFeBx5kH/NIIGlaNHLcrIvK3CK0HkZwC3Cici0A==",
+ "dev": true,
+ "requires": {
+ "@rollup/pluginutils": "^4.2.1",
+ "debug": "^4.3.4",
+ "deepmerge": "^4.2.2",
+ "kleur": "^4.1.4",
+ "magic-string": "^0.26.2",
+ "svelte-hmr": "^0.14.12"
+ }
+ },
+ "@tailwindcss/typography": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.2.tgz",
+ "integrity": "sha512-coq8DBABRPFcVhVIk6IbKyyHUt7YTEC/C992tatFB+yEx5WGBQrCgsSFjxHUr8AWXphWckadVJbominEduYBqw==",
+ "dev": true,
+ "requires": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2"
+ }
+ },
+ "@types/cookie": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz",
+ "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==",
+ "dev": true
+ },
+ "@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz",
+ "integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg==",
+ "dev": true
+ },
+ "@types/pug": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz",
+ "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==",
+ "dev": true
+ },
+ "@types/sass": {
+ "version": "1.43.1",
+ "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz",
+ "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz",
+ "integrity": "sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.30.5",
+ "@typescript-eslint/type-utils": "5.30.5",
+ "@typescript-eslint/utils": "5.30.5",
+ "debug": "^4.3.4",
+ "functional-red-black-tree": "^1.0.1",
+ "ignore": "^5.2.0",
+ "regexpp": "^3.2.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.5.tgz",
+ "integrity": "sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.30.5",
+ "@typescript-eslint/types": "5.30.5",
+ "@typescript-eslint/typescript-estree": "5.30.5",
+ "debug": "^4.3.4"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz",
+ "integrity": "sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.30.5",
+ "@typescript-eslint/visitor-keys": "5.30.5"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz",
+ "integrity": "sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/utils": "5.30.5",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.5.tgz",
+ "integrity": "sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz",
+ "integrity": "sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.30.5",
+ "@typescript-eslint/visitor-keys": "5.30.5",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.5.tgz",
+ "integrity": "sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.30.5",
+ "@typescript-eslint/types": "5.30.5",
+ "@typescript-eslint/typescript-estree": "5.30.5",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.30.5",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz",
+ "integrity": "sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.30.5",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "acorn": {
+ "version": "8.7.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
+ "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ }
+ }
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "10.4.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz",
+ "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.20.3",
+ "caniuse-lite": "^1.0.30001335",
+ "fraction.js": "^4.2.0",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.21.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz",
+ "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001359",
+ "electron-to-chromium": "^1.4.172",
+ "node-releases": "^2.0.5",
+ "update-browserslist-db": "^1.0.4"
+ }
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001363",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz",
+ "integrity": "sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
+ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
+ "dev": true
+ },
+ "detective": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
+ "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.8.2",
+ "defined": "^1.0.0",
+ "minimist": "^1.2.6"
+ }
+ },
+ "didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.4.179",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.179.tgz",
+ "integrity": "sha512-1XeTb/U/8Xgh2YgPOqhakLYsvCcU4U7jUjTMbEnhIJoIWd/Qt3yC8y0cbG+fHzn4zUNF99Ey1xiPf20bwgLO3Q==",
+ "dev": true
+ },
+ "es6-promise": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
+ "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==",
+ "dev": true
+ },
+ "esbuild": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.48.tgz",
+ "integrity": "sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==",
+ "dev": true,
+ "requires": {
+ "esbuild-android-64": "0.14.48",
+ "esbuild-android-arm64": "0.14.48",
+ "esbuild-darwin-64": "0.14.48",
+ "esbuild-darwin-arm64": "0.14.48",
+ "esbuild-freebsd-64": "0.14.48",
+ "esbuild-freebsd-arm64": "0.14.48",
+ "esbuild-linux-32": "0.14.48",
+ "esbuild-linux-64": "0.14.48",
+ "esbuild-linux-arm": "0.14.48",
+ "esbuild-linux-arm64": "0.14.48",
+ "esbuild-linux-mips64le": "0.14.48",
+ "esbuild-linux-ppc64le": "0.14.48",
+ "esbuild-linux-riscv64": "0.14.48",
+ "esbuild-linux-s390x": "0.14.48",
+ "esbuild-netbsd-64": "0.14.48",
+ "esbuild-openbsd-64": "0.14.48",
+ "esbuild-sunos-64": "0.14.48",
+ "esbuild-windows-32": "0.14.48",
+ "esbuild-windows-64": "0.14.48",
+ "esbuild-windows-arm64": "0.14.48"
+ }
+ },
+ "esbuild-android-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz",
+ "integrity": "sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-android-arm64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz",
+ "integrity": "sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-darwin-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz",
+ "integrity": "sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-darwin-arm64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz",
+ "integrity": "sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-freebsd-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz",
+ "integrity": "sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-freebsd-arm64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz",
+ "integrity": "sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-32": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz",
+ "integrity": "sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz",
+ "integrity": "sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-arm": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz",
+ "integrity": "sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-arm64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz",
+ "integrity": "sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-mips64le": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz",
+ "integrity": "sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-ppc64le": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz",
+ "integrity": "sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-riscv64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz",
+ "integrity": "sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-s390x": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz",
+ "integrity": "sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-netbsd-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz",
+ "integrity": "sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-openbsd-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz",
+ "integrity": "sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-sunos-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz",
+ "integrity": "sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-32": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz",
+ "integrity": "sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz",
+ "integrity": "sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-arm64": {
+ "version": "0.14.48",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz",
+ "integrity": "sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==",
+ "dev": true,
+ "optional": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "eslint": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz",
+ "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==",
+ "dev": true,
+ "requires": {
+ "@eslint/eslintrc": "^1.3.0",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.2",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ }
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
+ "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-plugin-svelte3": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-4.0.0.tgz",
+ "integrity": "sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
+ "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.7.1",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz",
+ "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==",
+ "dev": true
+ },
+ "fraction.js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "13.16.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz",
+ "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "globalyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
+ "dev": true
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ }
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lilconfig": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
+ "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+ "dev": true
+ },
+ "lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "magic-string": {
+ "version": "0.26.2",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz",
+ "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==",
+ "dev": true,
+ "requires": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.6"
+ }
+ },
+ "mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz",
+ "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg=="
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node-releases": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
+ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true
+ },
+ "object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.4.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
+ "dev": true,
+ "requires": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "dependencies": {
+ "nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-import": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
+ "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ }
+ },
+ "postcss-js": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+ "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
+ "dev": true,
+ "requires": {
+ "camelcase-css": "^2.0.1"
+ }
+ },
+ "postcss-load-config": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+ "dev": true,
+ "requires": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^1.10.2"
+ }
+ },
+ "postcss-nested": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
+ "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.6"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "prettier": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
+ "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
+ "dev": true
+ },
+ "prettier-plugin-svelte": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.7.0.tgz",
+ "integrity": "sha512-fQhhZICprZot2IqEyoiUYLTRdumULGRvw0o4dzl5jt0jfzVWdGqeYW27QTWAeXhoupEZJULmNoH3ueJwUWFLIA==",
+ "dev": true,
+ "requires": {}
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "px-brush": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/px-brush/-/px-brush-1.0.1.tgz",
+ "integrity": "sha512-qoj7J6pJfNt4SCpxrUdeVRadhSPVHcNmXWWhRgiw17DqC+S/AojYKESfiIb514L4WgTfitByRpHMnnRp2fNNJw=="
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true
+ },
+ "read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^2.3.0"
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "rollup": {
+ "version": "2.75.7",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.7.tgz",
+ "integrity": "sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==",
+ "dev": true,
+ "requires": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "sade": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
+ "dev": true,
+ "requires": {
+ "mri": "^1.1.0"
+ }
+ },
+ "sander": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz",
+ "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==",
+ "dev": true,
+ "requires": {
+ "es6-promise": "^3.1.2",
+ "graceful-fs": "^4.1.3",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.2"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "sorcery": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz",
+ "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "^0.2.5",
+ "minimist": "^1.2.0",
+ "sander": "^0.5.0",
+ "sourcemap-codec": "^1.3.0"
+ }
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true
+ },
+ "sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "requires": {
+ "min-indent": "^1.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
+ "svelte": {
+ "version": "3.48.0",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.48.0.tgz",
+ "integrity": "sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==",
+ "dev": true
+ },
+ "svelte-check": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.8.0.tgz",
+ "integrity": "sha512-HRL66BxffMAZusqe5I5k26mRWQ+BobGd9Rxm3onh7ZVu0nTk8YTKJ9vu3LVPjUGLU9IX7zS+jmwPVhJYdXJ8vg==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.9",
+ "chokidar": "^3.4.1",
+ "fast-glob": "^3.2.7",
+ "import-fresh": "^3.2.1",
+ "picocolors": "^1.0.0",
+ "sade": "^1.7.4",
+ "svelte-preprocess": "^4.0.0",
+ "typescript": "*"
+ }
+ },
+ "svelte-hmr": {
+ "version": "0.14.12",
+ "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.12.tgz",
+ "integrity": "sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w==",
+ "dev": true,
+ "requires": {}
+ },
+ "svelte-preprocess": {
+ "version": "4.10.7",
+ "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz",
+ "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==",
+ "dev": true,
+ "requires": {
+ "@types/pug": "^2.0.4",
+ "@types/sass": "^1.16.0",
+ "detect-indent": "^6.0.0",
+ "magic-string": "^0.25.7",
+ "sorcery": "^0.10.0",
+ "strip-indent": "^3.0.0"
+ },
+ "dependencies": {
+ "magic-string": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
+ "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "dev": true,
+ "requires": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ }
+ }
+ },
+ "tailwindcss": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.4.tgz",
+ "integrity": "sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ==",
+ "dev": true,
+ "requires": {
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "color-name": "^1.1.4",
+ "detective": "^5.2.1",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.11",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "lilconfig": "^2.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.14",
+ "postcss-import": "^14.1.0",
+ "postcss-js": "^4.0.0",
+ "postcss-load-config": "^3.1.4",
+ "postcss-nested": "5.0.6",
+ "postcss-selector-parser": "^6.0.10",
+ "postcss-value-parser": "^4.2.0",
+ "quick-lru": "^5.1.1",
+ "resolve": "^1.22.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "tiny-glob": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
+ "dev": true,
+ "requires": {
+ "globalyzer": "0.1.0",
+ "globrex": "^0.1.2"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
+ },
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ }
+ }
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "typescript": {
+ "version": "4.7.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
+ "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
+ "dev": true
+ },
+ "update-browserslist-db": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz",
+ "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==",
+ "dev": true,
+ "requires": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "vite": {
+ "version": "2.9.13",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.13.tgz",
+ "integrity": "sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw==",
+ "dev": true,
+ "requires": {
+ "esbuild": "^0.14.27",
+ "fsevents": "~2.3.2",
+ "postcss": "^8.4.13",
+ "resolve": "^1.22.0",
+ "rollup": "^2.59.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true
+ }
+ }
+}
diff --git a/frontend/package.json b/frontend/package.json
new file mode 100755
index 0000000000000000000000000000000000000000..99808862e4033580bcc9f777e9b6fe14e5a55027
--- /dev/null
+++ b/frontend/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "drawings-to-human",
+ "version": "0.0.1",
+ "scripts": {
+ "dev": "svelte-kit dev",
+ "build": "svelte-kit build",
+ "package": "svelte-kit package",
+ "preview": "svelte-kit preview",
+ "prepare": "svelte-kit sync",
+ "check": "svelte-check --tsconfig ./tsconfig.json",
+ "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch",
+ "lint": "prettier --check --plugin-search-dir=. . && eslint .",
+ "format": "prettier --write --plugin-search-dir=. ."
+ },
+ "devDependencies": {
+ "@sveltejs/adapter-static": "^1.0.0-next.34",
+ "@sveltejs/kit": "next",
+ "@tailwindcss/typography": "^0.5.2",
+ "@types/cookie": "^0.5.1",
+ "@typescript-eslint/eslint-plugin": "^5.27.0",
+ "@typescript-eslint/parser": "^5.27.0",
+ "autoprefixer": "^10.4.7",
+ "eslint": "^8.16.0",
+ "eslint-config-prettier": "^8.3.0",
+ "eslint-plugin-svelte3": "^4.0.0",
+ "postcss": "^8.4.14",
+ "prettier": "^2.6.2",
+ "prettier-plugin-svelte": "^2.7.0",
+ "svelte": "^3.46.0",
+ "svelte-check": "^2.7.1",
+ "svelte-preprocess": "^4.10.7",
+ "tailwindcss": "^3.1.4",
+ "tslib": "^2.3.1",
+ "typescript": "^4.7.2"
+ },
+ "type": "module",
+ "dependencies": {
+ "@fontsource/fira-mono": "^4.5.0",
+ "cookie": "^0.4.1",
+ "nanoid": "^4.0.0",
+ "px-brush": "^1.0.1"
+ }
+}
diff --git a/frontend/postcss.config.cjs b/frontend/postcss.config.cjs
new file mode 100755
index 0000000000000000000000000000000000000000..33ad091d26d8a9dc95ebdf616e217d985ec215b8
--- /dev/null
+++ b/frontend/postcss.config.cjs
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/frontend/src/app.css b/frontend/src/app.css
new file mode 100755
index 0000000000000000000000000000000000000000..f39386e47449716dc5a0c936162a38263e61b2b7
--- /dev/null
+++ b/frontend/src/app.css
@@ -0,0 +1,10 @@
+@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@100;200;300;400;500;600;700;800&display=swap');
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer base {
+ html {
+ font-family: 'Open Sans', sans-serif;
+ }
+}
diff --git a/frontend/src/app.d.ts b/frontend/src/app.d.ts
new file mode 100755
index 0000000000000000000000000000000000000000..9ca010a6dc91bcfac91c85f03a2dcddef3a379d9
--- /dev/null
+++ b/frontend/src/app.d.ts
@@ -0,0 +1,16 @@
+///
+
+// See https://kit.svelte.dev/docs/types#app
+// for information about these interfaces
+// and what to do when importing types
+declare namespace App {
+ interface Locals {
+ userid: string;
+ }
+
+ // interface Platform {}
+
+ // interface Session {}
+
+ // interface Stuff {}
+}
diff --git a/frontend/src/app.html b/frontend/src/app.html
new file mode 100755
index 0000000000000000000000000000000000000000..0b76249c112e73699795cfba376c1f9316c394d2
--- /dev/null
+++ b/frontend/src/app.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+ %sveltekit.head%
+
+
+ %sveltekit.body%
+
+
diff --git a/frontend/src/data.ts b/frontend/src/data.ts
new file mode 100755
index 0000000000000000000000000000000000000000..d381417384a9de003220c5d52835e5f443f4ff91
--- /dev/null
+++ b/frontend/src/data.ts
@@ -0,0 +1,60 @@
+import type { Color } from './types';
+
+export const COLOR_LIST: Color[] = [
+ { color: [219, 14, 154], label: 'building'},
+ { color: [147, 142, 123], label: 'pervious surface'},
+ { color: [248, 12, 0], label: 'impervious surface'},
+ { color: [169, 113, 1], label: 'bare soil'},
+ { color: [21, 83, 174], label: 'water'},
+ { color: [25, 74, 38], label: 'coniferous'},
+ { color: [70, 228, 131], label: 'deciduous'},
+ { color: [243, 166, 13], label: 'brushwood'},
+ { color: [102, 0, 130], label: 'vineyard'},
+ { color: [85, 255, 0], label: 'herbaceous vegetation'},
+ { color: [255, 243, 13], label: 'agricultural land'},
+ { color: [228, 223, 124], label: 'plowed land'},
+ { color: [61, 230, 235], label: 'swimming pool'},
+ { color: [255, 255, 255], label: 'snow'},
+ { color: [138, 179, 160], label: 'clear cut'},
+ { color: [107, 113, 79], label: 'mixed'},
+ { color: [197, 220, 66], label: 'ligneous'},
+ { color: [153, 153, 255], label: 'greenhouse'},
+ { color: [0, 0, 0], label: 'other'}
+];
+
+//export const API = 'https://radames-text2human-api.hf.space';
+// export const API = 'http://localhost:7860';
+//export const API = 'https://hf.space/embed/CVPR/Text2Human';
+//export const API = 'https://hf.space/embed/hysts/Text2Human';
+export const API = '/predict';
+
+export const IMAGES_LIST = [
+ '/samples/example0.png',
+ '/samples/example1.png',
+ '/samples/example2.png',
+ '/samples/example3.png',
+ '/samples/example4.png',
+ '/samples/example5.png',
+];
+
+
+export const SECTIONS = [
+ "upper clothing texture",
+ "lower clothing texture",
+ "region"
+ ];
+
+export const TEXTURES = [
+ "pure color",
+ "stripe/spline",
+ "plaid/lattice",
+ "floral",
+ "denim"
+ ];
+
+export const PRESETS = [
+ ["Aerial view, France. High resolution image, 4K, ultra detailed", "Realistic"],
+ ["Aerial view, France. Colorful lego bricks", "Lego brick"],
+ ["Aerial view, France. Black and white paper pencil drawing", "Pencil"],
+ ["Aerial view, France. Oil on canvas painting", "Painting"]
+];
\ No newline at end of file
diff --git a/frontend/src/lib/BrushSelector.svelte b/frontend/src/lib/BrushSelector.svelte
new file mode 100755
index 0000000000000000000000000000000000000000..f34bcbecd674a89984a6261c07f51ba5e0427747
--- /dev/null
+++ b/frontend/src/lib/BrushSelector.svelte
@@ -0,0 +1,85 @@
+
+
+
+
+
diff --git a/frontend/src/lib/DrawingCanvas.svelte b/frontend/src/lib/DrawingCanvas.svelte
new file mode 100755
index 0000000000000000000000000000000000000000..7048af29dd554d6cd98f3942fbd90a65acb5fbe7
--- /dev/null
+++ b/frontend/src/lib/DrawingCanvas.svelte
@@ -0,0 +1,212 @@
+
+
+
+
+
+
+
+
diff --git a/frontend/src/lib/Icons/Undo.svelte b/frontend/src/lib/Icons/Undo.svelte
new file mode 100755
index 0000000000000000000000000000000000000000..24629793161d37ade5d0e52a58ed6e4cd9ed6fcb
--- /dev/null
+++ b/frontend/src/lib/Icons/Undo.svelte
@@ -0,0 +1,12 @@
+
+
+
diff --git a/frontend/src/lib/ParamsSelector.svelte b/frontend/src/lib/ParamsSelector.svelte
new file mode 100755
index 0000000000000000000000000000000000000000..c968aaf367fdef293eea097e0360f5a138064747
--- /dev/null
+++ b/frontend/src/lib/ParamsSelector.svelte
@@ -0,0 +1,89 @@
+
+
+
+
+
diff --git a/frontend/src/lib/ResultCanvas.svelte b/frontend/src/lib/ResultCanvas.svelte
new file mode 100755
index 0000000000000000000000000000000000000000..181872f4de9821bc8645f45b5b20799c75da18ee
--- /dev/null
+++ b/frontend/src/lib/ResultCanvas.svelte
@@ -0,0 +1,110 @@
+
+
+
+ {#if $resultImage}
+
+ {/if}
+ {#if $generateMap}
+
+
+
{predictStatus}
+
+ {/if}
+
+
+
+
diff --git a/frontend/src/lib/TemplateGallery.svelte b/frontend/src/lib/TemplateGallery.svelte
new file mode 100755
index 0000000000000000000000000000000000000000..4b23293264bbde73925a410183f3c583fcdbf552
--- /dev/null
+++ b/frontend/src/lib/TemplateGallery.svelte
@@ -0,0 +1,78 @@
+
+
+
+
+
diff --git a/frontend/src/lib/store.ts b/frontend/src/lib/store.ts
new file mode 100755
index 0000000000000000000000000000000000000000..530228a8f6be3d742c04ffda8413fbd67b70be0a
--- /dev/null
+++ b/frontend/src/lib/store.ts
@@ -0,0 +1,18 @@
+import { writable } from 'svelte/store';
+import type { Brush, Params, DrawingLayer } from '../types';
+import { randomSeed } from '$lib/utils';
+import { PRESETS } from '../data';
+
+export const drawingLayers = writable