@netnodeag/kraftwerk 0.62.0 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/routines.js +2 -3
- package/dist/client/index.d.ts +59 -0
- package/dist/client/index.js +63 -0
- package/dist/client/live.d.ts +34 -0
- package/dist/client/live.js +169 -0
- package/dist/client/routes.d.ts +125 -0
- package/dist/client/routes.js +126 -0
- package/dist/inspector/api/agents.d.ts +31 -0
- package/dist/inspector/api/agents.js +50 -0
- package/dist/inspector/api/attention.d.ts +10 -0
- package/dist/inspector/api/attention.js +23 -0
- package/dist/inspector/api/channels.d.ts +67 -0
- package/dist/inspector/api/channels.js +58 -0
- package/dist/inspector/api/chats.d.ts +55 -0
- package/dist/inspector/api/chats.js +154 -0
- package/dist/inspector/api/files.d.ts +15 -0
- package/dist/inspector/api/files.js +43 -0
- package/dist/inspector/api/git.d.ts +25 -0
- package/dist/inspector/api/git.js +56 -0
- package/dist/inspector/api/index.d.ts +334 -0
- package/dist/inspector/api/index.js +43 -0
- package/dist/inspector/api/knowledge.d.ts +13 -0
- package/dist/inspector/api/knowledge.js +56 -0
- package/dist/inspector/api/mime.d.ts +2 -0
- package/dist/inspector/api/mime.js +18 -0
- package/dist/inspector/api/projects.d.ts +11 -0
- package/dist/inspector/api/projects.js +32 -0
- package/dist/inspector/api/router.d.ts +75 -0
- package/dist/inspector/api/router.js +186 -0
- package/dist/inspector/api/runs.d.ts +33 -0
- package/dist/inspector/api/runs.js +105 -0
- package/dist/inspector/api/socket.d.ts +3 -0
- package/dist/inspector/api/socket.js +115 -0
- package/dist/inspector/api/vibeables.d.ts +4 -0
- package/dist/inspector/api/vibeables.js +31 -0
- package/dist/inspector/api/workspace.d.ts +55 -0
- package/dist/inspector/api/workspace.js +117 -0
- package/dist/inspector/chat/sessions.js +31 -19
- package/dist/inspector/context.d.ts +5 -7
- package/dist/inspector/context.js +6 -20
- package/dist/inspector/git.js +52 -43
- package/dist/inspector/live.d.ts +42 -0
- package/dist/inspector/live.js +91 -0
- package/dist/inspector/notifications.js +19 -13
- package/dist/inspector/routines.d.ts +1 -1
- package/dist/inspector/routines.js +8 -5
- package/dist/inspector/runner.js +5 -4
- package/dist/inspector/server.d.ts +2 -2
- package/dist/inspector/server.js +59 -1393
- package/dist/inspector/version.d.ts +9 -0
- package/dist/inspector/version.js +27 -0
- package/dist/inspector/vibeables.js +25 -23
- package/dist/inspector/workspace.d.ts +42 -0
- package/dist/inspector/workspace.js +63 -0
- package/dist/inspector/ws.d.ts +11 -0
- package/dist/inspector/ws.js +143 -0
- package/inspector/dist/assets/{dist-COwx246i.js → dist-9RESajfo.js} +1 -1
- package/inspector/dist/assets/{dist-OMwGczSn.js → dist-Bm5S1BoZ.js} +1 -1
- package/inspector/dist/assets/dist-C8BofvHx.js +1 -0
- package/inspector/dist/assets/{dist-jBYydzOe.js → dist-CIs4wnTu.js} +1 -1
- package/inspector/dist/assets/{dist-Crdu4xR8.js → dist-CjuETd-_.js} +1 -1
- package/inspector/dist/assets/{dist-ClyjyU-C.js → dist-CmVK6rgN.js} +1 -1
- package/inspector/dist/assets/{dist-CeGII4MF.js → dist-CryXvMV_.js} +1 -1
- package/inspector/dist/assets/{dist-DqU5Wgif.js → dist-D1hk0iC5.js} +1 -1
- package/inspector/dist/assets/{dist-BIHxko9t.js → dist-DvW9QE1d.js} +1 -1
- package/inspector/dist/assets/{dist-BMBdyFA5.js → dist-VD9jMxBv.js} +1 -1
- package/inspector/dist/assets/{dist-BnnTidDP.js → dist-VlAqWD8T.js} +1 -1
- package/inspector/dist/assets/{editor-Cmri6xKM.js → editor-DkWqwl89.js} +3 -3
- package/inspector/dist/assets/index-DRJS2pGj.js +229 -0
- package/inspector/dist/index.html +1 -1
- package/package.json +7 -2
- package/inspector/dist/assets/dist-wc-PzIzB.js +0 -1
- package/inspector/dist/assets/index-C1s81t9X.js +0 -229
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Exit code the `kraftwerk ui` supervisor treats as "relaunch me". */
|
|
2
|
+
export declare const RESTART_EXIT_CODE = 75;
|
|
3
|
+
/** Whether a supervisor is around to respawn us (set by `kraftwerk ui`). */
|
|
4
|
+
export declare const supervised: () => boolean;
|
|
5
|
+
/** Package version as it is on disk right now (re-read per call, detects upgrades). */
|
|
6
|
+
export declare function getDiskVersion(): Promise<string>;
|
|
7
|
+
export declare function getPkgVersion(): Promise<string>;
|
|
8
|
+
/** Package name from package.json (registry lookups). */
|
|
9
|
+
export declare function getPkgName(): Promise<string>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { promises as fs } from "node:fs";
|
|
2
|
+
/** Exit code the `kraftwerk ui` supervisor treats as "relaunch me". */
|
|
3
|
+
export const RESTART_EXIT_CODE = 75;
|
|
4
|
+
/** Whether a supervisor is around to respawn us (set by `kraftwerk ui`). */
|
|
5
|
+
export const supervised = () => process.env.KRAFTWERK_UI_SUPERVISED === "1";
|
|
6
|
+
async function readPackage() {
|
|
7
|
+
try {
|
|
8
|
+
return JSON.parse(await fs.readFile(new URL("../../package.json", import.meta.url), "utf8"));
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/** Package version as it is on disk right now (re-read per call, detects upgrades). */
|
|
15
|
+
export async function getDiskVersion() {
|
|
16
|
+
return (await readPackage()).version ?? "";
|
|
17
|
+
}
|
|
18
|
+
/** Package version this process loaded with, read once. Works from src/ (tsx) and dist/ alike. */
|
|
19
|
+
let pkgVersion;
|
|
20
|
+
export async function getPkgVersion() {
|
|
21
|
+
pkgVersion ??= await getDiskVersion();
|
|
22
|
+
return pkgVersion;
|
|
23
|
+
}
|
|
24
|
+
/** Package name from package.json (registry lookups). */
|
|
25
|
+
export async function getPkgName() {
|
|
26
|
+
return (await readPackage()).name ?? "";
|
|
27
|
+
}
|
|
@@ -6,6 +6,7 @@ import path from "node:path";
|
|
|
6
6
|
import { parse } from "yaml";
|
|
7
7
|
import { resolveProject, vibeablesRootFor } from "../config.js";
|
|
8
8
|
import { getProjectRoot } from "./context.js";
|
|
9
|
+
import { perWorkspace } from "./workspace.js";
|
|
9
10
|
import { moveToTrash } from "./trash.js";
|
|
10
11
|
import { newestMtime } from "./mtime.js";
|
|
11
12
|
export const VIBEABLE_CONFIG_FILE = "vibeable.yml";
|
|
@@ -270,7 +271,7 @@ export async function serveVibeable(req, res, url) {
|
|
|
270
271
|
// A running dev server owns the whole prefix: the pane and a new tab reach
|
|
271
272
|
// it through the inspector's origin, which is what a container or reverse
|
|
272
273
|
// proxy exposes — a random port on the host is not.
|
|
273
|
-
const dev = devs.get(slug);
|
|
274
|
+
const dev = devs().get(slug);
|
|
274
275
|
if (dev && dev.exitCode === undefined && dev.child)
|
|
275
276
|
return proxyToDev(req, res, url, slug, dev.port);
|
|
276
277
|
const rest = seg.slice(1).map((s) => {
|
|
@@ -369,7 +370,7 @@ export function proxyUpgrade(req, socket, head) {
|
|
|
369
370
|
const url = new URL(req.url ?? "/", "http://localhost");
|
|
370
371
|
const seg = url.pathname.split("/");
|
|
371
372
|
const slug = seg[1] === "vibeables" ? decodeURIComponent(seg[2] ?? "") : "";
|
|
372
|
-
const dev = slug ? devs.get(slug) : undefined;
|
|
373
|
+
const dev = slug ? devs().get(slug) : undefined;
|
|
373
374
|
if (!dev || dev.exitCode !== undefined || !dev.child)
|
|
374
375
|
return void socket.destroy();
|
|
375
376
|
const upstream = net.connect(dev.port, "127.0.0.1", () => {
|
|
@@ -391,7 +392,7 @@ export function proxyUpgrade(req, socket, head) {
|
|
|
391
392
|
upstream.on("error", drop);
|
|
392
393
|
socket.on("error", drop);
|
|
393
394
|
}
|
|
394
|
-
const channels = new Map();
|
|
395
|
+
const channels = perWorkspace(() => new Map());
|
|
395
396
|
const IGNORED = /(^|[\\/])(\.git|node_modules|\.cache|\.vite|\.next)([\\/]|$)/;
|
|
396
397
|
/**
|
|
397
398
|
* Stream a vibeable's events: file changes (debounced, node_modules and
|
|
@@ -400,10 +401,10 @@ const IGNORED = /(^|[\\/])(\.git|node_modules|\.cache|\.vite|\.next)([\\/]|$)/;
|
|
|
400
401
|
* where it cannot watch, the pane still has its manual reload.
|
|
401
402
|
*/
|
|
402
403
|
export function subscribeVibeable(slug, dir, fn) {
|
|
403
|
-
let ch = channels.get(slug);
|
|
404
|
+
let ch = channels().get(slug);
|
|
404
405
|
if (!ch) {
|
|
405
406
|
ch = { watcher: null, subs: new Set(), pending: new Set(), timer: null };
|
|
406
|
-
channels.set(slug, ch);
|
|
407
|
+
channels().set(slug, ch);
|
|
407
408
|
const c = ch;
|
|
408
409
|
try {
|
|
409
410
|
c.watcher = watch(dir, { recursive: true, persistent: false }, (_event, filename) => {
|
|
@@ -437,7 +438,7 @@ export function subscribeVibeable(slug, dir, fn) {
|
|
|
437
438
|
}
|
|
438
439
|
ch.subs.add(fn);
|
|
439
440
|
return () => {
|
|
440
|
-
const c = channels.get(slug);
|
|
441
|
+
const c = channels().get(slug);
|
|
441
442
|
if (!c)
|
|
442
443
|
return;
|
|
443
444
|
c.subs.delete(fn);
|
|
@@ -445,32 +446,32 @@ export function subscribeVibeable(slug, dir, fn) {
|
|
|
445
446
|
if (c.timer)
|
|
446
447
|
clearTimeout(c.timer);
|
|
447
448
|
c.watcher?.close();
|
|
448
|
-
channels.delete(slug);
|
|
449
|
+
channels().delete(slug);
|
|
449
450
|
}
|
|
450
451
|
};
|
|
451
452
|
}
|
|
452
453
|
/** Close a channel's watcher and forget it; subscribers are left to reconnect. */
|
|
453
454
|
function dropChannel(slug) {
|
|
454
|
-
const c = channels.get(slug);
|
|
455
|
+
const c = channels().get(slug);
|
|
455
456
|
if (!c)
|
|
456
457
|
return;
|
|
457
458
|
if (c.timer)
|
|
458
459
|
clearTimeout(c.timer);
|
|
459
460
|
c.watcher?.close();
|
|
460
|
-
channels.delete(slug);
|
|
461
|
+
channels().delete(slug);
|
|
461
462
|
}
|
|
462
463
|
function broadcast(slug, ev) {
|
|
463
|
-
const c = channels.get(slug);
|
|
464
|
+
const c = channels().get(slug);
|
|
464
465
|
if (!c)
|
|
465
466
|
return;
|
|
466
467
|
for (const s of c.subs)
|
|
467
468
|
s(ev);
|
|
468
469
|
}
|
|
469
|
-
const devs = new Map();
|
|
470
|
+
const devs = perWorkspace(() => new Map());
|
|
470
471
|
const LOG_LINES = 200;
|
|
471
472
|
const READY_TIMEOUT = 90_000;
|
|
472
473
|
function devView(slug) {
|
|
473
|
-
const d = devs.get(slug);
|
|
474
|
+
const d = devs().get(slug);
|
|
474
475
|
if (!d)
|
|
475
476
|
return undefined;
|
|
476
477
|
return {
|
|
@@ -521,13 +522,13 @@ function pushLog(d, chunk) {
|
|
|
521
522
|
* (npm → vite → esbuild).
|
|
522
523
|
*/
|
|
523
524
|
/** Starts in flight per slug: two clicks (or two tabs) share one spawn instead of leaking a process. */
|
|
524
|
-
const starting = new Map();
|
|
525
|
+
const starting = perWorkspace(() => new Map());
|
|
525
526
|
export function startDev(slug) {
|
|
526
|
-
const inFlight = starting.get(slug);
|
|
527
|
+
const inFlight = starting().get(slug);
|
|
527
528
|
if (inFlight)
|
|
528
529
|
return inFlight;
|
|
529
|
-
const p = startDevNow(slug).finally(() => starting.delete(slug));
|
|
530
|
-
starting.set(slug, p);
|
|
530
|
+
const p = startDevNow(slug).finally(() => starting().delete(slug));
|
|
531
|
+
starting().set(slug, p);
|
|
531
532
|
return p;
|
|
532
533
|
}
|
|
533
534
|
async function startDevNow(slug) {
|
|
@@ -536,7 +537,7 @@ async function startDevNow(slug) {
|
|
|
536
537
|
throw new Error(r.configError);
|
|
537
538
|
if (!r.config.dev)
|
|
538
539
|
throw new Error(`no dev command — add \`dev: <command>\` to ${VIBEABLE_CONFIG_FILE}`);
|
|
539
|
-
const existing = devs.get(slug);
|
|
540
|
+
const existing = devs().get(slug);
|
|
540
541
|
if (existing && existing.exitCode === undefined && existing.child)
|
|
541
542
|
return vibeableStatus(slug);
|
|
542
543
|
const port = r.config.port ?? (await freePort());
|
|
@@ -560,7 +561,7 @@ async function startDevNow(slug) {
|
|
|
560
561
|
},
|
|
561
562
|
});
|
|
562
563
|
const d = { child, command: r.config.dev, port, ready: false, startedAt: new Date().toISOString(), log: [] };
|
|
563
|
-
devs.set(slug, d);
|
|
564
|
+
devs().set(slug, d);
|
|
564
565
|
child.stdout?.on("data", (c) => pushLog(d, c));
|
|
565
566
|
child.stderr?.on("data", (c) => pushLog(d, c));
|
|
566
567
|
child.on("error", (err) => {
|
|
@@ -579,7 +580,7 @@ async function startDevNow(slug) {
|
|
|
579
580
|
// Readiness runs in the background; the pane follows the dev events.
|
|
580
581
|
void (async () => {
|
|
581
582
|
const until = Date.now() + READY_TIMEOUT;
|
|
582
|
-
while (Date.now() < until && d.exitCode === undefined && devs.get(slug) === d) {
|
|
583
|
+
while (Date.now() < until && d.exitCode === undefined && devs().get(slug) === d) {
|
|
583
584
|
if (await probe(port)) {
|
|
584
585
|
d.ready = true;
|
|
585
586
|
broadcast(slug, { type: "dev", dev: devView(slug) });
|
|
@@ -611,7 +612,7 @@ function killGroup(d, signal) {
|
|
|
611
612
|
export async function stopDev(slug) {
|
|
612
613
|
// Kill before resolving: a folder that vanished or a feature switched off
|
|
613
614
|
// must not leave the process running.
|
|
614
|
-
const d = devs.get(slug);
|
|
615
|
+
const d = devs().get(slug);
|
|
615
616
|
if (d && d.exitCode === undefined && d.child) {
|
|
616
617
|
const exited = new Promise((resolve) => d.child.once("exit", () => resolve()));
|
|
617
618
|
killGroup(d, "SIGTERM");
|
|
@@ -623,7 +624,8 @@ export async function stopDev(slug) {
|
|
|
623
624
|
}
|
|
624
625
|
/** Server shutdown: no dev server may outlive the inspector. */
|
|
625
626
|
export function disposeAllDevs() {
|
|
626
|
-
for (const
|
|
627
|
-
|
|
628
|
-
|
|
627
|
+
for (const [, table] of devs.entries())
|
|
628
|
+
for (const d of table.values())
|
|
629
|
+
if (d.exitCode === undefined)
|
|
630
|
+
killGroup(d, "SIGTERM");
|
|
629
631
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A workspace the inspector serves: its root (where kraftwerk.yml lives),
|
|
3
|
+
* its output dir (runs/, chats/, notifications), and whatever state the
|
|
4
|
+
* domain modules keep for it — chat sessions, caches, dev servers, timers.
|
|
5
|
+
*
|
|
6
|
+
* Domain code does not take the workspace as a parameter; it asks for the
|
|
7
|
+
* current one (`currentWorkspace()`, or `getProjectRoot()` in context.ts).
|
|
8
|
+
* The current workspace is the one the caller runs in (`ws.run(fn)`): the
|
|
9
|
+
* server runs every request in its workspace, and everything started from
|
|
10
|
+
* there — timers, child-process callbacks, event listeners — keeps it,
|
|
11
|
+
* because AsyncLocalStorage follows the async chain. Outside any run, the
|
|
12
|
+
* process default applies (`setDefaultWorkspace`), which is what a
|
|
13
|
+
* single-workspace process (`kraftwerk ui`, the CLI) relies on.
|
|
14
|
+
*
|
|
15
|
+
* State that belongs to a workspace lives in a `perWorkspace` slot, never
|
|
16
|
+
* in a module-level variable: one process may serve several workspaces.
|
|
17
|
+
*/
|
|
18
|
+
export declare class Workspace {
|
|
19
|
+
readonly root: string;
|
|
20
|
+
readonly outputDir: string;
|
|
21
|
+
private readonly slots;
|
|
22
|
+
/** `root` defaults to the parent of the output dir (wrong for nested output dirs — pass it when known). */
|
|
23
|
+
constructor(opts: {
|
|
24
|
+
outputDir: string;
|
|
25
|
+
root?: string;
|
|
26
|
+
});
|
|
27
|
+
/** Run `fn` (and everything it starts) in this workspace. */
|
|
28
|
+
run<T>(fn: () => T): T;
|
|
29
|
+
slot<T>(key: object, init: () => T): T;
|
|
30
|
+
peek<T>(key: object): T | undefined;
|
|
31
|
+
}
|
|
32
|
+
/** The workspace a single-workspace process serves; used outside any `ws.run`. */
|
|
33
|
+
export declare function setDefaultWorkspace(ws: Workspace): Workspace;
|
|
34
|
+
export declare function currentWorkspace(): Workspace;
|
|
35
|
+
export interface PerWorkspace<T> {
|
|
36
|
+
/** The current workspace's value, created on first use. */
|
|
37
|
+
(): T;
|
|
38
|
+
/** Every workspace that created a value, with it (sweeps and shutdown: run per workspace, `ws.run(...)`). */
|
|
39
|
+
entries(): Array<[Workspace, T]>;
|
|
40
|
+
}
|
|
41
|
+
/** Module state kept once per workspace: `const chats = perWorkspace(() => new Map())`, then `chats()`. */
|
|
42
|
+
export declare function perWorkspace<T>(init: () => T): PerWorkspace<T>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* A workspace the inspector serves: its root (where kraftwerk.yml lives),
|
|
5
|
+
* its output dir (runs/, chats/, notifications), and whatever state the
|
|
6
|
+
* domain modules keep for it — chat sessions, caches, dev servers, timers.
|
|
7
|
+
*
|
|
8
|
+
* Domain code does not take the workspace as a parameter; it asks for the
|
|
9
|
+
* current one (`currentWorkspace()`, or `getProjectRoot()` in context.ts).
|
|
10
|
+
* The current workspace is the one the caller runs in (`ws.run(fn)`): the
|
|
11
|
+
* server runs every request in its workspace, and everything started from
|
|
12
|
+
* there — timers, child-process callbacks, event listeners — keeps it,
|
|
13
|
+
* because AsyncLocalStorage follows the async chain. Outside any run, the
|
|
14
|
+
* process default applies (`setDefaultWorkspace`), which is what a
|
|
15
|
+
* single-workspace process (`kraftwerk ui`, the CLI) relies on.
|
|
16
|
+
*
|
|
17
|
+
* State that belongs to a workspace lives in a `perWorkspace` slot, never
|
|
18
|
+
* in a module-level variable: one process may serve several workspaces.
|
|
19
|
+
*/
|
|
20
|
+
export class Workspace {
|
|
21
|
+
root;
|
|
22
|
+
outputDir;
|
|
23
|
+
slots = new Map();
|
|
24
|
+
/** `root` defaults to the parent of the output dir (wrong for nested output dirs — pass it when known). */
|
|
25
|
+
constructor(opts) {
|
|
26
|
+
this.outputDir = path.resolve(opts.outputDir);
|
|
27
|
+
this.root = opts.root ? path.resolve(opts.root) : path.dirname(this.outputDir);
|
|
28
|
+
known.add(this);
|
|
29
|
+
}
|
|
30
|
+
/** Run `fn` (and everything it starts) in this workspace. */
|
|
31
|
+
run(fn) {
|
|
32
|
+
return storage.run(this, fn);
|
|
33
|
+
}
|
|
34
|
+
slot(key, init) {
|
|
35
|
+
if (!this.slots.has(key))
|
|
36
|
+
this.slots.set(key, init());
|
|
37
|
+
return this.slots.get(key);
|
|
38
|
+
}
|
|
39
|
+
peek(key) {
|
|
40
|
+
return this.slots.get(key);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const storage = new AsyncLocalStorage();
|
|
44
|
+
const known = new Set();
|
|
45
|
+
let fallback = null;
|
|
46
|
+
/** The workspace a single-workspace process serves; used outside any `ws.run`. */
|
|
47
|
+
export function setDefaultWorkspace(ws) {
|
|
48
|
+
fallback = ws;
|
|
49
|
+
return ws;
|
|
50
|
+
}
|
|
51
|
+
export function currentWorkspace() {
|
|
52
|
+
const ws = storage.getStore() ?? fallback;
|
|
53
|
+
if (!ws)
|
|
54
|
+
throw new Error("inspector context not initialized");
|
|
55
|
+
return ws;
|
|
56
|
+
}
|
|
57
|
+
/** Module state kept once per workspace: `const chats = perWorkspace(() => new Map())`, then `chats()`. */
|
|
58
|
+
export function perWorkspace(init) {
|
|
59
|
+
const key = {};
|
|
60
|
+
const get = (() => currentWorkspace().slot(key, init));
|
|
61
|
+
get.entries = () => [...known].flatMap((ws) => (ws.peek(key) === undefined ? [] : [[ws, ws.peek(key)]]));
|
|
62
|
+
return get;
|
|
63
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type http from "node:http";
|
|
2
|
+
import type { Duplex } from "node:stream";
|
|
3
|
+
export interface Socket {
|
|
4
|
+
send(text: string): void;
|
|
5
|
+
close(code?: number, reason?: string): void;
|
|
6
|
+
onMessage(fn: (text: string) => void): void;
|
|
7
|
+
onClose(fn: () => void): void;
|
|
8
|
+
readonly open: boolean;
|
|
9
|
+
}
|
|
10
|
+
/** Complete the upgrade, or answer 400 and return null when the request is not a WebSocket handshake. */
|
|
11
|
+
export declare function acceptWebSocket(req: http.IncomingMessage, socket: Duplex, head: Buffer): Socket | null;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* A minimal WebSocket server side (RFC 6455), enough for the control
|
|
4
|
+
* plane's socket: the handshake, text messages (fragmented or not), ping,
|
|
5
|
+
* pong and close. No extensions, no binary messages — files stay on HTTP.
|
|
6
|
+
* The server keeps no dependencies, and this is the whole of what it needs.
|
|
7
|
+
*/
|
|
8
|
+
const GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
|
9
|
+
/** One message (all its fragments) may not exceed this. */
|
|
10
|
+
const MAX_MESSAGE = 4_000_000;
|
|
11
|
+
const PING_MS = 25_000;
|
|
12
|
+
/** Complete the upgrade, or answer 400 and return null when the request is not a WebSocket handshake. */
|
|
13
|
+
export function acceptWebSocket(req, socket, head) {
|
|
14
|
+
const key = req.headers["sec-websocket-key"];
|
|
15
|
+
if (req.headers.upgrade?.toLowerCase() !== "websocket" || typeof key !== "string" || req.headers["sec-websocket-version"] !== "13") {
|
|
16
|
+
socket.end("HTTP/1.1 400 Bad Request\r\nconnection: close\r\n\r\n");
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const accept = createHash("sha1").update(key + GUID).digest("base64");
|
|
20
|
+
socket.write(`HTTP/1.1 101 Switching Protocols\r\nupgrade: websocket\r\nconnection: Upgrade\r\nsec-websocket-accept: ${accept}\r\n\r\n`);
|
|
21
|
+
const messageFns = [];
|
|
22
|
+
const closeFns = [];
|
|
23
|
+
let open = true;
|
|
24
|
+
let buf = head.length ? Buffer.from(head) : Buffer.alloc(0);
|
|
25
|
+
let fragments = [];
|
|
26
|
+
let fragmentSize = 0;
|
|
27
|
+
const frame = (opcode, payload) => {
|
|
28
|
+
const len = payload.length;
|
|
29
|
+
const header = len < 126 ? Buffer.from([0x80 | opcode, len]) : len < 65_536 ? Buffer.alloc(4) : Buffer.alloc(10);
|
|
30
|
+
if (len >= 126) {
|
|
31
|
+
header[0] = 0x80 | opcode;
|
|
32
|
+
if (len < 65_536) {
|
|
33
|
+
header[1] = 126;
|
|
34
|
+
header.writeUInt16BE(len, 2);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
header[1] = 127;
|
|
38
|
+
header.writeBigUInt64BE(BigInt(len), 2);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return Buffer.concat([header, payload]);
|
|
42
|
+
};
|
|
43
|
+
const finish = () => {
|
|
44
|
+
if (!open)
|
|
45
|
+
return;
|
|
46
|
+
open = false;
|
|
47
|
+
clearInterval(pinger);
|
|
48
|
+
for (const fn of closeFns)
|
|
49
|
+
fn();
|
|
50
|
+
};
|
|
51
|
+
const close = (code = 1000, reason = "") => {
|
|
52
|
+
if (!open)
|
|
53
|
+
return;
|
|
54
|
+
const payload = Buffer.alloc(2 + Buffer.byteLength(reason));
|
|
55
|
+
payload.writeUInt16BE(code, 0);
|
|
56
|
+
payload.write(reason, 2);
|
|
57
|
+
socket.end(frame(0x8, payload));
|
|
58
|
+
finish();
|
|
59
|
+
};
|
|
60
|
+
const parse = () => {
|
|
61
|
+
while (buf.length >= 2) {
|
|
62
|
+
const fin = (buf[0] & 0x80) !== 0;
|
|
63
|
+
const opcode = buf[0] & 0x0f;
|
|
64
|
+
const masked = (buf[1] & 0x80) !== 0;
|
|
65
|
+
let len = buf[1] & 0x7f;
|
|
66
|
+
let offset = 2;
|
|
67
|
+
if (len === 126) {
|
|
68
|
+
if (buf.length < 4)
|
|
69
|
+
return;
|
|
70
|
+
len = buf.readUInt16BE(2);
|
|
71
|
+
offset = 4;
|
|
72
|
+
}
|
|
73
|
+
else if (len === 127) {
|
|
74
|
+
if (buf.length < 10)
|
|
75
|
+
return;
|
|
76
|
+
const big = buf.readBigUInt64BE(2);
|
|
77
|
+
if (big > BigInt(MAX_MESSAGE))
|
|
78
|
+
return close(1009, "message too large");
|
|
79
|
+
len = Number(big);
|
|
80
|
+
offset = 10;
|
|
81
|
+
}
|
|
82
|
+
// Clients must mask (RFC 6455 5.1); an unmasked frame is a protocol error.
|
|
83
|
+
if (!masked)
|
|
84
|
+
return close(1002, "unmasked frame");
|
|
85
|
+
if (buf.length < offset + 4 + len)
|
|
86
|
+
return;
|
|
87
|
+
const mask = buf.subarray(offset, offset + 4);
|
|
88
|
+
const payload = Buffer.from(buf.subarray(offset + 4, offset + 4 + len));
|
|
89
|
+
for (let i = 0; i < payload.length; i++)
|
|
90
|
+
payload[i] ^= mask[i & 3];
|
|
91
|
+
buf = buf.subarray(offset + 4 + len);
|
|
92
|
+
if (opcode === 0x8)
|
|
93
|
+
return close();
|
|
94
|
+
if (opcode === 0x9) {
|
|
95
|
+
socket.write(frame(0xa, payload));
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (opcode === 0xa)
|
|
99
|
+
continue;
|
|
100
|
+
if (opcode === 0x2)
|
|
101
|
+
return close(1003, "text only");
|
|
102
|
+
if (opcode !== 0x1 && opcode !== 0x0)
|
|
103
|
+
return close(1002, "unknown opcode");
|
|
104
|
+
fragmentSize += payload.length;
|
|
105
|
+
if (fragmentSize > MAX_MESSAGE)
|
|
106
|
+
return close(1009, "message too large");
|
|
107
|
+
fragments.push(payload);
|
|
108
|
+
if (fin) {
|
|
109
|
+
const text = Buffer.concat(fragments).toString("utf8");
|
|
110
|
+
fragments = [];
|
|
111
|
+
fragmentSize = 0;
|
|
112
|
+
for (const fn of messageFns)
|
|
113
|
+
fn(text);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
socket.on("data", (chunk) => {
|
|
118
|
+
buf = buf.length ? Buffer.concat([buf, chunk]) : chunk;
|
|
119
|
+
parse();
|
|
120
|
+
});
|
|
121
|
+
socket.on("close", finish);
|
|
122
|
+
socket.on("error", finish);
|
|
123
|
+
const pinger = setInterval(() => open && socket.write(frame(0x9, Buffer.alloc(0))), PING_MS);
|
|
124
|
+
pinger.unref?.();
|
|
125
|
+
if (buf.length)
|
|
126
|
+
queueMicrotask(parse);
|
|
127
|
+
return {
|
|
128
|
+
get open() {
|
|
129
|
+
return open;
|
|
130
|
+
},
|
|
131
|
+
send(text) {
|
|
132
|
+
if (open)
|
|
133
|
+
socket.write(frame(0x1, Buffer.from(text, "utf8")));
|
|
134
|
+
},
|
|
135
|
+
close,
|
|
136
|
+
onMessage(fn) {
|
|
137
|
+
messageFns.push(fn);
|
|
138
|
+
},
|
|
139
|
+
onClose(fn) {
|
|
140
|
+
closeFns.push(fn);
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,D as t,L as n,R as r,h as i,n as a,r as o,s,t as c,u as l,x as u}from"./dist-CYzOYk_e.js";import{r as d}from"./dist-DqU5Wgif.js";var f=168,p=169,m=170,h=1,ee=2,g=3,_=171,v=172,y=4,b=173,x=5,S=174,C=175,w=176,T=177,E=6,D=7,te=8,ne=9,O=0,k=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],A=58,j=40,M=95,N=91,P=45,F=46,I=35,L=37,R=123,z=125,B=47,V=42,H=10,U=61,W=43,G=38;function K(e){return e>=65&&e<=90||e>=97&&e<=122||e>=161}function q(e){return e>=48&&e<=57}function J(e){let t;return e.next==B&&((t=e.peek(1))==B||t==V)}var re=new a((e,t)=>{if(t.dialectEnabled(O)){let n;if(e.next<0&&t.canShift(w))e.acceptToken(w);else if(((n=e.peek(-1))==H||n<0)&&t.canShift(C)){let t=0;for(;e.next!=H&&k.includes(e.next);)e.advance(),t++;e.next==H||J(e)?e.acceptToken(C,-t):t&&e.acceptToken(T)}else if(e.next==H)e.acceptToken(S,1);else if(k.includes(e.next)){for(e.advance();e.next!=H&&k.includes(e.next);)e.advance();e.acceptToken(T)}}else{let t=0;for(;k.includes(e.next);)e.advance(),t++;t&&e.acceptToken(T)}},{contextual:!0}),Y=new a((e,t)=>{if(J(e)){if(e.advance(),t.dialectEnabled(O)){let t=-1;for(let n=1;;n++){let r=e.peek(-n-1);if(r==H||r<0){t=n+1;break}if(!k.includes(r))break}if(t>-1){let n=e.next==V,r=0;for(e.advance();e.next>=0;)if(e.next==H){e.advance();let n=0;for(;e.next!=H&&k.includes(e.next);)n++,e.advance();if(n<t){r=-n-1;break}}else if(n&&e.next==V&&e.peek(1)==B){r=2;break}else e.advance();e.acceptToken(n?D:E,r);return}}if(e.next==B){for(;e.next!=H&&e.next>=0;)e.advance();e.acceptToken(E)}else{for(e.advance();e.next>=0;){let{next:t}=e;if(e.advance(),t==V&&e.next==B){e.advance();break}}e.acceptToken(D)}}}),X=new a((e,t)=>{(e.next==W||e.next==U)&&t.dialectEnabled(O)&&e.acceptToken(e.next==U?te:ne,1)}),ie=new a((e,t)=>{if(!t.dialectEnabled(O))return;let n=t.context.depth;if(e.next<0&&n){e.acceptToken(p);return}if(e.peek(-1)==H){let t=0;for(;e.next!=H&&k.includes(e.next);)e.advance(),t++;t!=n&&e.next!=H&&!J(e)&&(t<n?e.acceptToken(p,-t):e.acceptToken(f))}}),ae=new a((e,t)=>{for(let n=!1,r=0,i=0;;i++){let{next:a}=e;if(K(a)||a==P||a==M||n&&q(a))!n&&(a!=P||i>0)&&(n=!0),r===i&&a==P&&r++,e.advance();else if(a==I&&e.peek(1)==R){e.acceptToken(x,2);break}else{n&&e.acceptToken(r==2&&t.canShift(y)?y:t.canShift(b)?b:a==j?_:v);break}}}),oe=new a(e=>{if(e.next==z){for(e.advance();K(e.next)||e.next==P||e.next==M||q(e.next);)e.advance();e.next==I&&e.peek(1)==R?e.acceptToken(ee,2):e.acceptToken(h)}}),se=new a(e=>{if(k.includes(e.peek(-1))){let{next:t}=e;(K(t)||t==M||t==I||t==F||t==N||t==A&&K(e.peek(1))||t==P||t==G||t==V)&&e.acceptToken(m)}}),ce=new a(e=>{if(!k.includes(e.peek(-1))){let{next:t}=e;if(t==L&&(e.advance(),e.acceptToken(g)),K(t)){do e.advance();while(K(e.next)||q(e.next));e.acceptToken(g)}}});function Z(e,t){this.parent=e,this.depth=t,this.hash=(e?e.hash+e.hash<<8:0)+t+(t<<4)}var le=new Z(null,0),ue=new c({start:le,shift(e,t,n,r){return t==f?new Z(e,n.pos-r.pos):t==p?e.parent:e},hash(e){return e.hash}}),de=n({"AtKeyword import charset namespace keyframes media supports include mixin use forward extend at-root":r.definitionKeyword,"Keyword selector":r.keyword,ControlKeyword:r.controlKeyword,NamespaceName:r.namespace,KeyframeName:r.labelName,KeyframeRangeName:r.operatorKeyword,TagName:r.tagName,"ClassName Suffix":r.className,PseudoClassName:r.constant(r.className),IdName:r.labelName,"FeatureName PropertyName":r.propertyName,AttributeName:r.attributeName,NumberLiteral:r.number,KeywordQuery:r.keyword,UnaryQueryOp:r.operatorKeyword,"CallTag ValueName":r.atom,VariableName:r.variableName,SassVariableName:r.special(r.variableName),Callee:r.operatorKeyword,Unit:r.unit,"UniversalSelector NestingSelector IndentedMixin IndentedInclude":r.definitionOperator,MatchOp:r.compareOperator,"ChildOp SiblingOp, LogicOp":r.logicOperator,BinOp:r.arithmeticOperator,"Important Global Default":r.modifier,Comment:r.blockComment,LineComment:r.lineComment,ColorLiteral:r.color,"ParenthesizedContent StringLiteral":r.string,"InterpolationStart InterpolationContinue InterpolationEnd":r.meta,': "..."':r.punctuation,"PseudoOp #":r.derefOperator,"; ,":r.separator,"( )":r.paren,"[ ]":r.squareBracket,"{ }":r.brace}),fe={__proto__:null,not:62,using:197,as:207,with:211,without:211,hide:225,show:225,if:263,from:269,to:271,through:273,in:279},pe={__proto__:null,url:82,"url-prefix":82,domain:82,regexp:82,lang:104,"nth-child":104,"nth-last-child":104,"nth-of-type":104,"nth-last-of-type":104,dir:104,"host-context":104},me={__proto__:null,"@import":162,"@include":194,"@mixin":200,"@function":200,"@use":204,"@extend":214,"@at-root":218,"@forward":222,"@media":228,"@charset":232,"@namespace":236,"@keyframes":242,"@supports":254,"@if":258,"@else":260,"@for":266,"@each":276,"@while":282,"@debug":286,"@warn":286,"@error":286,"@return":286},Q={__proto__:null,layer:166,not:184,only:184,selector:190},he=o.deserialize({version:14,states:"!$WQ`Q+tOOO#fQ+tOOP#mOpOOOOQ#U'#Ch'#ChO#rQ(pO'#CjOOQ#U'#Ci'#CiO%_Q)QO'#GXO%rQ.jO'#CnO&mQ#dO'#D]O'dQ(pO'#CgO'kQ)OO'#D_O'vQ#dO'#DfO'{Q#dO'#DiO(QQ#dO'#DqOOQ#U'#GX'#GXO(VQ(pO'#GXO(^Q(nO'#DuO%rQ.jO'#D}O%rQ.jO'#E`O%rQ.jO'#EcO%rQ.jO'#EeO(cQ)OO'#EjO)TQ)OO'#ElO%rQ.jO'#EnO)bQ)OO'#EqO%rQ.jO'#EsO)|Q)OO'#EuO*XQ)OO'#ExO*aQ)OO'#FOO*uQ)OO'#FbOOQ&Z'#GW'#GWOOQ&Y'#Fe'#FeO+PQ(nO'#FeQ`Q+tOOO%rQ.jO'#FQO+[Q(nO'#FUO+aQ)OO'#FZO%rQ.jO'#F^O%rQ.jO'#F`OOQ&Z'#Fm'#FmO+iQ+uO'#GaO+vQ(oO'#GaQOQ#SOOP,XO#SO'#GVPOOO)CAz)CAzOOQ#U'#Cm'#CmOOQ#U,59W,59WOOQ#i'#Cp'#CpO%rQ.jO'#CsO,xQ.wO'#CuO/dQ.^O,59YO%rQ.jO'#CzOOQ#S'#DP'#DPO/uQ(nO'#DUO/zQ)OO'#DZOOQ#i'#GZ'#GZO0SQ(nO'#DOOOQ#U'#D^'#D^OOQ#U,59w,59wO&mQ#dO,59wO0XQ)OO,59yO'vQ#dO,5:QO'{Q#dO,5:TO(cQ)OO,5:WO(cQ)OO,5:YO(cQ)OO,5:ZO(cQ)OO'#FlO0dQ(nO,59RO0oQ+tO'#DsO0vQ#TO'#DsOOQ&Z,59R,59ROOQ#U'#Da'#DaOOQ#S'#Dd'#DdOOQ#U,59y,59yO0{Q(nO,59yO1QQ(nO,59yOOQ#U'#Dh'#DhOOQ#U,5:Q,5:QOOQ#S'#Dj'#DjO1VQ9`O,5:TOOQ#U'#Dr'#DrOOQ#U,5:],5:]O2YQ.jO,5:aO2dQ.jO,5:iO3`Q.jO,5:zO3mQ.YO,5:}O4OQ.jO,5;POOQ#U'#Cj'#CjO4wQ(pO,5;UO5UQ(pO,5;WOOQ&Z,5;W,5;WO5]Q)OO,5;WO5bQ.jO,5;YOOQ#S'#ET'#ETO6TQ.jO'#E]O6kQ(nO'#GcO*aQ)OO'#EZO7PQ(nO'#E^OOQ#S'#Gd'#GdO0gQ(nO,5;]O4UQ.YO,5;_OOQ#d'#Ew'#EwO+PQ(nO,5;aO7UQ)OO,5;aOOQ#S'#Ez'#EzO7^Q(nO,5;dO7cQ(nO,5;jO7nQ(nO,5;|OOQ&Z'#Gf'#GfOOQ&Y,5<P,5<POOQ&Y-E9c-E9cO3mQ.YO,5;lO7|Q)OO,5;pO8RQ)OO'#GhO8ZQ)OO,5;uO3mQ.YO,5;xO4UQ.YO,5;zOOQ&Z-E9k-E9kO8`Q(oO,5<{OOQ&Z'#Gb'#GbO8qQ+uO'#FpO8`Q(oO,5<{POO#S'#Fd'#FdP9UO#SO,5<qPOOO,5<q,5<qO9dQ.YO,59_OOQ#i,59a,59aO%rQ.jO,59cO%rQ.jO,59hO%rQ.jO'#FiO9rQ#WO1G.tOOQ#k1G.t1G.tO9zQ.oO,59fO<pQ! lO,59pOOQ#d'#D['#D[OOQ#d'#Fh'#FhO<{Q)OO,59uOOQ#i,59u,59uO={Q.jO'#DQOOQ#i,59j,59jOOQ#U1G/c1G/cOOQ#U1G/e1G/eO0{Q(nO1G/eO1QQ(nO1G/eOOQ#U1G/l1G/lO>VQ9`O1G/oO>pQ(pO1G/rO?dQ(pO1G/tO@WQ(pO1G/uO@zQ(pO,5<WOOQ#S-E9j-E9jOOQ&Z1G.m1G.mOAXQ(nO,5:_OA^Q+uO,5:_OAeQ)OO'#DeOAlQ.jO'#DcOOQ#U1G/o1G/oO%rQ.jO1G/oOBkQ.jO'#DwOBuQ.kO1G/{OOQ#T1G/{1G/{OCrQ)OO'#EQO+PQ(nO1G0TO2pQ)OO1G0TODaQ+uO'#GfOOQ&Z1G0f1G0fO0SQ(nO1G0fOOQ&Z1G0i1G0iOOQ&Z1G0k1G0kO0SQ(nO1G0kOFyQ)OO1G0kOOQ&Z1G0p1G0pOOQ&Z1G0r1G0rOGRQ)OO1G0rOGWQ(nO1G0rOG]Q)OO1G0tOOQ&Z1G0t1G0tOGkQ.jO'#FsOG{Q#dO1G0tOHQQ!N^O'#CuOH]Q!NUO'#ETOHkQ!NUO,5:pOHsQ(nO,5:wOOQ#S'#Ge'#GeOHnQ!NUO,5:sO*aQ)OO,5:rOH{Q)OO'#FrOI`Q(nO,5<}OIqQ(nO,5:uO(cQ)OO,5:xOOQ&Z1G0w1G0wOOQ&Z1G0y1G0yOOQ&Z1G0{1G0{O+PQ(nO1G0{OJYQ)OO'#E{OOQ&Z1G1O1G1OOOQ&Z1G1U1G1UOOQ&Z1G1h1G1hOJeQ+uO1G1WO%rQ.jO1G1[OL}Q)OO'#FxOMYQ)OO,5=SO%rQ.jO1G1aOOQ&Z1G1d1G1dOOQ&Z1G1f1G1fOMbQ(oO1G2gOMsQ+uO,5<[OOQ#T,5<[,5<[OOQ#T-E9n-E9nPOO#S-E9b-E9bPOOO1G2]1G2]OOQ#i1G.y1G.yONWQ.oO1G.}OOQ#i1G/S1G/SO!!|Q.^O,5<TOOQ#W-E9g-E9gOOQ#k7+$`7+$`OOQ#i1G/[1G/[O!#_Q(nO1G/[OOQ#d-E9f-E9fOOQ#i1G/a1G/aO!#dQ.jO'#FfO!$qQ.jO'#G]O!&]Q.jO'#GZO!&dQ(nO,59lOOQ#U7+%P7+%POOQ#U7+%Z7+%ZO%rQ.jO7+%ZOOQ&Z1G/y1G/yO!&iQ#TO1G/yO!&nQ(pO'#G_O!&xQ(nO,5:PO!&}Q.jO'#G^O!'XQ(nO,59}O!'^Q.YO7+%ZO!'lQ.YO'#GZO!'}Q(nO,5:cOOQ#T,5:c,5:cO!(VQ.kO'#FoO%rQ.jO'#FoO!)yQ.kO7+%gOOQ#T7+%g7+%gO!*mQ#dO,5:lOOQ&Z7+%o7+%oO+PQ(nO7+%oO7nQ(nO7+&QO+PQ(nO7+&VOOQ#d'#Eh'#EhO!*rQ)OO7+&VO!+QQ(nO7+&^O*aQ)OO7+&^OOQ#d-E9q-E9qOOQ&Z7+&`7+&`O!+VQ.jO'#GgOOQ#d,5<_,5<_OF|Q(nO7+&`O%rQ.jO1G0[O!+qQ.jO1G0_OOQ#S1G0c1G0cOOQ#S1G0^1G0^O!+xQ(nO,5<^OOQ#S-E9p-E9pO!,^Q(pO1G0dOOQ&Z7+&g7+&gO,gQ(vO'#CuOOQ#S'#E}'#E}O!,eQ(nO'#E|OOQ#S'#E|'#E|O!,sQ(nO'#FuO!-OQ)OO,5;gOOQ&Z,5;g,5;gO!-ZQ+uO7+&rO!/sQ)OO7+&rO!0OQ.jO7+&vOOQ#d,5<d,5<dOOQ#d-E9v-E9vO3mQ.YO7+&{OOQ#T1G1v1G1vOOQ#i7+$v7+$vOOQ#d-E9d-E9dO!0aQ.jO'#FgO!0nQ(nO,5<wO!0nQ(nO,5<wO%rQ.jO,5<wOOQ#i1G/W1G/WO!0vQ.YO<<HuOOQ&Z7+%e7+%eO!1UQ)OO'#FkO!1`Q(nO,5<yOOQ#U1G/k1G/kO!1hQ.jO'#FjO!1rQ(nO,5<xOOQ#U1G/i1G/iOOQ#U<<Hu<<HuO1_Q.jO,5<YO!1zQ(nO'#FnOOQ#S-E9l-E9lOOQ#T1G/}1G/}O!2PQ.kO,5<ZOOQ#e-E9m-E9mOOQ#T<<IR<<IROOQ#S'#ES'#ESO!3sQ(nO1G0WOOQ&Z<<IZ<<IZOOQ&Z<<Il<<IlOOQ&Z<<Iq<<IqO0SQ(nO<<IqO*aQ)OO<<IxO!3{Q(nO<<IxO!4TQ.jO'#FtO!4hQ)OO,5=ROG]Q)OO<<IzO!4yQ.jO7+%vOOQ#S'#EV'#EVO!5QQ!NUO7+%yOOQ#S7+&O7+&OOOQ#S,5;h,5;hOJ]Q)OO'#FvO!,sQ(nO,5<aOOQ#d,5<a,5<aOOQ#d-E9s-E9sOOQ&Z1G1R1G1ROOQ&Z-E9u-E9uO!/sQ)OO<<J^O%rQ.jO,5<cOOQ&Z<<J^<<J^O%rQ.jO<<JbOOQ&Z<<Jg<<JgO!5YQ.jO,5<RO!5gQ.jO,5<ROOQ#S-E9e-E9eO!5nQ(nO1G2cO!5vQ.jO1G2cOOQ#UAN>aAN>aO!6QQ(pO,5<VOOQ#S-E9i-E9iO!6[Q.jO,5<UOOQ#S-E9h-E9hO!6fQ.YO1G1tO!6oQ(nO1G1tO!*mQ#dO'#FqO!6zQ(nO7+%rOOQ#d7+%r7+%rO+PQ(nOAN?]O!7SQ(nOAN?dO0gQ(nOAN?dO!7[Q.jO,5<`OOQ#d-E9r-E9rOG]Q)OOAN?fOOQ&ZAN?fAN?fOOQ#S<<Ib<<IbOOQ#S<<Ie<<IeO!7vQ.jO<<IeOOQ#S,5<b,5<bOOQ#S-E9t-E9tOOQ#d1G1{1G1{P!8_Q)OO'#FwOOQ&ZAN?xAN?xO3mQ.YO1G1}O3mQ.YOAN?|OOQ#S1G1m1G1mO%rQ.jO1G1mO!8dQ(nO7+'}OOQ#S7+'`7+'`OOQ#S,5<],5<]OOQ#S-E9o-E9oOOQ#d<<I^<<I^OOQ&ZG24wG24wO0gQ(nOG25OOOQ&ZG25OG25OOOQ&ZG25QG25QO!8lQ(nOAN?POOQ&Z7+'i7+'iOOQ&ZG25hG25hO!8qQ.jO7+'XOOQ&ZLD*jLD*jOOQ#SG24kG24k",stateData:"!9R~O$wOSVOSUOS$uQQ~OS`OTVOWcOXbO_UOc`OqWOuYO|[O!SYO!ZZO!rmO!saO#TbO#WcO#YdO#_eO#afO#cgO#fhO#hiO#jjO#mkO#slO#urO#ysO$OtO$RuO$TvO$rSO$|RO%S]O~O$m%TP~P`O$u{O~Oq^Xu^Xu!jXw^X|^X!S^X!Z^X!a^X!d^X!h^X$p^X$t^X~Oq${Xu${Xw${X|${X!S${X!Z${X!a${X!d${X!h${X$p${X$t${X~O$r}O!o${X$v${Xf${Xe${X~P$jOS!XOTVO_!XOc!XOf!QOh!XOj!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~O$r!ZO~Oq!]Ou!^O|!`O!S!^O!Z!_O!a!aO!d!cO!h!fO$p!bO$t!gO~Ow!dO~P&rO!U!mO$q!jO$r!iO~O$r!nO~O$r!pO~O$r!rO~Ou!tO~P$jOu!tO~OTVO_UOqWOuYO|[O!SYO!ZZO$r!yO$|RO%S]O~Of!}O!h!fO$t!gO~P(cOTVOc#UOf#QO#O#SO#R#TO$s#PO!h%VP$t%VP~Oj#YOy!VO$r#XO~Oj#[O$r#[O~OTVOc#UOf#QO#O#SO#R#TO$s#PO~O!o%VP$v%VP~P)bO!o#`O$t#`O$v#`O~Oc#dO~Oc#eO$P%[P~O$m%TX!p%TX$o%TX~P`O!o#kO$t#kO$m%TX!p%TX$o%TX~OU#nOV#nO$t#pO$w#nO~OR#rO$tiX!hiXeiXwiX~OPiXQiXliXmiXqiXTiXciXfiX!oiX!uiX#OiX#RiX$siX$viX#UiX#ZiX#]iX#diXSiX_iXhiXjiXoiXyiX|iX!liX!miX!niX$qiX$riX%OiX$miXviX{iX#{iX#|iX!piX$oiX~P,gOP#wOQ#uOl#sOm#sOq#tO~Of#yO~O{#}O$r#zO~Of$OO~O!U$TO$q!jO$r!iO~Ow!dO!h!fO$t!gO~O!p%TP~P`O$n$_O~Of$`O~Of$aO~O{$bO!_$cO~OS!XOTVO_!XOc!XOf$dOh!XOj!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~O!h!fO$t!gO~P1_Ol#sOm#sOq#tO!u$gO!o%VP$t%VP$v%VP~P*aOl#sOm#sOq#tO!o#`O$v#`O~O!h!fO#U$lO$t$jO~P2}Ol#sOm#sOq#tO!h!fO$t!gO~O#Z$pO#]$oO$t#`O~P2}Oq!]Ou!^O|!`O!S!^O!Z!_O!a!aO!d!cO$p!bO~O!o#`O$t#`O$v#`O~P4]Of$sO~P&rO#]$tO~O#Z$xO#d$wO$t#`O~P2}OS$}Oh$}Oj$}Oy!VO$q!UO%O$yO~OTVOc#UOf#QO#O#SO#R#TO$s$zO~P5oOm%POw%QO!h%VX$t%VX!o%VX$v%VX~Of%TO~Oj%XOy!VO~O!h%YO~Om%PO!h!fO$t!gO~O!h!fO!o#`O$t$jO$v#`O~O#z%_O~Ow%`O$P%[X~O$P%bO~O!o#kO$t#kO$m%Ta!p%Ta$o%Ta~O!o$dX$m$dX$t$dX!p$dX$o$dX~P`OU#nOV#nO$t%jO$w#nO~Oe%kOl#sOm#sOq#tO~OP%pOQ#uO~Ol#sOm#sOq#tOPnaQnaTnacnafna!ona!una#Ona#Rna$sna$tna$vna!hna#Una#Zna#]na#dnaenaSna_nahnajnaonawnayna|na!lna!mna!nna$qna$rna%Ona$mnavna{na#{na#|na!pna$ona~Oe%qOj%rOz%rO~O{%tO$r#zO~OS!XOTVO_!XOf!QOh!XOj!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~Oc%wOe%PP~P=TO{%zO!_%{O~Oq!]Ou!^O|!`O!S!^O!Z!_O~Ow!`i!a!`i!d!`i!h!`i$p!`i$t!`i!o!`i$v!`if!`ie!`i~P>_Ow!bi!a!bi!d!bi!h!bi$p!bi$t!bi!o!bi$v!bif!bie!bi~P>_Ow!ci!a!ci!d!ci!h!ci$p!ci$t!ci!o!ci$v!cif!cie!ci~P>_Ow$`a!h$`a$t$`a~P4]O!p%|O~O$o%TP~P`Oe%RP~P(cOe%QP~P%rOS!XOTVO_!XOc!XOf!QOh!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~Oe&VOj&TO~PAsOl#sOm#sOq#tOw&XO!l&ZO!m&ZO!n&ZO!o!ii$t!ii$v!ii$m!ii!p!ii$o!ii~P%rOf&[OT!tXc!tX!o!tX#O!tX#R!tX$s!tX$t!tX$v!tX~O$n$_OS%YXT%YXW%YXX%YX_%YXc%YXq%YXu%YX|%YX!S%YX!Z%YX!r%YX!s%YX#T%YX#W%YX#Y%YX#_%YX#a%YX#c%YX#f%YX#h%YX#j%YX#m%YX#s%YX#u%YX#y%YX$O%YX$R%YX$T%YX$m%YX$r%YX$|%YX%S%YX!p%YX!o%YX$t%YX$o%YX~O$r!PO$|&aO~O#]&cO~Ou&dO~O!o#`O#d$wO$t#`O$v#`O~O!o%ZP#d%ZP$t%ZP$v%ZP~P%rO$r!PO~OR#rO!|iXeiX~Oe!wXm!wXu!yX!|!yX~Ou&jO!|&kO~Oe&lOm%PO~Ow$fX!h$fX$t$fX!o$fX$v$fX~P*aOw%QO!h%Va$t%Va!o%Va$v%Va~Om%POw!}a!h!}a$t!}a!o!}a$v!}ae!}a~O!p&xO$r&sO%O&rO~O#v&zOS#tiT#tiW#tiX#ti_#tic#tiq#tiu#ti|#ti!S#ti!Z#ti!r#ti!s#ti#T#ti#W#ti#Y#ti#_#ti#a#ti#c#ti#f#ti#h#ti#j#ti#m#ti#s#ti#u#ti#y#ti$O#ti$R#ti$T#ti$m#ti$r#ti$|#ti%S#ti!p#ti!o#ti$t#ti$o#ti~Oc&|Ow$lX$P$lX~Ow%`O$P%[a~O!o#kO$t#kO$m%Ti!p%Ti$o%Ti~O!o$da$m$da$t$da!p$da$o$da~P`Oq#tOPkiQkilkimkiTkickifki!oki!uki#Oki#Rki$ski$tki$vki!hki#Uki#Zki#]ki#dkiekiSki_kihkijkiokiwkiyki|ki!lki!mki!nki$qki$rki%Oki$mkivki{ki#{ki#|ki!pki$oki~Ol#sOm#sOq#tOP$]aQ$]a~Oe'QO~Ol#sOm#sOq#tOS$YXT$YX_$YXc$YXe$YXf$YXh$YXj$YXo$YXv$YXw$YXy$YX|$YX$q$YX$r$YX%O$YX~Ov'UOw'SOe%PX~P%rOS$}XT$}X_$}Xc$}Xe$}Xf$}Xh$}Xj$}Xl$}Xm$}Xo$}Xq$}Xv$}Xw$}Xy$}X|$}X$q$}X$r$}X%O$}X~Ou'VO~P!%OOe'WO~O$o'YO~Ow'ZOe%RX~P4]Oe']O~Ow'^Oe%QX~P%rOe'`O~Ol#sOm#sOq#tO{'aO~Ou'bOe$}Xl$}Xm$}Xq$}X~Oe'eOj'cO~Ol#sOm#sOq#tOS$cXT$cX_$cXc$cXf$cXh$cXj$cXo$cXw$cXy$cX|$cX!l$cX!m$cX!n$cX!o$cX$q$cX$r$cX$t$cX$v$cX%O$cX$m$cX!p$cX$o$cX~Ow&XO!l'hO!m'hO!n'hO!o!iq$t!iq$v!iq$m!iq!p!iq$o!iq~P%rO$r'iO~O!o#`O#]'nO$t#`O$v#`O~Ou'oO~Ol#sOm#sOq#tOw'qO!o%ZX#d%ZX$t%ZX$v%ZX~O$s'uO~P5oOm%POw$fa!h$fa$t$fa!o$fa$v$fa~Oe'wO~P4]O%O&rOw#pX!h#pX$t#pX~Ow'yO!h!fO$t!gO~O!p'}O$r&sO%O&rO~O#v(POS#tqT#tqW#tqX#tq_#tqc#tqq#tqu#tq|#tq!S#tq!Z#tq!r#tq!s#tq#T#tq#W#tq#Y#tq#_#tq#a#tq#c#tq#f#tq#h#tq#j#tq#m#tq#s#tq#u#tq#y#tq$O#tq$R#tq$T#tq$m#tq$r#tq$|#tq%S#tq!p#tq!o#tq$t#tq$o#tq~O!h!fO#w(QO$t!gO~Ol#sOm#sOq#tO#{(SO#|(SO~Oc(VOe$ZXw$ZX~P=TOw'SOe%Pa~Ol#sOm#sOq#tO{(ZO~Oe$_Xw$_X~P(cOw'ZOe%Ra~Oe$^Xw$^X~P%rOw'^Oe%Qa~Ou'bO~Ol#sOm#sOq#tOS$caT$ca_$cac$caf$cah$caj$cao$caw$cay$ca|$ca!l$ca!m$ca!n$ca!o$ca$q$ca$r$ca$t$ca$v$ca%O$ca$m$ca!p$ca$o$ca~Oe(dOq(bO~Oe(gOm%PO~Ow$hX!o$hX#d$hX$t$hX$v$hX~P%rOw'qO!o%Za#d%Za$t%Za$v%Za~Oe(lO~P%rOe(mO!|(nO~Ov(vOe$Zaw$Za~P%rOu(wO~P!%OOw'SOe%Pi~Ow'SOe%Pi~P%rOe$_aw$_a~P4]Oe$^aw$^a~P%rOl#sOm#sOq#tOw(yOe$bij$bi~Oe(|Oq(bO~Oe)OOm%PO~Ol#sOm#sOq#tOw$ha!o$ha#d$ha$t$ha$v$ha~OS$}Oh$}Oj$}Oy!VO$q!UO$s'uO%O&rO~O#w(QO~Ow'SOe%Pq~Oe)WO~Oe$Zqw$Zq~P%rO%Oql!dl~",goto:"=Y%]PPPPPPPPPPP%^%h%h%{P%h&`&cP(UPP)ZP*YP)ZPP)ZP)ZP+f,j-lPPP-xPPPP)Z/S%h/W%hP/^P/d/j/p%hP/v%h/|P%hP%h%hP%h0S0VP1k1}2XPPPPP%^PP2_P2b'w'w2h'w'wP'wP'w'wP%^PP%^P%^PP2qP%^P%^P%^PP%^P%^P%^P2w%^P2z2}3Q3X%^P%^PPP%^PPPP%^PP%^P%^P%^P3^3d3j4Y4h4n4t4z5Q5W5d5j5p5z6Q6W6b6h6n6t6zPPPPPPPPPPPP7Q7T7aP8WP:_:b:eP:h:q:w;T;p;y=S=VanOPqx!f#l$_%fs^OPefqx!a!b!c!d!f#l$_$`%T%f'ZsTOPefqx!a!b!c!d!f#l$_$`%T%f'ZR!OUb^ef!a!b!c!d$`%T'Z`_OPqx!f#l$_%f!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)Ug#Uhlm!u#Q#S$i%P%Q&d'o!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UQ&b$pR&i$x!y!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)U!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UU$}#Q&k(nU&u%Y&w'yR'x&t!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UV$}#Q&k(n#P!YVabcdgiruv!Q!T!t#Q#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j&k'S'V'^'b'q't(Q(S(U(Y(^(n(w)UQ$P!YQ&_$lQ&`$oR(e'n!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UQ#YjU$}#Q&k(nR%X#ZT#{!W#|Q![WR$Q!]Q!kYR$R!^Q$R!mR%y$TQ!lYR$S!^Q$R!lR%y$SQ!oZR$U!_Q!q[R$V!`R!s]Q!hXQ!|fQ$]!eQ$f!tQ$k!vQ$m!wQ$r!{Q%U#VQ%[#^Q%]#_Q%^#cQ%c#gQ'l&_Q'{&vQ(R&zQ(T'OQ(q'zQ(s(PQ)P(gQ)S(tQ)T(uR)V)OSpOqUyP!f$_Q#jxQ%g#lR'P%fa`OPqx!f#l$_%fQ$f!tR(a'bR$i!uQ'j&[R(z(bQ${#QQ'v&kR)R(nQ&b$pR's&iR#ZjR#]kR%Z#]S&v%Y&wR(o'yV&t%Y&w'yQ#o{R%i#oQqOR#bqQ%v$OQ&Q$a^'R%v&Q't(U(Y(^)UQ't&jQ(U'SQ(Y'VQ(^'^R)U(wQ'T%vU(W'T(X(xQ(X'UR(x(YQ#|!WR%s#|Q#v!SR%o#vQ'_&QR(_'_Q'[&OR(]'[Q!eXR$[!eUxP!f$_S#ix%fR%f#lQ&U$dR'd&UQ&Y$eR'g&YQ#myQ%e#jT%h#m%eQ(c'jR({(cQ%R#RR&o%RQ$u#OS&e$u(jR(j'sQ'r&gR(i'rQ&w%YR'|&wQ'z&vR(p'zQ&y%^R(O&yQ%a#eR&}%aR|QSoOq]wPx!f#l$_%f`XOPqx!f#l$_%fQ!zeQ!{fQ$W!aQ$X!bQ$Y!cQ$Z!dQ&O$`Q&p%TR(['ZQ!SVQ!uaQ!vbQ!wcQ!xdQ#OgQ#WiQ#crQ#guQ#hvS#q!Q$dQ#x!TQ$e!tQ%l#sQ%m#tQ%n#ul%u$O$a%v&Q&j'S'V'^'t(U(Y(^(w)UQ&S$cS&W$e&YQ&g$wQ&{%_Q'O%bQ'X%{Q'f&XQ(`'bQ(h'qQ(t(QR(u(SR%x$OR&R$aR&P$`QzPQ$^!fR%}$_X#ly#j#m%eQ#VhQ#_mQ$h!uR&^$iW#Rhm!u$iQ#^lQ$|#QQ%S#SQ&m%PQ&n%QQ'p&dR(f'oQ%O#QQ'v&kR)R(nQ#apQ$k!vQ$n!xQ$q!zQ$v#OQ%V#WQ%W#YQ%]#_Q%d#hQ&]$hQ&f$uQ&q%XQ'k&^Q'l&_S'm&`&bQ(k'sQ(}(eR)Q(jR&h$wR#ft",nodeNames:`⚠ InterpolationEnd InterpolationContinue Unit VariableName InterpolationStart LineComment Comment IndentedMixin IndentedInclude StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector SuffixedSelector Suffix Interpolation SassVariableName ValueName ) ( ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp LogicOp UnaryExpression LogicOp NamespacedValue . CallExpression Callee ArgList : ... , CallLiteral CallTag ParenthesizedContent ] [ LineNames LineName ClassSelector ClassName PseudoClassSelector :: PseudoClassName PseudoClassName ArgList PseudoClassName ArgList IdSelector # IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp PlaceholderSelector ClassName Block { Declaration PropertyName Map Important Global Default ; } ImportStatement AtKeyword import Layer layer LayerName KeywordQuery FeatureQuery FeatureName BinaryQuery ComparisonQuery CompareOp UnaryQuery LogicOp ParenthesizedQuery SelectorQuery selector IncludeStatement include Keyword MixinStatement mixin UseStatement use Keyword Star Keyword ExtendStatement extend RootStatement at-root ForwardStatement forward Keyword MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports IfStatement ControlKeyword ControlKeyword Keyword ForStatement ControlKeyword Keyword Keyword Keyword EachStatement ControlKeyword Keyword WhileStatement ControlKeyword OutputStatement ControlKeyword AtRule Styles`,maxTerm:196,context:ue,nodeProps:[[`openedBy`,1,`InterpolationStart`,5,`InterpolationEnd`,21,`(`,43,`[`,78,`{`],[`isolate`,-3,6,7,26,``],[`closedBy`,22,`)`,44,`]`,70,`}`]],propSources:[de],skippedNodes:[0,6,7,146],repeatNodeCount:21,tokenData:"!$Q~RyOq#rqr$jrs0jst2^tu8{uv;hvw;{wx<^xy={yz>^z{>c{|>||}Co}!ODQ!O!PDo!P!QFY!Q![Fk![!]Gf!]!^Hb!^!_Hs!_!`Is!`!aJ^!a!b#r!b!cKa!c!}#r!}#OMn#O#P#r#P#QNP#Q#RNb#R#T#r#T#UNw#U#c#r#c#d!!Y#d#o#r#o#p!!o#p#qNb#q#r!#Q#r#s!#c#s;'S#r;'S;=`!#z<%lO#rW#uSOy$Rz;'S$R;'S;=`$d<%lO$RW$WSzWOy$Rz;'S$R;'S;=`$d<%lO$RW$gP;=`<%l$RY$m[Oy$Rz!_$R!_!`%c!`#W$R#W#X%v#X#Z$R#Z#[)Z#[#]$R#]#^,V#^;'S$R;'S;=`$d<%lO$RY%jSzWlQOy$Rz;'S$R;'S;=`$d<%lO$RY%{UzWOy$Rz#X$R#X#Y&_#Y;'S$R;'S;=`$d<%lO$RY&dUzWOy$Rz#Y$R#Y#Z&v#Z;'S$R;'S;=`$d<%lO$RY&{UzWOy$Rz#T$R#T#U'_#U;'S$R;'S;=`$d<%lO$RY'dUzWOy$Rz#i$R#i#j'v#j;'S$R;'S;=`$d<%lO$RY'{UzWOy$Rz#`$R#`#a(_#a;'S$R;'S;=`$d<%lO$RY(dUzWOy$Rz#h$R#h#i(v#i;'S$R;'S;=`$d<%lO$RY(}S!nQzWOy$Rz;'S$R;'S;=`$d<%lO$RY)`UzWOy$Rz#`$R#`#a)r#a;'S$R;'S;=`$d<%lO$RY)wUzWOy$Rz#c$R#c#d*Z#d;'S$R;'S;=`$d<%lO$RY*`UzWOy$Rz#U$R#U#V*r#V;'S$R;'S;=`$d<%lO$RY*wUzWOy$Rz#T$R#T#U+Z#U;'S$R;'S;=`$d<%lO$RY+`UzWOy$Rz#`$R#`#a+r#a;'S$R;'S;=`$d<%lO$RY+yS!mQzWOy$Rz;'S$R;'S;=`$d<%lO$RY,[UzWOy$Rz#a$R#a#b,n#b;'S$R;'S;=`$d<%lO$RY,sUzWOy$Rz#d$R#d#e-V#e;'S$R;'S;=`$d<%lO$RY-[UzWOy$Rz#c$R#c#d-n#d;'S$R;'S;=`$d<%lO$RY-sUzWOy$Rz#f$R#f#g.V#g;'S$R;'S;=`$d<%lO$RY.[UzWOy$Rz#h$R#h#i.n#i;'S$R;'S;=`$d<%lO$RY.sUzWOy$Rz#T$R#T#U/V#U;'S$R;'S;=`$d<%lO$RY/[UzWOy$Rz#b$R#b#c/n#c;'S$R;'S;=`$d<%lO$RY/sUzWOy$Rz#h$R#h#i0V#i;'S$R;'S;=`$d<%lO$RY0^S!lQzWOy$Rz;'S$R;'S;=`$d<%lO$R~0mWOY0jZr0jrs1Vs#O0j#O#P1[#P;'S0j;'S;=`2W<%lO0j~1[Oj~~1_RO;'S0j;'S;=`1h;=`O0j~1kXOY0jZr0jrs1Vs#O0j#O#P1[#P;'S0j;'S;=`2W;=`<%l0j<%lO0j~2ZP;=`<%l0jZ2cY!ZPOy$Rz!Q$R!Q![3R![!c$R!c!i3R!i#T$R#T#Z3R#Z;'S$R;'S;=`$d<%lO$RY3WYzWOy$Rz!Q$R!Q![3v![!c$R!c!i3v!i#T$R#T#Z3v#Z;'S$R;'S;=`$d<%lO$RY3{YzWOy$Rz!Q$R!Q![4k![!c$R!c!i4k!i#T$R#T#Z4k#Z;'S$R;'S;=`$d<%lO$RY4rYhQzWOy$Rz!Q$R!Q![5b![!c$R!c!i5b!i#T$R#T#Z5b#Z;'S$R;'S;=`$d<%lO$RY5iYhQzWOy$Rz!Q$R!Q![6X![!c$R!c!i6X!i#T$R#T#Z6X#Z;'S$R;'S;=`$d<%lO$RY6^YzWOy$Rz!Q$R!Q![6|![!c$R!c!i6|!i#T$R#T#Z6|#Z;'S$R;'S;=`$d<%lO$RY7TYhQzWOy$Rz!Q$R!Q![7s![!c$R!c!i7s!i#T$R#T#Z7s#Z;'S$R;'S;=`$d<%lO$RY7xYzWOy$Rz!Q$R!Q![8h![!c$R!c!i8h!i#T$R#T#Z8h#Z;'S$R;'S;=`$d<%lO$RY8oShQzWOy$Rz;'S$R;'S;=`$d<%lO$R_9O`Oy$Rz}$R}!O:Q!O!Q$R!Q![:Q![!_$R!_!`;T!`!c$R!c!}:Q!}#R$R#R#S:Q#S#T$R#T#o:Q#o;'S$R;'S;=`$d<%lO$RZ:X^zWcROy$Rz}$R}!O:Q!O!Q$R!Q![:Q![!c$R!c!}:Q!}#R$R#R#S:Q#S#T$R#T#o:Q#o;'S$R;'S;=`$d<%lO$R[;[S!_SzWOy$Rz;'S$R;'S;=`$d<%lO$RZ;oS%SPlQOy$Rz;'S$R;'S;=`$d<%lO$RZ<QS_ROy$Rz;'S$R;'S;=`$d<%lO$R~<aWOY<^Zw<^wx1Vx#O<^#O#P<y#P;'S<^;'S;=`=u<%lO<^~<|RO;'S<^;'S;=`=V;=`O<^~=YXOY<^Zw<^wx1Vx#O<^#O#P<y#P;'S<^;'S;=`=u;=`<%l<^<%lO<^~=xP;=`<%l<^Z>QSfROy$Rz;'S$R;'S;=`$d<%lO$R~>cOe~_>jU$|PlQOy$Rz!_$R!_!`;T!`;'S$R;'S;=`$d<%lO$RZ?TWlQ!dPOy$Rz!O$R!O!P?m!P!Q$R!Q![Br![;'S$R;'S;=`$d<%lO$RZ?rUzWOy$Rz!Q$R!Q![@U![;'S$R;'S;=`$d<%lO$RZ@]YzW%OROy$Rz!Q$R!Q![@U![!g$R!g!h@{!h#X$R#X#Y@{#Y;'S$R;'S;=`$d<%lO$RZAQYzWOy$Rz{$R{|Ap|}$R}!OAp!O!Q$R!Q![BX![;'S$R;'S;=`$d<%lO$RZAuUzWOy$Rz!Q$R!Q![BX![;'S$R;'S;=`$d<%lO$RZB`UzW%OROy$Rz!Q$R!Q![BX![;'S$R;'S;=`$d<%lO$RZBy[zW%OROy$Rz!O$R!O!P@U!P!Q$R!Q![Br![!g$R!g!h@{!h#X$R#X#Y@{#Y;'S$R;'S;=`$d<%lO$RZCtSwROy$Rz;'S$R;'S;=`$d<%lO$RZDVWlQOy$Rz!O$R!O!P?m!P!Q$R!Q![Br![;'S$R;'S;=`$d<%lO$RZDtWqROy$Rz!O$R!O!PE^!P!Q$R!Q![@U![;'S$R;'S;=`$d<%lO$RYEcUzWOy$Rz!O$R!O!PEu!P;'S$R;'S;=`$d<%lO$RYE|SvQzWOy$Rz;'S$R;'S;=`$d<%lO$RYF_SlQOy$Rz;'S$R;'S;=`$d<%lO$RZFp[%OROy$Rz!O$R!O!P@U!P!Q$R!Q![Br![!g$R!g!h@{!h#X$R#X#Y@{#Y;'S$R;'S;=`$d<%lO$RkGkUucOy$Rz![$R![!]G}!];'S$R;'S;=`$d<%lO$RXHUS!SPzWOy$Rz;'S$R;'S;=`$d<%lO$RZHgS!oROy$Rz;'S$R;'S;=`$d<%lO$RjHzU!|`lQOy$Rz!_$R!_!`I^!`;'S$R;'S;=`$d<%lO$RjIgS!|`zWlQOy$Rz;'S$R;'S;=`$d<%lO$RnIzU!|`!_SOy$Rz!_$R!_!`%c!`;'S$R;'S;=`$d<%lO$RkJgV!aP!|`lQOy$Rz!_$R!_!`I^!`!aJ|!a;'S$R;'S;=`$d<%lO$RXKTS!aPzWOy$Rz;'S$R;'S;=`$d<%lO$RXKdYOy$Rz}$R}!OLS!O!c$R!c!}Lq!}#T$R#T#oLq#o;'S$R;'S;=`$d<%lO$RXLXWzWOy$Rz!c$R!c!}Lq!}#T$R#T#oLq#o;'S$R;'S;=`$d<%lO$RXLx[!rPzWOy$Rz}$R}!OLq!O!Q$R!Q![Lq![!c$R!c!}Lq!}#T$R#T#oLq#o;'S$R;'S;=`$d<%lO$RZMsS|ROy$Rz;'S$R;'S;=`$d<%lO$R_NUS{VOy$Rz;'S$R;'S;=`$d<%lO$R[NeUOy$Rz!_$R!_!`;T!`;'S$R;'S;=`$d<%lO$RkNzUOy$Rz#b$R#b#c! ^#c;'S$R;'S;=`$d<%lO$Rk! cUzWOy$Rz#W$R#W#X! u#X;'S$R;'S;=`$d<%lO$Rk! |SmczWOy$Rz;'S$R;'S;=`$d<%lO$Rk!!]UOy$Rz#f$R#f#g! u#g;'S$R;'S;=`$d<%lO$RZ!!tS!hROy$Rz;'S$R;'S;=`$d<%lO$RZ!#VS!pROy$Rz;'S$R;'S;=`$d<%lO$R]!#hU!dPOy$Rz!_$R!_!`;T!`;'S$R;'S;=`$d<%lO$RW!#}P;=`<%l#r",tokenizers:[ie,se,oe,ce,ae,re,Y,X,0,1,2,3,4],topRules:{StyleSheet:[0,10],Styles:[1,145]},dialects:{indented:0},specialized:[{term:172,get:e=>fe[e]||-1},{term:171,get:e=>pe[e]||-1},{term:80,get:e=>me[e]||-1},{term:173,get:e=>Q[e]||-1}],tokenPrec:3217}),$=s.define({name:`sass`,parser:he.configure({props:[e.add({Block:u,Comment(e,t){return{from:e.from+2,to:t.sliceDoc(e.to-2,e.to)==`*/`?e.to-2:e.to}}}),t.add({Declaration:i()})]}),languageData:{commentTokens:{block:{open:`/*`,close:`*/`},line:`//`},indentOnInput:/^\s*\}$/,wordChars:`$-`}}),ge=$.configure({dialect:`indented`,props:[t.add({"Block RuleSet":e=>e.baseIndent+e.unit}),e.add({Block:e=>({from:e.from,to:e.to})})]}),_e=d(e=>e.name==`VariableName`||e.name==`SassVariableName`);function ve(e){return new l(e?.indented?ge:$,$.data.of({autocomplete:_e}))}export{ve as sass};
|
|
1
|
+
import{C as e,D as t,L as n,R as r,h as i,n as a,r as o,s,t as c,u as l,x as u}from"./dist-CYzOYk_e.js";import{r as d}from"./dist-D1hk0iC5.js";var f=168,p=169,m=170,h=1,ee=2,g=3,_=171,v=172,y=4,b=173,x=5,S=174,C=175,w=176,T=177,E=6,D=7,te=8,ne=9,O=0,k=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],A=58,j=40,M=95,N=91,P=45,F=46,I=35,L=37,R=123,z=125,B=47,V=42,H=10,U=61,W=43,G=38;function K(e){return e>=65&&e<=90||e>=97&&e<=122||e>=161}function q(e){return e>=48&&e<=57}function J(e){let t;return e.next==B&&((t=e.peek(1))==B||t==V)}var re=new a((e,t)=>{if(t.dialectEnabled(O)){let n;if(e.next<0&&t.canShift(w))e.acceptToken(w);else if(((n=e.peek(-1))==H||n<0)&&t.canShift(C)){let t=0;for(;e.next!=H&&k.includes(e.next);)e.advance(),t++;e.next==H||J(e)?e.acceptToken(C,-t):t&&e.acceptToken(T)}else if(e.next==H)e.acceptToken(S,1);else if(k.includes(e.next)){for(e.advance();e.next!=H&&k.includes(e.next);)e.advance();e.acceptToken(T)}}else{let t=0;for(;k.includes(e.next);)e.advance(),t++;t&&e.acceptToken(T)}},{contextual:!0}),Y=new a((e,t)=>{if(J(e)){if(e.advance(),t.dialectEnabled(O)){let t=-1;for(let n=1;;n++){let r=e.peek(-n-1);if(r==H||r<0){t=n+1;break}if(!k.includes(r))break}if(t>-1){let n=e.next==V,r=0;for(e.advance();e.next>=0;)if(e.next==H){e.advance();let n=0;for(;e.next!=H&&k.includes(e.next);)n++,e.advance();if(n<t){r=-n-1;break}}else if(n&&e.next==V&&e.peek(1)==B){r=2;break}else e.advance();e.acceptToken(n?D:E,r);return}}if(e.next==B){for(;e.next!=H&&e.next>=0;)e.advance();e.acceptToken(E)}else{for(e.advance();e.next>=0;){let{next:t}=e;if(e.advance(),t==V&&e.next==B){e.advance();break}}e.acceptToken(D)}}}),X=new a((e,t)=>{(e.next==W||e.next==U)&&t.dialectEnabled(O)&&e.acceptToken(e.next==U?te:ne,1)}),ie=new a((e,t)=>{if(!t.dialectEnabled(O))return;let n=t.context.depth;if(e.next<0&&n){e.acceptToken(p);return}if(e.peek(-1)==H){let t=0;for(;e.next!=H&&k.includes(e.next);)e.advance(),t++;t!=n&&e.next!=H&&!J(e)&&(t<n?e.acceptToken(p,-t):e.acceptToken(f))}}),ae=new a((e,t)=>{for(let n=!1,r=0,i=0;;i++){let{next:a}=e;if(K(a)||a==P||a==M||n&&q(a))!n&&(a!=P||i>0)&&(n=!0),r===i&&a==P&&r++,e.advance();else if(a==I&&e.peek(1)==R){e.acceptToken(x,2);break}else{n&&e.acceptToken(r==2&&t.canShift(y)?y:t.canShift(b)?b:a==j?_:v);break}}}),oe=new a(e=>{if(e.next==z){for(e.advance();K(e.next)||e.next==P||e.next==M||q(e.next);)e.advance();e.next==I&&e.peek(1)==R?e.acceptToken(ee,2):e.acceptToken(h)}}),se=new a(e=>{if(k.includes(e.peek(-1))){let{next:t}=e;(K(t)||t==M||t==I||t==F||t==N||t==A&&K(e.peek(1))||t==P||t==G||t==V)&&e.acceptToken(m)}}),ce=new a(e=>{if(!k.includes(e.peek(-1))){let{next:t}=e;if(t==L&&(e.advance(),e.acceptToken(g)),K(t)){do e.advance();while(K(e.next)||q(e.next));e.acceptToken(g)}}});function Z(e,t){this.parent=e,this.depth=t,this.hash=(e?e.hash+e.hash<<8:0)+t+(t<<4)}var le=new Z(null,0),ue=new c({start:le,shift(e,t,n,r){return t==f?new Z(e,n.pos-r.pos):t==p?e.parent:e},hash(e){return e.hash}}),de=n({"AtKeyword import charset namespace keyframes media supports include mixin use forward extend at-root":r.definitionKeyword,"Keyword selector":r.keyword,ControlKeyword:r.controlKeyword,NamespaceName:r.namespace,KeyframeName:r.labelName,KeyframeRangeName:r.operatorKeyword,TagName:r.tagName,"ClassName Suffix":r.className,PseudoClassName:r.constant(r.className),IdName:r.labelName,"FeatureName PropertyName":r.propertyName,AttributeName:r.attributeName,NumberLiteral:r.number,KeywordQuery:r.keyword,UnaryQueryOp:r.operatorKeyword,"CallTag ValueName":r.atom,VariableName:r.variableName,SassVariableName:r.special(r.variableName),Callee:r.operatorKeyword,Unit:r.unit,"UniversalSelector NestingSelector IndentedMixin IndentedInclude":r.definitionOperator,MatchOp:r.compareOperator,"ChildOp SiblingOp, LogicOp":r.logicOperator,BinOp:r.arithmeticOperator,"Important Global Default":r.modifier,Comment:r.blockComment,LineComment:r.lineComment,ColorLiteral:r.color,"ParenthesizedContent StringLiteral":r.string,"InterpolationStart InterpolationContinue InterpolationEnd":r.meta,': "..."':r.punctuation,"PseudoOp #":r.derefOperator,"; ,":r.separator,"( )":r.paren,"[ ]":r.squareBracket,"{ }":r.brace}),fe={__proto__:null,not:62,using:197,as:207,with:211,without:211,hide:225,show:225,if:263,from:269,to:271,through:273,in:279},pe={__proto__:null,url:82,"url-prefix":82,domain:82,regexp:82,lang:104,"nth-child":104,"nth-last-child":104,"nth-of-type":104,"nth-last-of-type":104,dir:104,"host-context":104},me={__proto__:null,"@import":162,"@include":194,"@mixin":200,"@function":200,"@use":204,"@extend":214,"@at-root":218,"@forward":222,"@media":228,"@charset":232,"@namespace":236,"@keyframes":242,"@supports":254,"@if":258,"@else":260,"@for":266,"@each":276,"@while":282,"@debug":286,"@warn":286,"@error":286,"@return":286},Q={__proto__:null,layer:166,not:184,only:184,selector:190},he=o.deserialize({version:14,states:"!$WQ`Q+tOOO#fQ+tOOP#mOpOOOOQ#U'#Ch'#ChO#rQ(pO'#CjOOQ#U'#Ci'#CiO%_Q)QO'#GXO%rQ.jO'#CnO&mQ#dO'#D]O'dQ(pO'#CgO'kQ)OO'#D_O'vQ#dO'#DfO'{Q#dO'#DiO(QQ#dO'#DqOOQ#U'#GX'#GXO(VQ(pO'#GXO(^Q(nO'#DuO%rQ.jO'#D}O%rQ.jO'#E`O%rQ.jO'#EcO%rQ.jO'#EeO(cQ)OO'#EjO)TQ)OO'#ElO%rQ.jO'#EnO)bQ)OO'#EqO%rQ.jO'#EsO)|Q)OO'#EuO*XQ)OO'#ExO*aQ)OO'#FOO*uQ)OO'#FbOOQ&Z'#GW'#GWOOQ&Y'#Fe'#FeO+PQ(nO'#FeQ`Q+tOOO%rQ.jO'#FQO+[Q(nO'#FUO+aQ)OO'#FZO%rQ.jO'#F^O%rQ.jO'#F`OOQ&Z'#Fm'#FmO+iQ+uO'#GaO+vQ(oO'#GaQOQ#SOOP,XO#SO'#GVPOOO)CAz)CAzOOQ#U'#Cm'#CmOOQ#U,59W,59WOOQ#i'#Cp'#CpO%rQ.jO'#CsO,xQ.wO'#CuO/dQ.^O,59YO%rQ.jO'#CzOOQ#S'#DP'#DPO/uQ(nO'#DUO/zQ)OO'#DZOOQ#i'#GZ'#GZO0SQ(nO'#DOOOQ#U'#D^'#D^OOQ#U,59w,59wO&mQ#dO,59wO0XQ)OO,59yO'vQ#dO,5:QO'{Q#dO,5:TO(cQ)OO,5:WO(cQ)OO,5:YO(cQ)OO,5:ZO(cQ)OO'#FlO0dQ(nO,59RO0oQ+tO'#DsO0vQ#TO'#DsOOQ&Z,59R,59ROOQ#U'#Da'#DaOOQ#S'#Dd'#DdOOQ#U,59y,59yO0{Q(nO,59yO1QQ(nO,59yOOQ#U'#Dh'#DhOOQ#U,5:Q,5:QOOQ#S'#Dj'#DjO1VQ9`O,5:TOOQ#U'#Dr'#DrOOQ#U,5:],5:]O2YQ.jO,5:aO2dQ.jO,5:iO3`Q.jO,5:zO3mQ.YO,5:}O4OQ.jO,5;POOQ#U'#Cj'#CjO4wQ(pO,5;UO5UQ(pO,5;WOOQ&Z,5;W,5;WO5]Q)OO,5;WO5bQ.jO,5;YOOQ#S'#ET'#ETO6TQ.jO'#E]O6kQ(nO'#GcO*aQ)OO'#EZO7PQ(nO'#E^OOQ#S'#Gd'#GdO0gQ(nO,5;]O4UQ.YO,5;_OOQ#d'#Ew'#EwO+PQ(nO,5;aO7UQ)OO,5;aOOQ#S'#Ez'#EzO7^Q(nO,5;dO7cQ(nO,5;jO7nQ(nO,5;|OOQ&Z'#Gf'#GfOOQ&Y,5<P,5<POOQ&Y-E9c-E9cO3mQ.YO,5;lO7|Q)OO,5;pO8RQ)OO'#GhO8ZQ)OO,5;uO3mQ.YO,5;xO4UQ.YO,5;zOOQ&Z-E9k-E9kO8`Q(oO,5<{OOQ&Z'#Gb'#GbO8qQ+uO'#FpO8`Q(oO,5<{POO#S'#Fd'#FdP9UO#SO,5<qPOOO,5<q,5<qO9dQ.YO,59_OOQ#i,59a,59aO%rQ.jO,59cO%rQ.jO,59hO%rQ.jO'#FiO9rQ#WO1G.tOOQ#k1G.t1G.tO9zQ.oO,59fO<pQ! lO,59pOOQ#d'#D['#D[OOQ#d'#Fh'#FhO<{Q)OO,59uOOQ#i,59u,59uO={Q.jO'#DQOOQ#i,59j,59jOOQ#U1G/c1G/cOOQ#U1G/e1G/eO0{Q(nO1G/eO1QQ(nO1G/eOOQ#U1G/l1G/lO>VQ9`O1G/oO>pQ(pO1G/rO?dQ(pO1G/tO@WQ(pO1G/uO@zQ(pO,5<WOOQ#S-E9j-E9jOOQ&Z1G.m1G.mOAXQ(nO,5:_OA^Q+uO,5:_OAeQ)OO'#DeOAlQ.jO'#DcOOQ#U1G/o1G/oO%rQ.jO1G/oOBkQ.jO'#DwOBuQ.kO1G/{OOQ#T1G/{1G/{OCrQ)OO'#EQO+PQ(nO1G0TO2pQ)OO1G0TODaQ+uO'#GfOOQ&Z1G0f1G0fO0SQ(nO1G0fOOQ&Z1G0i1G0iOOQ&Z1G0k1G0kO0SQ(nO1G0kOFyQ)OO1G0kOOQ&Z1G0p1G0pOOQ&Z1G0r1G0rOGRQ)OO1G0rOGWQ(nO1G0rOG]Q)OO1G0tOOQ&Z1G0t1G0tOGkQ.jO'#FsOG{Q#dO1G0tOHQQ!N^O'#CuOH]Q!NUO'#ETOHkQ!NUO,5:pOHsQ(nO,5:wOOQ#S'#Ge'#GeOHnQ!NUO,5:sO*aQ)OO,5:rOH{Q)OO'#FrOI`Q(nO,5<}OIqQ(nO,5:uO(cQ)OO,5:xOOQ&Z1G0w1G0wOOQ&Z1G0y1G0yOOQ&Z1G0{1G0{O+PQ(nO1G0{OJYQ)OO'#E{OOQ&Z1G1O1G1OOOQ&Z1G1U1G1UOOQ&Z1G1h1G1hOJeQ+uO1G1WO%rQ.jO1G1[OL}Q)OO'#FxOMYQ)OO,5=SO%rQ.jO1G1aOOQ&Z1G1d1G1dOOQ&Z1G1f1G1fOMbQ(oO1G2gOMsQ+uO,5<[OOQ#T,5<[,5<[OOQ#T-E9n-E9nPOO#S-E9b-E9bPOOO1G2]1G2]OOQ#i1G.y1G.yONWQ.oO1G.}OOQ#i1G/S1G/SO!!|Q.^O,5<TOOQ#W-E9g-E9gOOQ#k7+$`7+$`OOQ#i1G/[1G/[O!#_Q(nO1G/[OOQ#d-E9f-E9fOOQ#i1G/a1G/aO!#dQ.jO'#FfO!$qQ.jO'#G]O!&]Q.jO'#GZO!&dQ(nO,59lOOQ#U7+%P7+%POOQ#U7+%Z7+%ZO%rQ.jO7+%ZOOQ&Z1G/y1G/yO!&iQ#TO1G/yO!&nQ(pO'#G_O!&xQ(nO,5:PO!&}Q.jO'#G^O!'XQ(nO,59}O!'^Q.YO7+%ZO!'lQ.YO'#GZO!'}Q(nO,5:cOOQ#T,5:c,5:cO!(VQ.kO'#FoO%rQ.jO'#FoO!)yQ.kO7+%gOOQ#T7+%g7+%gO!*mQ#dO,5:lOOQ&Z7+%o7+%oO+PQ(nO7+%oO7nQ(nO7+&QO+PQ(nO7+&VOOQ#d'#Eh'#EhO!*rQ)OO7+&VO!+QQ(nO7+&^O*aQ)OO7+&^OOQ#d-E9q-E9qOOQ&Z7+&`7+&`O!+VQ.jO'#GgOOQ#d,5<_,5<_OF|Q(nO7+&`O%rQ.jO1G0[O!+qQ.jO1G0_OOQ#S1G0c1G0cOOQ#S1G0^1G0^O!+xQ(nO,5<^OOQ#S-E9p-E9pO!,^Q(pO1G0dOOQ&Z7+&g7+&gO,gQ(vO'#CuOOQ#S'#E}'#E}O!,eQ(nO'#E|OOQ#S'#E|'#E|O!,sQ(nO'#FuO!-OQ)OO,5;gOOQ&Z,5;g,5;gO!-ZQ+uO7+&rO!/sQ)OO7+&rO!0OQ.jO7+&vOOQ#d,5<d,5<dOOQ#d-E9v-E9vO3mQ.YO7+&{OOQ#T1G1v1G1vOOQ#i7+$v7+$vOOQ#d-E9d-E9dO!0aQ.jO'#FgO!0nQ(nO,5<wO!0nQ(nO,5<wO%rQ.jO,5<wOOQ#i1G/W1G/WO!0vQ.YO<<HuOOQ&Z7+%e7+%eO!1UQ)OO'#FkO!1`Q(nO,5<yOOQ#U1G/k1G/kO!1hQ.jO'#FjO!1rQ(nO,5<xOOQ#U1G/i1G/iOOQ#U<<Hu<<HuO1_Q.jO,5<YO!1zQ(nO'#FnOOQ#S-E9l-E9lOOQ#T1G/}1G/}O!2PQ.kO,5<ZOOQ#e-E9m-E9mOOQ#T<<IR<<IROOQ#S'#ES'#ESO!3sQ(nO1G0WOOQ&Z<<IZ<<IZOOQ&Z<<Il<<IlOOQ&Z<<Iq<<IqO0SQ(nO<<IqO*aQ)OO<<IxO!3{Q(nO<<IxO!4TQ.jO'#FtO!4hQ)OO,5=ROG]Q)OO<<IzO!4yQ.jO7+%vOOQ#S'#EV'#EVO!5QQ!NUO7+%yOOQ#S7+&O7+&OOOQ#S,5;h,5;hOJ]Q)OO'#FvO!,sQ(nO,5<aOOQ#d,5<a,5<aOOQ#d-E9s-E9sOOQ&Z1G1R1G1ROOQ&Z-E9u-E9uO!/sQ)OO<<J^O%rQ.jO,5<cOOQ&Z<<J^<<J^O%rQ.jO<<JbOOQ&Z<<Jg<<JgO!5YQ.jO,5<RO!5gQ.jO,5<ROOQ#S-E9e-E9eO!5nQ(nO1G2cO!5vQ.jO1G2cOOQ#UAN>aAN>aO!6QQ(pO,5<VOOQ#S-E9i-E9iO!6[Q.jO,5<UOOQ#S-E9h-E9hO!6fQ.YO1G1tO!6oQ(nO1G1tO!*mQ#dO'#FqO!6zQ(nO7+%rOOQ#d7+%r7+%rO+PQ(nOAN?]O!7SQ(nOAN?dO0gQ(nOAN?dO!7[Q.jO,5<`OOQ#d-E9r-E9rOG]Q)OOAN?fOOQ&ZAN?fAN?fOOQ#S<<Ib<<IbOOQ#S<<Ie<<IeO!7vQ.jO<<IeOOQ#S,5<b,5<bOOQ#S-E9t-E9tOOQ#d1G1{1G1{P!8_Q)OO'#FwOOQ&ZAN?xAN?xO3mQ.YO1G1}O3mQ.YOAN?|OOQ#S1G1m1G1mO%rQ.jO1G1mO!8dQ(nO7+'}OOQ#S7+'`7+'`OOQ#S,5<],5<]OOQ#S-E9o-E9oOOQ#d<<I^<<I^OOQ&ZG24wG24wO0gQ(nOG25OOOQ&ZG25OG25OOOQ&ZG25QG25QO!8lQ(nOAN?POOQ&Z7+'i7+'iOOQ&ZG25hG25hO!8qQ.jO7+'XOOQ&ZLD*jLD*jOOQ#SG24kG24k",stateData:"!9R~O$wOSVOSUOS$uQQ~OS`OTVOWcOXbO_UOc`OqWOuYO|[O!SYO!ZZO!rmO!saO#TbO#WcO#YdO#_eO#afO#cgO#fhO#hiO#jjO#mkO#slO#urO#ysO$OtO$RuO$TvO$rSO$|RO%S]O~O$m%TP~P`O$u{O~Oq^Xu^Xu!jXw^X|^X!S^X!Z^X!a^X!d^X!h^X$p^X$t^X~Oq${Xu${Xw${X|${X!S${X!Z${X!a${X!d${X!h${X$p${X$t${X~O$r}O!o${X$v${Xf${Xe${X~P$jOS!XOTVO_!XOc!XOf!QOh!XOj!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~O$r!ZO~Oq!]Ou!^O|!`O!S!^O!Z!_O!a!aO!d!cO!h!fO$p!bO$t!gO~Ow!dO~P&rO!U!mO$q!jO$r!iO~O$r!nO~O$r!pO~O$r!rO~Ou!tO~P$jOu!tO~OTVO_UOqWOuYO|[O!SYO!ZZO$r!yO$|RO%S]O~Of!}O!h!fO$t!gO~P(cOTVOc#UOf#QO#O#SO#R#TO$s#PO!h%VP$t%VP~Oj#YOy!VO$r#XO~Oj#[O$r#[O~OTVOc#UOf#QO#O#SO#R#TO$s#PO~O!o%VP$v%VP~P)bO!o#`O$t#`O$v#`O~Oc#dO~Oc#eO$P%[P~O$m%TX!p%TX$o%TX~P`O!o#kO$t#kO$m%TX!p%TX$o%TX~OU#nOV#nO$t#pO$w#nO~OR#rO$tiX!hiXeiXwiX~OPiXQiXliXmiXqiXTiXciXfiX!oiX!uiX#OiX#RiX$siX$viX#UiX#ZiX#]iX#diXSiX_iXhiXjiXoiXyiX|iX!liX!miX!niX$qiX$riX%OiX$miXviX{iX#{iX#|iX!piX$oiX~P,gOP#wOQ#uOl#sOm#sOq#tO~Of#yO~O{#}O$r#zO~Of$OO~O!U$TO$q!jO$r!iO~Ow!dO!h!fO$t!gO~O!p%TP~P`O$n$_O~Of$`O~Of$aO~O{$bO!_$cO~OS!XOTVO_!XOc!XOf$dOh!XOj!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~O!h!fO$t!gO~P1_Ol#sOm#sOq#tO!u$gO!o%VP$t%VP$v%VP~P*aOl#sOm#sOq#tO!o#`O$v#`O~O!h!fO#U$lO$t$jO~P2}Ol#sOm#sOq#tO!h!fO$t!gO~O#Z$pO#]$oO$t#`O~P2}Oq!]Ou!^O|!`O!S!^O!Z!_O!a!aO!d!cO$p!bO~O!o#`O$t#`O$v#`O~P4]Of$sO~P&rO#]$tO~O#Z$xO#d$wO$t#`O~P2}OS$}Oh$}Oj$}Oy!VO$q!UO%O$yO~OTVOc#UOf#QO#O#SO#R#TO$s$zO~P5oOm%POw%QO!h%VX$t%VX!o%VX$v%VX~Of%TO~Oj%XOy!VO~O!h%YO~Om%PO!h!fO$t!gO~O!h!fO!o#`O$t$jO$v#`O~O#z%_O~Ow%`O$P%[X~O$P%bO~O!o#kO$t#kO$m%Ta!p%Ta$o%Ta~O!o$dX$m$dX$t$dX!p$dX$o$dX~P`OU#nOV#nO$t%jO$w#nO~Oe%kOl#sOm#sOq#tO~OP%pOQ#uO~Ol#sOm#sOq#tOPnaQnaTnacnafna!ona!una#Ona#Rna$sna$tna$vna!hna#Una#Zna#]na#dnaenaSna_nahnajnaonawnayna|na!lna!mna!nna$qna$rna%Ona$mnavna{na#{na#|na!pna$ona~Oe%qOj%rOz%rO~O{%tO$r#zO~OS!XOTVO_!XOf!QOh!XOj!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~Oc%wOe%PP~P=TO{%zO!_%{O~Oq!]Ou!^O|!`O!S!^O!Z!_O~Ow!`i!a!`i!d!`i!h!`i$p!`i$t!`i!o!`i$v!`if!`ie!`i~P>_Ow!bi!a!bi!d!bi!h!bi$p!bi$t!bi!o!bi$v!bif!bie!bi~P>_Ow!ci!a!ci!d!ci!h!ci$p!ci$t!ci!o!ci$v!cif!cie!ci~P>_Ow$`a!h$`a$t$`a~P4]O!p%|O~O$o%TP~P`Oe%RP~P(cOe%QP~P%rOS!XOTVO_!XOc!XOf!QOh!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~Oe&VOj&TO~PAsOl#sOm#sOq#tOw&XO!l&ZO!m&ZO!n&ZO!o!ii$t!ii$v!ii$m!ii!p!ii$o!ii~P%rOf&[OT!tXc!tX!o!tX#O!tX#R!tX$s!tX$t!tX$v!tX~O$n$_OS%YXT%YXW%YXX%YX_%YXc%YXq%YXu%YX|%YX!S%YX!Z%YX!r%YX!s%YX#T%YX#W%YX#Y%YX#_%YX#a%YX#c%YX#f%YX#h%YX#j%YX#m%YX#s%YX#u%YX#y%YX$O%YX$R%YX$T%YX$m%YX$r%YX$|%YX%S%YX!p%YX!o%YX$t%YX$o%YX~O$r!PO$|&aO~O#]&cO~Ou&dO~O!o#`O#d$wO$t#`O$v#`O~O!o%ZP#d%ZP$t%ZP$v%ZP~P%rO$r!PO~OR#rO!|iXeiX~Oe!wXm!wXu!yX!|!yX~Ou&jO!|&kO~Oe&lOm%PO~Ow$fX!h$fX$t$fX!o$fX$v$fX~P*aOw%QO!h%Va$t%Va!o%Va$v%Va~Om%POw!}a!h!}a$t!}a!o!}a$v!}ae!}a~O!p&xO$r&sO%O&rO~O#v&zOS#tiT#tiW#tiX#ti_#tic#tiq#tiu#ti|#ti!S#ti!Z#ti!r#ti!s#ti#T#ti#W#ti#Y#ti#_#ti#a#ti#c#ti#f#ti#h#ti#j#ti#m#ti#s#ti#u#ti#y#ti$O#ti$R#ti$T#ti$m#ti$r#ti$|#ti%S#ti!p#ti!o#ti$t#ti$o#ti~Oc&|Ow$lX$P$lX~Ow%`O$P%[a~O!o#kO$t#kO$m%Ti!p%Ti$o%Ti~O!o$da$m$da$t$da!p$da$o$da~P`Oq#tOPkiQkilkimkiTkickifki!oki!uki#Oki#Rki$ski$tki$vki!hki#Uki#Zki#]ki#dkiekiSki_kihkijkiokiwkiyki|ki!lki!mki!nki$qki$rki%Oki$mkivki{ki#{ki#|ki!pki$oki~Ol#sOm#sOq#tOP$]aQ$]a~Oe'QO~Ol#sOm#sOq#tOS$YXT$YX_$YXc$YXe$YXf$YXh$YXj$YXo$YXv$YXw$YXy$YX|$YX$q$YX$r$YX%O$YX~Ov'UOw'SOe%PX~P%rOS$}XT$}X_$}Xc$}Xe$}Xf$}Xh$}Xj$}Xl$}Xm$}Xo$}Xq$}Xv$}Xw$}Xy$}X|$}X$q$}X$r$}X%O$}X~Ou'VO~P!%OOe'WO~O$o'YO~Ow'ZOe%RX~P4]Oe']O~Ow'^Oe%QX~P%rOe'`O~Ol#sOm#sOq#tO{'aO~Ou'bOe$}Xl$}Xm$}Xq$}X~Oe'eOj'cO~Ol#sOm#sOq#tOS$cXT$cX_$cXc$cXf$cXh$cXj$cXo$cXw$cXy$cX|$cX!l$cX!m$cX!n$cX!o$cX$q$cX$r$cX$t$cX$v$cX%O$cX$m$cX!p$cX$o$cX~Ow&XO!l'hO!m'hO!n'hO!o!iq$t!iq$v!iq$m!iq!p!iq$o!iq~P%rO$r'iO~O!o#`O#]'nO$t#`O$v#`O~Ou'oO~Ol#sOm#sOq#tOw'qO!o%ZX#d%ZX$t%ZX$v%ZX~O$s'uO~P5oOm%POw$fa!h$fa$t$fa!o$fa$v$fa~Oe'wO~P4]O%O&rOw#pX!h#pX$t#pX~Ow'yO!h!fO$t!gO~O!p'}O$r&sO%O&rO~O#v(POS#tqT#tqW#tqX#tq_#tqc#tqq#tqu#tq|#tq!S#tq!Z#tq!r#tq!s#tq#T#tq#W#tq#Y#tq#_#tq#a#tq#c#tq#f#tq#h#tq#j#tq#m#tq#s#tq#u#tq#y#tq$O#tq$R#tq$T#tq$m#tq$r#tq$|#tq%S#tq!p#tq!o#tq$t#tq$o#tq~O!h!fO#w(QO$t!gO~Ol#sOm#sOq#tO#{(SO#|(SO~Oc(VOe$ZXw$ZX~P=TOw'SOe%Pa~Ol#sOm#sOq#tO{(ZO~Oe$_Xw$_X~P(cOw'ZOe%Ra~Oe$^Xw$^X~P%rOw'^Oe%Qa~Ou'bO~Ol#sOm#sOq#tOS$caT$ca_$cac$caf$cah$caj$cao$caw$cay$ca|$ca!l$ca!m$ca!n$ca!o$ca$q$ca$r$ca$t$ca$v$ca%O$ca$m$ca!p$ca$o$ca~Oe(dOq(bO~Oe(gOm%PO~Ow$hX!o$hX#d$hX$t$hX$v$hX~P%rOw'qO!o%Za#d%Za$t%Za$v%Za~Oe(lO~P%rOe(mO!|(nO~Ov(vOe$Zaw$Za~P%rOu(wO~P!%OOw'SOe%Pi~Ow'SOe%Pi~P%rOe$_aw$_a~P4]Oe$^aw$^a~P%rOl#sOm#sOq#tOw(yOe$bij$bi~Oe(|Oq(bO~Oe)OOm%PO~Ol#sOm#sOq#tOw$ha!o$ha#d$ha$t$ha$v$ha~OS$}Oh$}Oj$}Oy!VO$q!UO$s'uO%O&rO~O#w(QO~Ow'SOe%Pq~Oe)WO~Oe$Zqw$Zq~P%rO%Oql!dl~",goto:"=Y%]PPPPPPPPPPP%^%h%h%{P%h&`&cP(UPP)ZP*YP)ZPP)ZP)ZP+f,j-lPPP-xPPPP)Z/S%h/W%hP/^P/d/j/p%hP/v%h/|P%hP%h%hP%h0S0VP1k1}2XPPPPP%^PP2_P2b'w'w2h'w'wP'wP'w'wP%^PP%^P%^PP2qP%^P%^P%^PP%^P%^P%^P2w%^P2z2}3Q3X%^P%^PPP%^PPPP%^PP%^P%^P%^P3^3d3j4Y4h4n4t4z5Q5W5d5j5p5z6Q6W6b6h6n6t6zPPPPPPPPPPPP7Q7T7aP8WP:_:b:eP:h:q:w;T;p;y=S=VanOPqx!f#l$_%fs^OPefqx!a!b!c!d!f#l$_$`%T%f'ZsTOPefqx!a!b!c!d!f#l$_$`%T%f'ZR!OUb^ef!a!b!c!d$`%T'Z`_OPqx!f#l$_%f!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)Ug#Uhlm!u#Q#S$i%P%Q&d'o!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UQ&b$pR&i$x!y!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)U!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UU$}#Q&k(nU&u%Y&w'yR'x&t!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UV$}#Q&k(n#P!YVabcdgiruv!Q!T!t#Q#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j&k'S'V'^'b'q't(Q(S(U(Y(^(n(w)UQ$P!YQ&_$lQ&`$oR(e'n!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UQ#YjU$}#Q&k(nR%X#ZT#{!W#|Q![WR$Q!]Q!kYR$R!^Q$R!mR%y$TQ!lYR$S!^Q$R!lR%y$SQ!oZR$U!_Q!q[R$V!`R!s]Q!hXQ!|fQ$]!eQ$f!tQ$k!vQ$m!wQ$r!{Q%U#VQ%[#^Q%]#_Q%^#cQ%c#gQ'l&_Q'{&vQ(R&zQ(T'OQ(q'zQ(s(PQ)P(gQ)S(tQ)T(uR)V)OSpOqUyP!f$_Q#jxQ%g#lR'P%fa`OPqx!f#l$_%fQ$f!tR(a'bR$i!uQ'j&[R(z(bQ${#QQ'v&kR)R(nQ&b$pR's&iR#ZjR#]kR%Z#]S&v%Y&wR(o'yV&t%Y&w'yQ#o{R%i#oQqOR#bqQ%v$OQ&Q$a^'R%v&Q't(U(Y(^)UQ't&jQ(U'SQ(Y'VQ(^'^R)U(wQ'T%vU(W'T(X(xQ(X'UR(x(YQ#|!WR%s#|Q#v!SR%o#vQ'_&QR(_'_Q'[&OR(]'[Q!eXR$[!eUxP!f$_S#ix%fR%f#lQ&U$dR'd&UQ&Y$eR'g&YQ#myQ%e#jT%h#m%eQ(c'jR({(cQ%R#RR&o%RQ$u#OS&e$u(jR(j'sQ'r&gR(i'rQ&w%YR'|&wQ'z&vR(p'zQ&y%^R(O&yQ%a#eR&}%aR|QSoOq]wPx!f#l$_%f`XOPqx!f#l$_%fQ!zeQ!{fQ$W!aQ$X!bQ$Y!cQ$Z!dQ&O$`Q&p%TR(['ZQ!SVQ!uaQ!vbQ!wcQ!xdQ#OgQ#WiQ#crQ#guQ#hvS#q!Q$dQ#x!TQ$e!tQ%l#sQ%m#tQ%n#ul%u$O$a%v&Q&j'S'V'^'t(U(Y(^(w)UQ&S$cS&W$e&YQ&g$wQ&{%_Q'O%bQ'X%{Q'f&XQ(`'bQ(h'qQ(t(QR(u(SR%x$OR&R$aR&P$`QzPQ$^!fR%}$_X#ly#j#m%eQ#VhQ#_mQ$h!uR&^$iW#Rhm!u$iQ#^lQ$|#QQ%S#SQ&m%PQ&n%QQ'p&dR(f'oQ%O#QQ'v&kR)R(nQ#apQ$k!vQ$n!xQ$q!zQ$v#OQ%V#WQ%W#YQ%]#_Q%d#hQ&]$hQ&f$uQ&q%XQ'k&^Q'l&_S'm&`&bQ(k'sQ(}(eR)Q(jR&h$wR#ft",nodeNames:`⚠ InterpolationEnd InterpolationContinue Unit VariableName InterpolationStart LineComment Comment IndentedMixin IndentedInclude StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector SuffixedSelector Suffix Interpolation SassVariableName ValueName ) ( ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp LogicOp UnaryExpression LogicOp NamespacedValue . CallExpression Callee ArgList : ... , CallLiteral CallTag ParenthesizedContent ] [ LineNames LineName ClassSelector ClassName PseudoClassSelector :: PseudoClassName PseudoClassName ArgList PseudoClassName ArgList IdSelector # IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp PlaceholderSelector ClassName Block { Declaration PropertyName Map Important Global Default ; } ImportStatement AtKeyword import Layer layer LayerName KeywordQuery FeatureQuery FeatureName BinaryQuery ComparisonQuery CompareOp UnaryQuery LogicOp ParenthesizedQuery SelectorQuery selector IncludeStatement include Keyword MixinStatement mixin UseStatement use Keyword Star Keyword ExtendStatement extend RootStatement at-root ForwardStatement forward Keyword MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports IfStatement ControlKeyword ControlKeyword Keyword ForStatement ControlKeyword Keyword Keyword Keyword EachStatement ControlKeyword Keyword WhileStatement ControlKeyword OutputStatement ControlKeyword AtRule Styles`,maxTerm:196,context:ue,nodeProps:[[`openedBy`,1,`InterpolationStart`,5,`InterpolationEnd`,21,`(`,43,`[`,78,`{`],[`isolate`,-3,6,7,26,``],[`closedBy`,22,`)`,44,`]`,70,`}`]],propSources:[de],skippedNodes:[0,6,7,146],repeatNodeCount:21,tokenData:"!$Q~RyOq#rqr$jrs0jst2^tu8{uv;hvw;{wx<^xy={yz>^z{>c{|>||}Co}!ODQ!O!PDo!P!QFY!Q![Fk![!]Gf!]!^Hb!^!_Hs!_!`Is!`!aJ^!a!b#r!b!cKa!c!}#r!}#OMn#O#P#r#P#QNP#Q#RNb#R#T#r#T#UNw#U#c#r#c#d!!Y#d#o#r#o#p!!o#p#qNb#q#r!#Q#r#s!#c#s;'S#r;'S;=`!#z<%lO#rW#uSOy$Rz;'S$R;'S;=`$d<%lO$RW$WSzWOy$Rz;'S$R;'S;=`$d<%lO$RW$gP;=`<%l$RY$m[Oy$Rz!_$R!_!`%c!`#W$R#W#X%v#X#Z$R#Z#[)Z#[#]$R#]#^,V#^;'S$R;'S;=`$d<%lO$RY%jSzWlQOy$Rz;'S$R;'S;=`$d<%lO$RY%{UzWOy$Rz#X$R#X#Y&_#Y;'S$R;'S;=`$d<%lO$RY&dUzWOy$Rz#Y$R#Y#Z&v#Z;'S$R;'S;=`$d<%lO$RY&{UzWOy$Rz#T$R#T#U'_#U;'S$R;'S;=`$d<%lO$RY'dUzWOy$Rz#i$R#i#j'v#j;'S$R;'S;=`$d<%lO$RY'{UzWOy$Rz#`$R#`#a(_#a;'S$R;'S;=`$d<%lO$RY(dUzWOy$Rz#h$R#h#i(v#i;'S$R;'S;=`$d<%lO$RY(}S!nQzWOy$Rz;'S$R;'S;=`$d<%lO$RY)`UzWOy$Rz#`$R#`#a)r#a;'S$R;'S;=`$d<%lO$RY)wUzWOy$Rz#c$R#c#d*Z#d;'S$R;'S;=`$d<%lO$RY*`UzWOy$Rz#U$R#U#V*r#V;'S$R;'S;=`$d<%lO$RY*wUzWOy$Rz#T$R#T#U+Z#U;'S$R;'S;=`$d<%lO$RY+`UzWOy$Rz#`$R#`#a+r#a;'S$R;'S;=`$d<%lO$RY+yS!mQzWOy$Rz;'S$R;'S;=`$d<%lO$RY,[UzWOy$Rz#a$R#a#b,n#b;'S$R;'S;=`$d<%lO$RY,sUzWOy$Rz#d$R#d#e-V#e;'S$R;'S;=`$d<%lO$RY-[UzWOy$Rz#c$R#c#d-n#d;'S$R;'S;=`$d<%lO$RY-sUzWOy$Rz#f$R#f#g.V#g;'S$R;'S;=`$d<%lO$RY.[UzWOy$Rz#h$R#h#i.n#i;'S$R;'S;=`$d<%lO$RY.sUzWOy$Rz#T$R#T#U/V#U;'S$R;'S;=`$d<%lO$RY/[UzWOy$Rz#b$R#b#c/n#c;'S$R;'S;=`$d<%lO$RY/sUzWOy$Rz#h$R#h#i0V#i;'S$R;'S;=`$d<%lO$RY0^S!lQzWOy$Rz;'S$R;'S;=`$d<%lO$R~0mWOY0jZr0jrs1Vs#O0j#O#P1[#P;'S0j;'S;=`2W<%lO0j~1[Oj~~1_RO;'S0j;'S;=`1h;=`O0j~1kXOY0jZr0jrs1Vs#O0j#O#P1[#P;'S0j;'S;=`2W;=`<%l0j<%lO0j~2ZP;=`<%l0jZ2cY!ZPOy$Rz!Q$R!Q![3R![!c$R!c!i3R!i#T$R#T#Z3R#Z;'S$R;'S;=`$d<%lO$RY3WYzWOy$Rz!Q$R!Q![3v![!c$R!c!i3v!i#T$R#T#Z3v#Z;'S$R;'S;=`$d<%lO$RY3{YzWOy$Rz!Q$R!Q![4k![!c$R!c!i4k!i#T$R#T#Z4k#Z;'S$R;'S;=`$d<%lO$RY4rYhQzWOy$Rz!Q$R!Q![5b![!c$R!c!i5b!i#T$R#T#Z5b#Z;'S$R;'S;=`$d<%lO$RY5iYhQzWOy$Rz!Q$R!Q![6X![!c$R!c!i6X!i#T$R#T#Z6X#Z;'S$R;'S;=`$d<%lO$RY6^YzWOy$Rz!Q$R!Q![6|![!c$R!c!i6|!i#T$R#T#Z6|#Z;'S$R;'S;=`$d<%lO$RY7TYhQzWOy$Rz!Q$R!Q![7s![!c$R!c!i7s!i#T$R#T#Z7s#Z;'S$R;'S;=`$d<%lO$RY7xYzWOy$Rz!Q$R!Q![8h![!c$R!c!i8h!i#T$R#T#Z8h#Z;'S$R;'S;=`$d<%lO$RY8oShQzWOy$Rz;'S$R;'S;=`$d<%lO$R_9O`Oy$Rz}$R}!O:Q!O!Q$R!Q![:Q![!_$R!_!`;T!`!c$R!c!}:Q!}#R$R#R#S:Q#S#T$R#T#o:Q#o;'S$R;'S;=`$d<%lO$RZ:X^zWcROy$Rz}$R}!O:Q!O!Q$R!Q![:Q![!c$R!c!}:Q!}#R$R#R#S:Q#S#T$R#T#o:Q#o;'S$R;'S;=`$d<%lO$R[;[S!_SzWOy$Rz;'S$R;'S;=`$d<%lO$RZ;oS%SPlQOy$Rz;'S$R;'S;=`$d<%lO$RZ<QS_ROy$Rz;'S$R;'S;=`$d<%lO$R~<aWOY<^Zw<^wx1Vx#O<^#O#P<y#P;'S<^;'S;=`=u<%lO<^~<|RO;'S<^;'S;=`=V;=`O<^~=YXOY<^Zw<^wx1Vx#O<^#O#P<y#P;'S<^;'S;=`=u;=`<%l<^<%lO<^~=xP;=`<%l<^Z>QSfROy$Rz;'S$R;'S;=`$d<%lO$R~>cOe~_>jU$|PlQOy$Rz!_$R!_!`;T!`;'S$R;'S;=`$d<%lO$RZ?TWlQ!dPOy$Rz!O$R!O!P?m!P!Q$R!Q![Br![;'S$R;'S;=`$d<%lO$RZ?rUzWOy$Rz!Q$R!Q![@U![;'S$R;'S;=`$d<%lO$RZ@]YzW%OROy$Rz!Q$R!Q![@U![!g$R!g!h@{!h#X$R#X#Y@{#Y;'S$R;'S;=`$d<%lO$RZAQYzWOy$Rz{$R{|Ap|}$R}!OAp!O!Q$R!Q![BX![;'S$R;'S;=`$d<%lO$RZAuUzWOy$Rz!Q$R!Q![BX![;'S$R;'S;=`$d<%lO$RZB`UzW%OROy$Rz!Q$R!Q![BX![;'S$R;'S;=`$d<%lO$RZBy[zW%OROy$Rz!O$R!O!P@U!P!Q$R!Q![Br![!g$R!g!h@{!h#X$R#X#Y@{#Y;'S$R;'S;=`$d<%lO$RZCtSwROy$Rz;'S$R;'S;=`$d<%lO$RZDVWlQOy$Rz!O$R!O!P?m!P!Q$R!Q![Br![;'S$R;'S;=`$d<%lO$RZDtWqROy$Rz!O$R!O!PE^!P!Q$R!Q![@U![;'S$R;'S;=`$d<%lO$RYEcUzWOy$Rz!O$R!O!PEu!P;'S$R;'S;=`$d<%lO$RYE|SvQzWOy$Rz;'S$R;'S;=`$d<%lO$RYF_SlQOy$Rz;'S$R;'S;=`$d<%lO$RZFp[%OROy$Rz!O$R!O!P@U!P!Q$R!Q![Br![!g$R!g!h@{!h#X$R#X#Y@{#Y;'S$R;'S;=`$d<%lO$RkGkUucOy$Rz![$R![!]G}!];'S$R;'S;=`$d<%lO$RXHUS!SPzWOy$Rz;'S$R;'S;=`$d<%lO$RZHgS!oROy$Rz;'S$R;'S;=`$d<%lO$RjHzU!|`lQOy$Rz!_$R!_!`I^!`;'S$R;'S;=`$d<%lO$RjIgS!|`zWlQOy$Rz;'S$R;'S;=`$d<%lO$RnIzU!|`!_SOy$Rz!_$R!_!`%c!`;'S$R;'S;=`$d<%lO$RkJgV!aP!|`lQOy$Rz!_$R!_!`I^!`!aJ|!a;'S$R;'S;=`$d<%lO$RXKTS!aPzWOy$Rz;'S$R;'S;=`$d<%lO$RXKdYOy$Rz}$R}!OLS!O!c$R!c!}Lq!}#T$R#T#oLq#o;'S$R;'S;=`$d<%lO$RXLXWzWOy$Rz!c$R!c!}Lq!}#T$R#T#oLq#o;'S$R;'S;=`$d<%lO$RXLx[!rPzWOy$Rz}$R}!OLq!O!Q$R!Q![Lq![!c$R!c!}Lq!}#T$R#T#oLq#o;'S$R;'S;=`$d<%lO$RZMsS|ROy$Rz;'S$R;'S;=`$d<%lO$R_NUS{VOy$Rz;'S$R;'S;=`$d<%lO$R[NeUOy$Rz!_$R!_!`;T!`;'S$R;'S;=`$d<%lO$RkNzUOy$Rz#b$R#b#c! ^#c;'S$R;'S;=`$d<%lO$Rk! cUzWOy$Rz#W$R#W#X! u#X;'S$R;'S;=`$d<%lO$Rk! |SmczWOy$Rz;'S$R;'S;=`$d<%lO$Rk!!]UOy$Rz#f$R#f#g! u#g;'S$R;'S;=`$d<%lO$RZ!!tS!hROy$Rz;'S$R;'S;=`$d<%lO$RZ!#VS!pROy$Rz;'S$R;'S;=`$d<%lO$R]!#hU!dPOy$Rz!_$R!_!`;T!`;'S$R;'S;=`$d<%lO$RW!#}P;=`<%l#r",tokenizers:[ie,se,oe,ce,ae,re,Y,X,0,1,2,3,4],topRules:{StyleSheet:[0,10],Styles:[1,145]},dialects:{indented:0},specialized:[{term:172,get:e=>fe[e]||-1},{term:171,get:e=>pe[e]||-1},{term:80,get:e=>me[e]||-1},{term:173,get:e=>Q[e]||-1}],tokenPrec:3217}),$=s.define({name:`sass`,parser:he.configure({props:[e.add({Block:u,Comment(e,t){return{from:e.from+2,to:t.sliceDoc(e.to-2,e.to)==`*/`?e.to-2:e.to}}}),t.add({Declaration:i()})]}),languageData:{commentTokens:{block:{open:`/*`,close:`*/`},line:`//`},indentOnInput:/^\s*\}$/,wordChars:`$-`}}),ge=$.configure({dialect:`indented`,props:[t.add({"Block RuleSet":e=>e.baseIndent+e.unit}),e.add({Block:e=>({from:e.from,to:e.to})})]}),_e=d(e=>e.name==`VariableName`||e.name==`SassVariableName`);function ve(e){return new l(e?.indented?ge:$,$.data.of({autocomplete:_e}))}export{ve as sass};
|